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);
        }
    }
  • 相关阅读:
    不务正业系列-浅谈《过气堡垒》,一个RTS玩家的视角
    [LeetCode] 54. Spiral Matrix
    [LeetCode] 40. Combination Sum II
    138. Copy List with Random Pointer
    310. Minimum Height Trees
    4. Median of Two Sorted Arrays
    153. Find Minimum in Rotated Sorted Array
    33. Search in Rotated Sorted Array
    35. Search Insert Position
    278. First Bad Version
  • 原文地址:https://www.cnblogs.com/zengjfgit/p/5328356.html
Copyright © 2011-2022 走看看