Linux下的WatchDog
看门狗🐕
看门狗简介
看门狗定时器(Watchdog Timer)是一种定时器,用于检测系统是否正常运行。如果系统在规定时间内没有向看门狗定时器发送复位信号,看门狗定时器就会产生复位信号,使系统复位。看门狗定时器通常用于嵌入式系统中,以防止系统进入死循环或响应时间过长。
看门狗作用
当受到外部或者内部干扰,如电磁干扰或者软件异常造成的程序跑飞。这时候就只能断电让设备重启,设备才可以回复正常。而看门狗可以使系统在一定时间间隔内复位(也就是发生死机或者跑飞这种情况设备可以自己复位而不是人工干预)。因此看门狗是可以保证系统可靠长期稳定运行的有效手段。
看门狗的子系统框架
- 看门狗的接口在Linux中是高度统一的存在,所以,在Linux中,看门狗的接口是统一的,无论底层硬件如何,上层接口都是一样的。这样,上层应用就可以使用统一的接口来操作看门狗,而不需要关心底层硬件的具体实现。
Demo ONE
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <linux/watchdog.h>
#define WARDOG_DEV "/dev/watchdog"
int main(int argc, char *argv[]){int time_out = 10; // 10 seconds timeout for the watchdogint ret = 0;int fd = open(WARDOG_DEV, O_RDWR);if (fd < 0) {perror("open");exit(1);}ret = ioctl(fd, WDIOC_SETTIMEOUT, &time_out);if (ret < 0) {perror("ioctl");exit(1);}// feed the watchdogret = ioctl(fd, WDIOC_KEEPALIVE, NULL);if (ret < 0) {perror("ioctl");exit(1);}return 0;
}