寫在移植前的:
在mini6410中看門狗驅動檔案為linux2.6.38/drivers/watchdog/s3c2410_wdt.c
在mini6410中linux系統預設看門狗是不開機啟動,但是我們可以向/dev/watchdog寫入資料來啟動或關閉看門狗。
如:echo 0 >/dev/watchdog
echo這個命令啟動的作用是先開啟檔案,再寫入內容,然後關閉。也就是open->write->release。
執行效果:
一段時間後系統會自動重啟。
如果執行:
echo 0 >/dev/watchdog
echo v >/dev/watchdog
系統側不會重啟。
原因分析:
open函式:
static int s3c2410wdt_open(struct inode *inode, struct file *file)
release函式:
static int s3c2410wdt_release(struct inode *inode, struct file *file) expect_close = 0; clear_bit(0, &open_lock); return 0; }
write函式:
static ssize_t s3c2410wdt_write(struct file *file, const char __user *data, size_t len, loff_t *ppos) } s3c2410wdt_keepalive(); } return len; }
看門狗只能被乙個程序開啟,開啟函式中先判斷了一下,然後啟動了看門狗;再看write函式,寫入的如果是v則允許關閉看門狗,如果不是v僅僅餵狗一次;最後是release函式,如果允許關閉則關閉看門狗,如果不允許關閉,列印"unexpectedclose, not stopping watchdog",餵狗一次。此時看門狗並沒有關閉,所以系統會復位的,如果輸入v則看門狗被關閉,這樣系統就不復位了。
看門狗在mini6410上的移植過程:
首先配置:make menuconfig
在drivers/watchdog/s3c2410_wdt.c中進行修改:
#define config_s3c2410_watchdog_atboot (1) #define config_s3c2410_watchdog_default_time (15)注:
#define config_s3c2410_watchdog_atboot (0)//系統啟動時不開啟看門狗 #define config_s3c2410_watchdog_default_time (15)//復位時間
設定成系統啟動就啟動看門狗,並且看門狗到期時間為15s。這樣系統復位後每15s系統就會復位一次,所以我們在使用者空間進行餵狗,驅動中的那個中斷函式是當看門狗作為定時器時用的,所以沒有實現餵狗,所以只能在使用者程式中餵狗,下面是原始碼:
#include #include #include #include #include #include #include #include int main(int argc, char **argv) for(;;) close(fd); return 0; }
編譯:
arm-linux-gcc wdt.c -o wdt
把wdt拷貝到root-2.6.30.4/sbin/下,並修改root-2.6.38/etc/init.d/rcs檔案,新增wdt&這麼一句,讓系統啟動後這個應用程式在後台執行。
mini6410移植(arm linux)全攻略
一 mini6410移植全攻略 1 uboot移植之搭建開發環境 二 mini6410移植全攻略 2 uboot移植之搭建專案框架 三 mini6410移植全攻略 3 uboot移植之支援nand flansh啟動 上 四 mini6410移植全攻略 4 uboot移植之支援nand flansh啟...
基於mini2440的看門狗(裸機)
在由微控制器構成的微型計算機系統中,由於微控制器的工作常常會受到來自外界電磁場的干擾,造成程式的跑飛,而陷入死迴圈,程式的正常執行被打斷,由微控制器控制的系統無法繼續工作,會造成整個系統的陷入停滯狀態,發生不可預料的後果,所以出於對微控制器執行狀態進行實時監測的考慮,便產生了一種專門用於監測微控制器...
基於mini2440的看門狗(裸機)
在由微控制器構成的微型計算機系統中,由於微控制器的工作常常會受到來自外界電磁場的干擾,造成程式的跑飛,而陷入死迴圈,程式的正常執行被打斷,由微控制器控制的系統無法繼續工作,會造成整個系統的陷入停滯狀態,發生不可預料的後果,所以出於對微控制器執行狀態進行實時監測的考慮,便產生了一種專門用於監測微控制器...