Watchdog使用参考

version 1.0


1. 概述

Watchdog 采用标准的linux 框架,提供硬件的watchdog,上层应用可以设定time out时间,自己来keep alive。

Watchdog默认是关闭的,可自行决定是否开启。开启建议在主线程中操作,如果在其他线程中操作,watchdog会随着线程的关闭而关闭。


2. Watchdog使用说明


2.1. Kernel下使用说明

2.1.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.1.2. 关闭Watchdog

参考代码如下:

int option = WDIOS_DISABLECARD;

ioctl(wdt_fd, WDIOC_SETOPTIONS, &option);

if (wdt_fd != -1)  
    {  
        close(wdt_fd);  
        wdt_fd = -1;  
    }

2.1.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.1.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);

2.2. Uboot下使用说明

包含头文件:alkaid\boot\drivers\mstar\wdt\wdt.h 调用以下接口即可

void wdt_reset(void);
void wdt_stop(void);
void wdt_start(U32 u32LaunchTim);
void wdt_set_timeout(U32 u32Timeout);