我在linux嵌入式系统上使用linux watchdog驱动程序/ dev / watchdog,并将busy box作为用户空间工具。我想用C / C ++代码触发看门狗,它适用于长达60秒的超时:
watchdogFD = open( "/dev/watchdog", O_WRONLY );
int timeout = 60;
ioctl( watchdogFD, WDIOC_SETTIMEOUT, &timeout )
但是对于较大的间隔,超时被接受,但看门狗在60秒后已被触发。
linux watchdog deamon提供了一个--force参数来设置超过60秒的超时(参见https://linux.die.net/man/8/watchdog)。然而,繁忙的盒子看门狗deamon不提供这个(见https://git.busybox.net/busybox/tree/miscutils/watchdog.c?id=1572f520ccfe9e45d4cb9b18bb7b728eb2bbb571)。
有人建议在使用ioctl控制看门狗时如何使用相同的--force选项吗?谢谢:))
答案 0 :(得分:0)
与从此处链接的普通Linux相比,您链接到的busybox看门狗守护程序似乎非常简单:
https://sourceforge.net/p/watchdog/code/ci/master/tree/
Linux守护程序的--force选项(上述)用于覆盖轮询间隔(相对于所用硬件超时)的完整性检查。它将不会更改特定硬件驱动程序/计时器必须提供的任何限制。
通常,硬件超时的选择在10-60秒的范围内,具体取决于您可以忍受持续的主要故障(例如内核恐慌)持续的时间。然后,为计时器提供服务的看门狗守护程序必须以至少短几秒钟的时间间隔进行轮询,因此没有任何计时器会意外退出。在两次轮询之间,它使用nanosleep()来浪费其CPU时间,因此该守护程序的系统负载与轮询速率和运行的测试类型成比例。
没有任何测试,您所要防止的是杀死守护程序或内核的重大错误,因此通常您应该检查对于正常操作必不可少的其他内容(例如,特定进程处于活动状态,文件正在更新,测试脚本)可以运行等)以获取最大收益。