努力成为linux kernel hacker的人李万鹏原创作品,为梦而战。转载请标明出处
http://blog.csdn.net/woshixingaaa/archive/2011/06/06/6527969.aspx
默认看门狗是不开机启动的,我们可以向/dev/watchdog写入数据来启动关闭看门狗。使用echo命令,经过我的测试,这个命令启动的作用是先打开那个文件,再写入内容,然后关闭。也就是open->write->release。
此时打印出:
过了几秒后系统复位。
如果这样:
则系统不会复位。
为什么这样呢,下面看看源码是怎样实现的,open函数:
write函数:
release函数:
看门狗只能被一个进程打开,打开函数中先判断了一下,然后启动了看门狗;再看write函数,写入的如果是V则允许关闭看门狗,如果不是V仅仅喂狗一次;最后是release函数,如果允许关闭则关闭看门狗,如果不允许关闭,打印"Unexpected close, not stopping watchdog",喂狗一次。此时看门狗并没有关闭,所以系统会复位的,如果输入V则看门狗被关闭,这样系统就不复位了。
下面让看门狗开机启动:
查看启动信息:
首先make menuconfig进行配置:
在drivers/watchdog/s3c2410_wdt.c中进行修改:
设置成系统启动就启动看门狗,并且看门狗到期时间为20s。这样系统复位后每20s系统就会复位一次,所以我们在用户空间进行喂狗,驱动中的那个中断函数是当看门狗作为定时器时用的,所以没有实现喂狗,所以只能在用户程序中喂狗,下面是源码:
然后:
把wdt拷贝到root-2.6.30.4/sbin/下,并修改root-2.6.30.4/etc/init.d/rcS文件,添加wdt&这么一句,让系统启动后这个应用程序在后台运行:
然后重新制作文件系统:
此时由于用户程序在不断喂狗所以系统不复位了。再次查看启动信息:
分析看门狗源码s3c2410_wdt.c其中的中断处理函数是定时器中断处理函数。如果关闭复位功能,使能定时器功能,则中断处理函数中的喂狗也就是让定时器重新定时罢了。