博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt 控制watchdog app hacking
阅读量:6468 次
发布时间:2019-06-23

本文共 2598 字,大约阅读时间需要 8 分钟。

/************************************************************************** *                       Qt 控制watchdog app hacking * 声明: *     本文主要是为了查看之前朋友留下的Qt控制watchdog软件运作机制。 * *                                       2015-12-31 深圳 南山平山村 曾剑锋 *************************************************************************/ 一、参考文档:    1. Qt Documentation:        http://doc.qt.io/qt-4.8/qbasictimer.html    2. QTimer和QBasicTimer使用:        http://blog.csdn.net/thinkme2010/article/details/9112785    3. stm32独立看门狗和窗口看门狗的区别是什么?        http://www.zhixinrui.com/thread-1192-1-1.html    4. Linux下Watchdog        http://blog.csdn.net/hshl1214/article/details/6248942二、QBasicTimer Class:    This is a fast, lightweight, and low-level class used by Qt internally. We recommend using the higher-level QTimer class rather than this class if you want to use timers in your applications. Note that this timer is a repeating timer that will send subsequent timer events unless the stop() function is called.三、Linux下watchdog的工作原理    Watchdog在实现上可以是硬件电路也可以是软件定时器,能够在系统出现故障时自动重新启动系统。在Linux 内核下, watchdog的基本工作原理是:当watchdog启动后(即/dev/watchdog 设备被打开后),如果在某一设定的时间间隔内/dev/watchdog没有被执行写操作, 硬件watchdog电路或软件定时器就会重新启动系统。四、cat mainwindow.cpp    #include "mainwindow.h"    #include "ui_mainwindow.h"    #include 
#include
#include
#include
#include
#include
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); fd = 0; times = 0; } MainWindow::~MainWindow() { delete ui; ::close(fd); } void MainWindow::timerEvent(QTimerEvent *) { int dummy; QString str; times++; /** * timer每次都会执行,有点不合理 */ if(ui->checkBox->isChecked()) ::ioctl(fd,WDIOC_KEEPALIVE,&dummy); ui->times->setText(str.sprintf("%d",times)); } void MainWindow::on_pushButton_clicked() { // 打开watchdog设备文件,就相当于开机了watchdog,并设置了一个默认值 // 这个默认值是多少,目前不知道,去跟一下驱动,应该是可以获知的。 if(ui->pushButton->text() == QString("open watchdog")) { ui->pushButton->setText("close watchdog"); ui->checkBox->setDisabled(true); fd = ::open("/dev/watchdog",O_WRONLY); if(fd < 0) { QMessageBox::about(this,"error","open watchdog failure"); exit(-1); } times = 0; ui->times->setText("0"); timer.start(1000,this); } else // 关闭fd,就相当于关闭了watchdog { ui->pushButton->setText("open watchdog"); ui->checkBox->setEnabled(true); timer.stop(); ::close(fd); } } void MainWindow::moveEvent(QMoveEvent *) { this->move(QPoint(0,0)); } void MainWindow::resizeEvent(QResizeEvent *) { this->showMaximized(); } void MainWindow::closeEvent(QCloseEvent *) { exit(0); }

 

你可能感兴趣的文章
String字符串的截取
查看>>
DynamoDB Local for Desktop Development
查看>>
Shell编程-环境变量配置文件
查看>>
[Unity3d]DrawCall优化手记
查看>>
Struts2和Spring MVC的区别
查看>>
理解Javascript参数中的arguments对象
查看>>
p2:千行代码入门python
查看>>
bzoj1106[POI2007]立方体大作战tet*
查看>>
spring boot configuration annotation processor not found in classpath问题解决
查看>>
由中序遍历和后序遍历求前序遍历
查看>>
我学习参考的网址
查看>>
[Processing]点到线段的最小距离
查看>>
考研随笔2
查看>>
GitHub使用教程、注册与安装
查看>>
<<The C Programming Language>>讀書筆記
查看>>
git代码冲突
查看>>
解析查询 queryString 请求参数的函数
查看>>
学生选课系统数据存文件
查看>>
git bash 风格调整
查看>>
linux 脚本map,Linux Shell Map的用法详解
查看>>