Qt 控制watchdog app hacking

/**************************************************************************
 *                       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 <unistd.h>
    #include <fcntl.h>
    #include <sys/ioctl.h>
    #include <linux/types.h>
    #include <linux/watchdog.h>
    #include <QMessageBox>

    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);
    }

 

时间: 2024-09-16 03:02:21

Qt 控制watchdog app hacking的相关文章

Qt Quick Hello World hacking

/********************************************************************************************* * Qt Quick Hello World hacking * 说明: * 本代码是Qt生成Quick应用程序的时候自动生成Hello World程序: * * 2015-5-17 深圳 晴 南山平山村 曾剑锋 ************************************************

QT控制mplayer

1.MPlayer 的特殊控制模式    MPlayer 本身是一个命令行的程序,但是他提供了有后台模式(Slave),可以把自己输出重定向到一个指定的X Windows窗口中,并且可以通过管道向其发送命令来控制,这样就为GUI程序提供一个简单的编程接口.让其用图形界面来控制.Gnome下的 gmplayer其实就是通过这个方法来在图形界面调用MPlayer.     关于gtk下如何编程控制Mplayer可以参考http://blog.csdn.net/zhangbinka/archive/2

linux watchdog demo hacking

/********************************************************************** * linux watchdog demo hacking * 说明: * 本文主要解析linux watchdog大概应该如何操作. * * 2016-3-28 深圳 南山平山村 曾剑锋 *********************************************************************/ #include <st

控制-手机APP是怎么和蓝牙模块之间传输数据啊

问题描述 手机APP是怎么和蓝牙模块之间传输数据啊 想做一个APP,通过蓝牙来控制飞行器的起飞降落,这部分是怎么实现的,Java程序该怎么写啊 解决方案 接口,android有蓝牙库 解决方案二: 这个有本书是专门介绍android一些特殊功能的,比如蓝牙,你可以搜一下,买本来研究 解决方案三: 感觉你直接开始做吧,不用想那么多,很多都是在做中学习到的! 解决方案四: 使用专用通讯协议啊啊啊

关于一个App的背景音乐以及按钮控制背景音乐播放开关的问题

问题描述 关于一个App的背景音乐以及按钮控制背景音乐播放开关的问题 我正在为语言障碍的小朋友们做一个app,要求有几个模块,每个模块有几个Activity,每个模块的背景音乐不同,同一个模块下的Activity背景音乐相同,但是每个Activity都有一个button可以控制整个app的背景音乐的关闭和开启.请问大神门该怎么做这个App的背景音乐结构,求求大家了,我快急死了,没多少时间了. 解决方案 可以参考http://blog.csdn.net/imyang2007/article/det

headset-开发一个app,这个app由蓝牙耳机来控制

问题描述 开发一个app,这个app由蓝牙耳机来控制 开发一个由蓝牙耳机控制的app.蓝牙耳机与android手机如何通信? 我先说说我目前的情况:在阅读了android develope开发文档以后,蓝牙耳机的按钮的部分事件可以通过广播来获取到.比如说ACTION_MEDIA_BUTTON 这个类型的广播,但是ACTION_VENDOR_SPECIFIC_HEADSET_EVENT这个类型的广播就获取不到,但是在logcat又能够查看到ACTION_VENDOR_SPECIFIC_HEADSE

Qt 学习之路 2 --- 读书笔记

一.文章来由 来自豆子老师非常好的一本Qt教程,但是只有网络版,所以用这个做笔记了,不动笔墨不读书嘛~~ 二.读书笔记 1.Qt 学习之路 2(2):Qt 简介 1.1 关于 Qt 的一站式解决 Qt 是一个著名的 C++ 应用程序框架.但并不只是一个 GUI 库,因为 Qt 十分庞大,并不仅仅是 GUI 组件.使用 Qt,在一定程度上你获得的是一个"一站式"的解决方案:不再需要研究 STL,不再需要 C++ 的,不再需要到处去找解析 XML.连接数据库.访问网络的各种第三方库,因为

app-手机APP要如何用WIFI连到它USB并传档到USB中

问题描述 手机APP要如何用WIFI连到它USB并传档到USB中 我买了一个装置USB STORAGE(ISHOWDRIVE),他可以用WIFI直接从手机传档到到他的USB中.想问一下在Qt中手机APP要如何用WIFI连到它USB并传档到USB中.另外我是用Qt widgit for ios/android.还有他的USB STORAGE有提供一个WIFI的点做为连接.

angular基于路由控制ui-router实现系统权限控制_AngularJS

前端去实现权限控制听起来有点扯淡(实际也有点扯淡),掩耳盗铃,主要是担心安全问题,但是如果在前后端分离的情况下,需要做一个带有权限控制的后台管理系统,angular基于ui-router应该怎么做呢? 权限的设计中比较常见的就是RBAC基于角色的访问控制,基本思想是,对系统操作的各种权限不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个角色集合.每一种角色对应一组相应的权限.  一旦用户被分配了适当的角色后,该用户就拥有此角色的所有操作权限.这样做的好处是,不必在每次创建用户时都进行分