LINUX下看门狗的使用

0、基本原理

使能看门狗,并配置看门狗,周期性的给看门狗设备写入数据即为喂狗。

1、使能硬看门狗

内核和设备树使能看门狗,具体的需要参考对应的cpu文档对看门狗的描述。

2、应用程序喂狗

参考应用程序源码如下:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/watchdog.h>

#define WDT_DEV "/dev/watchdog"

int main(void)
{
    int wdt_fd = -1;
    int timeout;
    wdt_fd = open(WDT_DEV , O_WRONLY);
    if (wdt_fd == -1)  
    {
        printf("fail to open "WDT_DEV "!\n");
    }
    printf(WDT_DEV " is opened!\n");
    timeout = 30;//30秒超时时间
    ioctl(wdt_fd, WDIOC_SETTIMEOUT, &timeout);
    ioctl(wdt_fd, WDIOC_GETTIMEOUT, &timeout);
    printf("The timeout was is %d seconds\n", timeout);
    #if 1// 循环喂狗
        while(1)  
        {
            write(wdt_fd, "\0", 1);
            sleep(29);// 喂狗时间为29秒,小于设定的30秒;如果喂狗时间大于超时时间,将会发生看门狗复位
        }
    #else// 关闭看门狗
        write(wdt_fd, "V", 1);
        close(wdt_fd);
        printf( WDT_DEV " is closeed!\n");
    #endif
    return 0;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux下,可以通过使用QT编写看门狗程序。以下是一个简单的示例: ``` c++ #include <QtCore/QCoreApplication> #include <QtCore/QTimer> #include <QtCore/QDebug> #include <unistd.h> #include <signal.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <errno.h> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 打开看门狗设备 int fd = open("/dev/watchdog", O_WRONLY); if (fd < 0) { qDebug() << "open watchdog device failed"; return -1; } // 设置看门狗定时器时间为5秒 int timeout = 5; if (ioctl(fd, WDIOC_SETTIMEOUT, &timeout) != 0) { qDebug() << "set watchdog timeout failed"; return -1; } // 启动看门狗 if (ioctl(fd, WDIOC_SETOPTIONS, WDIOS_ENABLECARD) != 0) { qDebug() << "start watchdog failed"; return -1; } // 定时器定时5秒 QTimer timer; timer.setInterval(5000); timer.start(); // 定时器超时后喂狗 QObject::connect(&timer, &QTimer::timeout, [](){ qDebug() << "feed dog"; write(fd, "V", 1); }); // 退出程序时关闭看门狗设备 QObject::connect(&a, &QCoreApplication::aboutToQuit, [&](){ qDebug() << "stop watchdog"; ioctl(fd, WDIOC_SETOPTIONS, WDIOS_DISABLECARD); close(fd); }); return a.exec(); } ``` 该程序使用了Qt的定时器来实现看门狗的喂狗功能,定时器超时后会向看门狗设备写入一个字节来喂狗。程序通过connect函数将定时器超时信号连接到喂狗的槽函数上,同时也连接了程序退出信号到关闭看门狗设备的槽函数上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值