|
因别的事儿此问题搁置了一段时间,昨天终于知道了为啥kill掉喂狗程序后系统也不再重启-----看门狗定时器被关掉了!!
kill掉喂狗程序后,会调用s3c2410_wdt.c中的s3c2410wdt_release(),在s3c2410wdt_release()中又调用s3c2410wdt_stop(),就关掉了看门狗定时器。
static int s3c2410wdt_release(struct inode *inode, struct file *file)
{
/*
* Shut off the timer.
* Lock it in if it's a module and we set nowayout
*/
if (expect_close == 42)
s3c2410wdt_stop();
else {
dev_err(wdt_dev, "Unexpected close, not stopping watchdog\n");
s3c2410wdt_keepalive();
}
expect_close = 0;
clear_bit(0, &open_lock);
return 0;
}
如果kill喂狗程序后,执行echo 0 > /dev/watchdog,就会调用s3c2410wdt_open(),重新打开看门狗定时器,15秒之后系统重启。
执行echo –n V > /dev/watchdog,关闭看门狗,系统不会重启。
然后通过别的方式停止喂狗来验证看门狗功能,系统可正常重启。通过kill喂狗程序无法验证。
但是不知道kill喂狗程序为什么会调用s3c2410wdt_release()???
|
|