前不久,有几台设备一直在无故复位,虽然我很怀疑是应用程序搞死设备的,但公司的人员一向都是自己找不到问题就赖内核。对于这个复位,我的意见是禁止看门狗再测试,但没人理会,因此我想在看门狗超时前在内核里打印点东西,以证明到底是不是狗超时引起的复位(其实很久前就有这个想法,也尝试了,就是因为一个小小的疏忽不成功)。
在狗超时前打印信息需要在WDT驱动中改代码。加上打印信息,就能知道到底是不是看门狗超时导致系统复位了。
前提条件是芯片的看门狗支持DELAY中断(其它的不我知道,反正我所搞的那个芯片是有的)。
步骤如下:
在probe函数
1、中注册DELAY中断,
2、设置DELAY时间(即狗超时前多少秒触发中断)。
3、使能DELAY中断。
4、在DELAY中断处理函数(isr)打印你想打印的信息。
5、为了观看时间,可以调用do_gettimeofday和rtc_time_to_tm函数(只要#include <linux/rtc.h>即可)。
另外要注意的是在设置狗超时时间timeout时,要设置DELAY时间。
之前我搞不成功,是因为我没有在设置狗超时时间的同时设置DELAY时间。因为超时时间一量更改了,DELAY也必须跟着更改。
下面是效果示例:
// 启动时间:
XXXX -rtc XXXX 1-rtc: setting system clock to 2014-05-14 02:09:19 UTC (1400033359)
//狗超时:
<- Late Lee Watchdog DELAY interrupt happened ->
At UTC time :2014-04-14 02:10:18
Will reboot soon...
代码是公司的,思路是自己整理的,只给出思路,不便放代码。打印信息也作了处理,但不影响示例。
李迟记于2014年5月20日