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.\n");
        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.\n");
            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.\n");
            fflush(stderr);
            exit(0);
        } else {
            fprintf(stderr, "-d to disable, -e to enable.\n");
            fprintf(stderr, "run by itself to tick the card.\n");
            fflush(stderr);
            exit(0);
        }
    } else {
        fprintf(stderr, "Watchdog Ticking Away!\n");
        fflush(stderr);
    }

    while(1) {
        // 每一秒喂狗一次
        keep_alive();
        sleep(1);
    }
}

 

时间: 2024-09-21 08:51:33

linux watchdog demo hacking的相关文章

linux SPI bus demo hacking

/********************************************************************** * linux SPI bus demo hacking * 说明: * 本文主要解析linux应用程序如何使用SPI总线和设备通信. * * 2016-3-28 深圳 南山平山村 曾剑锋 *********************************************************************/ // 参考文档: //

Linux SocketCan client server demo hacking

/*********************************************************************** * Linux SocketCan client server demo hacking * 说明: * 本文主要是解读Linux上的SocketCan的基本使用方法,内容和Linux上的 * 网络编程差不多. * * 2016-3-28 深圳 南山平山村 曾剑锋 ********************************************

Qt 控制watchdog app hacking

/************************************************************************** * Qt 控制watchdog app hacking * 声明: * 本文主要是为了查看之前朋友留下的Qt控制watchdog软件运作机制. * * 2015-12-31 深圳 南山平山村 曾剑锋 *************************************************************************/

Qt QML referenceexamples attached Demo hacking

/********************************************************************************************* * Qt QML referenceexamples attached Demo hacking * 说明: * 1. 本源代码来自Qt自带的Example,而本文也仅仅是代码解读,需要有点基础: * 2. 由于是Qt自带Demo,分为几个文件,文件存在联系,而本人把所有代码放在这个文件里,会照成阅读困难:

Linux Watchdog Test Program

/*********************************************************************** * Linux Watchdog Test Program * 说明: * 由于之前的reset一直没有得到解决,所以这个Watchdog功能一直没有处理, * 现在问题解决了,于是需要加入这个测试程序. * * 2016-4-15 深圳 南山平山村 曾剑锋 ***********************************************

Linux 软件看门狗 watchdog使用介绍_C 语言

背景: root@119.10.6.23:/usr/local/php# ps aux|grep watchdog root 6 0.0 0.0 0 0 ? S Aug28 4:50 [watchdog/0] root 10 0.0 0.0 0 0 ? S Aug28 4:11 [watchdog/1] root 14 0.0 0.0 0 0 ? S Aug28 3:58 [watchdog/2] root 18 0.0 0.0 0 0 ? S Aug28 3:36 [watchdog/3] 附

做一个月薪3万的Linux云计算工程师的纠结与迷茫

周末,相信刚打开微信公众号的你刚脱离了加班的疲惫在睡梦中刚刚醒来,确定或者不太确定你的Linux运维之路,而今天小编特地为你整理了一道周末的鸡汤<你的前景一片光明>,来给你道明未来和说明会遇到的迷茫. 运维岗位不像其它岗位,如研发工程师.测试工程师等,有非常明确的职责定位及职业规划,比较有职业认同感与成就感;而运维工作可能给人的感觉是哪方面都了解一些,但又都比上专职工程师更精通.感觉平时被关注度比较低(除非线上出现故障),慢慢的大家就会迷惘,对职业发展产生困惑,为什么会有这种现象呢? 除了职业

Linux问题情报分享(2):grub-install工具不能处理/dev/xvda*路径

如果你的系统盘是/dev/xvda,而你又需要重新安装grub,你可能会遇到这样的问题 [root@demo ~]# fdisk -l -u Disk /dev/xvda: 42.9 GB, 42949672960 bytes 255 heads, 63 sectors/track, 5221 cylinders, total 83886080 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical

集群管理器 Mesos 能在 Windows 上运行了!

Mesosphere 和微软合作,把 Mesos 移植到 Windows,Mesos 能在 Windows Server 上运行了! Mesosphere,一家致力于构建一个基于 Mesos 项目的容器集中化"数据中心的操作系统"的公司,在 MesosCon 上公开了在 Windows Server 2016 预览版本上运行 Mesos 的第一个 demo. 微软在昨天刚刚发布了支持 Docker 容器的 Windows Server 技术预览版,开发人员都希望这些特性能很快在生产环境