Watchdog使用参考
1. 概述¶
Watchdog 采用标准的linux 框架,提供硬件的watchdog,上层应用可以设定time out时间,自己来keep alive。
Watchdog默认是关闭的,客户可自行决定是否开启。开启建议在主线程中操作,如果在其他线程中操作,watchdog会随着线程的关闭而关闭。
2. WATCHDOG KERNEL控制¶
2.1. SStar Kernel config开启¶
2.2. IOCTL¶
2.2.1. 打开Watchdog
打开/dev/watchdog设备,watchdog将被启动。
参考代码如下:
int wdt_fd = -1; wdt_fd = open("/dev/watchdog", O_WRONLY); if (wdt_fd == -1) { // fail to open watchdog device }
2.2.2. 关闭Watchdog
参考代码如下:
int option = WDIOS_DISABLECARD; ioctl(wdt_fd, WDIOC_SETOPTIONS, &option); if (wdt_fd != -1) { close(wdt_fd); wdt_fd = -1; }
2.2.3. 设定TIMEOUT
通过标准的IOCTL命令WDIOC_SETTIMEOUT,来设定timeout,单位是second,timeout的时间建议大于5s,参考代码如下:
#define WATCHDOG_IOCTL_BASE 'W' #define WDIOC_SETTIMEOUT_IOWR(WATCHDOG_IOCTL_BASE, 6, int) int timeout = 20; ioctl(wdt_fd, WDIOC_SETTIMEOUT, &timeout);
2.2.4. KEEP ALIVE
通过标准的IOCTL命令WDIOC_KEEPALIVE来喂狗,喂狗时间按照设定的timeout来决定,喂狗时间应该比timeout小,参考代码如下:
#define WATCHDOG_IOCTL_BASE 'W' #define WDIOC_KEEPALIVE_IOR(WATCHDOG_IOCTL_BASE, 5, int) ioctl(wdt_fd, WDIOC_KEEPALIVE, 0);
3. WATCHDOG BOOT控制¶
3.1. SStar Uboot config开启¶
$uboot/include/configs/infinity6c.h打开CONFIG_HW_WATCHDOG
喂狗function是WATCHDOG_RESET(); 在耗时的tftp/flash读写刻录等会调用此操作,默认60s。
3.2. SStar IPL config开启¶
编译: make HW_WDT=<value>
,value为指定秒数, IPL启动的话, 需要自己加喂狗
hw_watchdog_reset();
另外于UBOOT也需要开启watchdog。