看門狗超時前在核心列印資訊
前不久,有幾臺裝置一直在無故復位,雖然我很懷疑是應用程式搞死裝置的,但公司的人員一向都是自己找不到問題就賴核心。對於這個復位,我的意見是禁止看門狗再測試,但沒人理會,因此我想在看門狗超時前在核心裡列印點東西,以證明到底是不是狗超時引起的復位(其實很久前就有這個想法,也嘗試了,就是因為一個小小的疏忽不成功)。
在狗超時前列印資訊需要在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日