扩展知识点----Linux中看门狗应用编程

本文介绍了Linux系统中看门狗的应用场景及工作原理,并提供了一个简单的编程实例,展示了如何设置超时时间并周期性地复位计数器以防止系统重启。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、在嵌入式产品中,为了方便Linux操作系统在异常情况下,能够自动复位,一般需要引入看门狗。看门狗其实就是在一定的时间内被复位的计数器。当看门狗启动后,计数器开始自动计数,如果计数器溢出就会产生CPU产生一个复位信号使得系统重启--俗称被狗咬。如果在一定的时间内对看门狗及时喂狗,不产生复位信号。

2、正常的Linux开发板中,都会集成看门狗定时器:WDOG1 普通的看门狗,支持产生中断信号或者复位CPU。 相应的设备节点在对应的路径下为:/dev/watchdog0  /dev/watchdog1等。

3、看门狗应用编程实验代码如下:

#include <stdio.h>

#include <stdlib.h>

#include <sys/types.h>

#define WDOG_DEV  “/dev/watchdog”

int main(int argc,char *argv[])

{

struct watchdog_info info;

int timeout; int time;

int fd;

int op;

/* 打开看门狗 */

fd = open(WDOG_DEV, O_RDWR);

if (0 > fd) { fprintf(stderr, "open error: %s: %s\n", WDOG_DEV, strerror(errno)); exit(EXIT_FAILURE); }

/* 打开之后看门狗计时器会开启、先停止它 */

op = WDIOS_DISABLECARD;

if (0 > ioctl(fd, WDIOC_SETOPTIONS, &op)) {

fprintf(stderr, "ioctl error: WDIOC_SETOPTIONS: %s\n", strerror(errno));

close(fd);

exit(EXIT_FAILURE);

}

timeout = atoi(argv[1]);

if (1 > timeout)

timeout = 1;

/* 设置超时时间 */

printf("timeout: %ds\n", timeout);

if (0 > ioctl(fd, WDIOC_SETTIMEOUT, &timeout)) {

fprintf(stderr, "ioctl error: WDIOC_SETTIMEOUT: %s\n", strerror(errno));

close(fd);

exit(EXIT_FAILURE);

}

/* 开启看门狗计时器 */

op = WDIOS_ENABLECARD;

if (0 > ioctl(fd, WDIOC_SETOPTIONS, &op)) {

fprintf(stderr, "ioctl error: WDIOC_SETOPTIONS: %s\n", strerror(errno));

close(fd); exit(EXIT_FAILURE);

}

/* 喂狗 */

time = (timeout * 1000 - 100) * 1000;//喂狗时间设置 us 微秒、在超时时间到来前 100ms 喂狗

for ( ; ; ) {

usleep(time);

ioctl(fd, WDIOC_KEEPALIVE, NULL);

}

}

总结:1、实例的代码很简单,利用参数传进来相应的超时时间,需要传入一个参数作为看门狗超时时间。2、Linux系统下都会有常用硬件的驱动节点,直接调用即可控制硬件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式开发星球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值