Linux-2.6.32.2內(nèi)核在mini2440上的移植(十四)---移植看門狗驅(qū)動
移植環(huán)境
1,主機環(huán)境:VMare下CentOS 5.5 ,1G內(nèi)存。
2,集成開發(fā)環(huán)境:Elipse IDE
3,編譯編譯環(huán)境:arm-linux-gcc v4.4.3,arm-none-linux-gnueabi-gcc v4.5.1。
4,開發(fā)板:mini2440,2M nor flash,128M nand flash。
5,u-boot版本:u-boot-2009.08
6,linux 版本:linux-2.6.32.2
7,參考文章:
嵌入式linux應用開發(fā)完全手冊,韋東山,編著。
Mini2440 之Linux 移植開發(fā)實戰(zhàn)指南
Linux-2.6.32.2 內(nèi)核具有完善的S3C2440 的看夢狗驅(qū)動,我們只需配置一下就可以使用了。
提示:其實Linux-2.6.32.2 內(nèi)核缺省的mini2440_defconfig 就已經(jīng)配置好了看門狗驅(qū)動,我們只不過在此打開看看具體的配置路徑。
【1】在內(nèi)核中配置看門狗驅(qū)動
在內(nèi)核源代碼目錄執(zhí)行:make menuconfig,進入內(nèi)核配置主菜單,依次選擇進入如下子菜單:
Device Drivers --->
[*] Watchdog Timer Support --->
<*> S3C2410 Watchdog
在這里可以選擇對S2C2410/2440 中看門狗的配置選項。以上配置所對應的驅(qū)動源代碼為:linux-2.6.32.2/drivers/watchdog/s3c2410_wdt.c。
在開發(fā)板的終端啟動信息可以看到相應啟動信息:
... ...
i2c /dev entries driver
S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics
s3c2410-wdt s3c2410-wdt: watchdog inactive, reset disabled, irq enabled
cpuidle: using governor ladder
... ...
【2】關(guān)于打開和關(guān)閉看門狗
在看門狗驅(qū)動程序中,我們注意到有這樣一個函數(shù),注意其中的藍色粗體部分字體:
#define PFX "s3c2410-wdt: "
#define CONFIG_S3C2410_WATCHDOG_ATBOOT (0)
//這里表明看門狗的默認時間是15 秒,如果超過此時間系統(tǒng)將自行重啟
#define CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME (15)
static ssize_t s3c2410wdt_write(struct file *file, const char __user *data,
size_t len, loff_t *ppos)
{
/*
* Refresh the timer.
*/
if (len) {
if (!nowayout) {
size_t i;
/* In case it was set long ago */
expect_close = 0;
for (i = 0; i != len; i++) {
char c;
if (get_user(c, data + i))
return -EFAULT;
if (c == 'V')
expect_close = 42;
}
}
s3c2410wdt_keepalive();
}
return len;
}
根據(jù)此代碼,我們判定可以在打開看門狗設(shè)備(/dev/watchdog)之后不斷的向看門狗隨便寫入寫入一些數(shù)據(jù)以實現(xiàn)喂狗操作,但是,當寫入“V“時,就可以關(guān)閉看門狗了。
【3】測試看門狗
根據(jù)上面的分析,我們可以使用 echo 命令向/dev/watchdog 設(shè)備隨便寫入一些數(shù)據(jù)即可開啟看門狗,比如:echo 0 > /dev/watchdog,如下:
[root@mini2440 /]#echo 0 > /dev/watchdog
s3c2410-wdt s3c2410-wdt: Unexpected close, not stopping watchdog
[root@mini2440 /]#
此時,如果靜等 15 秒鐘,系統(tǒng)將會自動重啟,這樣就證實了看門狗已經(jīng)被開啟了。如果 15 秒之內(nèi),我們不停地重復“喂狗”操作,也就是不停的使用echo 命令向看門狗寫入數(shù)據(jù),那么系統(tǒng)就不會重啟。那么,如何停止看門狗呢?根據(jù)上面的分析,只要寫入“V”就可以了。需要知道的是,但我們使用echo 命令向/dev/watchdog 寫入數(shù)據(jù)的時候,同時也把“回車”給送進去了,因此可以這樣操作:echo -n V >/dev/watchdog這里的“-n”意思是“去掉回車”,為了測試,你可以先輸入:
echo 0 > /dev/watchdog
接著再輸入:
echo –n V > /dev/watchdog
然后接著靜等,過了好久,系統(tǒng)依然在正常運行,這就證明了看門狗已經(jīng)被關(guān)閉了。
接下來,將進行LED驅(qū)動移植