zoukankan      html  css  js  c++  java
  • linux watchdog demo hacking

    /**********************************************************************
     *                    linux watchdog demo hacking
     * 说明:
     *     本文主要解析linux watchdog大概应该如何操作。
     *
     *                                    2016-3-28 深圳 南山平山村 曾剑锋
     *********************************************************************/
    
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <sys/ioctl.h>
    #include <linux/types.h>
    #include <linux/watchdog.h>
    
    int fd;
    
    /*
     * This function simply sends an IOCTL to the driver, which in turn ticks
     * the PC Watchdog card to reset its internal timer so it doesn't trigger
     * a computer reset.
     * 这个函数仅仅是发送一个IOCTL命令给驱动,重新启动Watchdog的内部时钟计数器,
     * 这样就不会导致系统重启。
     */
    static void keep_alive(void)
    {
        int dummy;
    
        ioctl(fd, WDIOC_KEEPALIVE, &dummy);
    }
    
    /*
     * The main program.  Run the program with "-d" to disable the card,
     * or "-e" to enable the card.
     * 主程序,通过传递参数-d来关闭watchdog,-e来打开watchdog。
     */
    int main(int argc, char *argv[])
    {
        int flags;
    
        // 打开设备节点
        fd = open("/dev/watchdog", O_WRONLY);
        if (fd == -1) {
            fprintf(stderr, "Watchdog device not enabled.
    ");
            fflush(stderr);
            exit(-1);
        }
    
        if (argc > 1) {
            // 关闭watchdog
            if (!strncasecmp(argv[1], "-d", 2)) {
                flags = WDIOS_DISABLECARD;
                ioctl(fd, WDIOC_SETOPTIONS, &flags);
                fprintf(stderr, "Watchdog card disabled.
    ");
                fflush(stderr);
                exit(0);
            // 使能watchdog
            } else if (!strncasecmp(argv[1], "-e", 2)) {
                flags = WDIOS_ENABLECARD;
                ioctl(fd, WDIOC_SETOPTIONS, &flags);
                fprintf(stderr, "Watchdog card enabled.
    ");
                fflush(stderr);
                exit(0);
            } else {
                fprintf(stderr, "-d to disable, -e to enable.
    ");
                fprintf(stderr, "run by itself to tick the card.
    ");
                fflush(stderr);
                exit(0);
            }
        } else {
            fprintf(stderr, "Watchdog Ticking Away!
    ");
            fflush(stderr);
        }
    
        while(1) {
            // 每一秒喂狗一次
            keep_alive();
            sleep(1);
        }
    }
  • 相关阅读:
    (转)linux书籍推荐
    (转)X Windows与GNOME,KDE的关系
    (转)学习Linux编程开发必读书籍
    (转)详解C中volatile关键字
    博客开张了
    VMware虚拟产品简介
    c++ eof()
    旋转矩阵
    VMware文件辨别
    Microsoft HTTPAPI/2.0 use Port 80 – 无法启动WAMP Apache
  • 原文地址:https://www.cnblogs.com/zengjfgit/p/5328356.html
Copyright © 2011-2022 走看看