无论硬件watchdog还是由软件模拟的硬件watchdog,最终都是管理的/dev/watchdog文件。Linux内核自身有watchdog驱动的实现,其主要代码在drivers/watchdog下。其工作的大概流程是,先注册watchdog驱动,系统通过start启动/dev/watchdog设备后,由定时的ping来保证喂狗,如果在timeout时间内检测到都没有喂狗的话,就会系统复位修复。
注册watchdog驱动
通过watchdog_register_device注册watchdog_device为对象的watchdog驱动。Watchdog的结构如下:
truct watchdog_device {
int id;
struct cdev cdev;
struct device *dev;
struct device *parent;
const struct watchdog_info *info;
const struct watchdog_ops *ops;
unsigned int bootstatus;
unsigned int timeout;
unsigned int min_timeout;
unsigned int max_timeout;
void *driver_data;
struct mutex lock;
unsigned long status;
/* Bit numbers for status flags */
#define WDOG_ACTIVE 0 /* Is the watchdog running/active */
#define WDOG_DEV_OPEN 1 /* Opened via /dev/watchdog ? */
#define WDOG_ALLOW_RELEASE 2 /* Did we receive the magic char ? */
#define WDOG_NO_WAY_OUT 3 /* Is 'nowayout' feature s