嵌入式系統watchdog詳解

嵌入式系統的工作常會受到外界電磁場的干擾,造成程序的跑飛,而陷入死循環,程序的正常運行被打斷,會造成整個系統的陷入停滯狀態,發生不可預料的後果,所以需要對嵌入式系統運行狀態進行實時監測,便產生了一種專門用於監測嵌入式系統運行狀態的芯片,稱"看門狗"。

 

Linux 自帶了一個watchdog 的實現,用於監視系統的運行,包括一個內核 watchdog module 和一個用戶空間的 watchdog 程序。內核 watchdog 模塊通過 /dev/watchdog 這個字符設備與用戶空間通信。用戶空間程序一旦打開/dev/watchdog 設備,就會導致在內核中啓動一個 1分鐘的定時器,此後,用戶空間程序需要保證在 1分鐘之內向這個設備寫入數據,每次寫操作會導致重新設定定時器。如果用戶空間程序在 1分鐘之內沒有寫操作,定時器到期會導致一次系統 reboot 操作。

 

看門狗,又叫 watchdogtimer(WDT),是一個定時器電路, 一般有一個輸入,叫喂狗,一個輸出到MCU(微控制單元 Microcontroller Unit,俗稱單片機)的RST端,MCU正常工作的時候,每隔一段時間輸出一個信號到喂狗端,給 WDT 清零,如果超過規定時間不喂狗(一般在程序跑飛時),WDT 定時超過,就會給出一個復位信號到MCU,使MCU復位. 防止MCU死機.

 

看門狗電路使嵌入式系統可以在無人狀態下實現連續工作,其工作原理是:看門狗芯片和單片機的一個I/O引腳相連,該I/O引腳通過程序控制它定時地往看門狗的這個引腳上送入高電平(或低電平),這一程序語句是分散地放在嵌入式系統其他控制語句中間的,一旦單片機由於干擾造成程序跑飛後而陷入某一程序段進入死循環狀態時,寫看門狗引腳的程序便不能被執行,這個時候,看門狗電路就會由於得不到嵌入式系統送來的信號,便在它和單片機復位引腳相連的引腳上送出一個復位信號,使單片機發生復位,即程序從程序存儲器的起始位置開始執行,這樣便實現了單片機的自動復位。

 

常用的WDT芯片如MAX813 ,5045, IMP 813等,價格4~10元不等。

 

硬件與軟件watchdog的區別

1、硬件watchdog必須有硬件電路支持, 設備節點/dev/watchdog對應着真實的物理設備, 不同類型的硬件watchdog設備由相應的硬件驅動管理。

軟件watchdog由一內核模塊softdog.ko 通過定時器機制實現,/dev/watchdog並不對應着真實的物理設備,只是爲應用提供了一個與操作硬件watchdog相同的接口。

2、硬件watchdog比軟件watchdog有更好的可靠性。 軟件watchdog基於內核的定時器實現,當內核或中斷出現異常時,軟件watchdog將會失效。而硬件watchdog由自身的硬件電路控制, 獨立於內核。無論當前系統狀態如何,硬件watchdog在設定的時間間隔內沒有被執行寫操作,仍會重新啓動系統。

一些硬件watchdog卡如WDT501P 以及一些Berkshire卡還可以監測系統溫度,提供了 /dev/temperature接口。

 

/dev/watchdog是一個主設備號爲10, 從設備號130的字符設備節點。

 

在Linux下使用watchdog開發應用之前, 請確定內核已經正確地配置支持watchdog。內核源碼下的drivers/char/watchdog/Kconfig文件提供了各種watchdog配置選項的詳細介紹。

如果內核配置選項‘CONFIG_WATCHDOG_NOWAYOUT’設爲‘Y’, 缺省情況下watchdog啓動後不能被停止。 如果模塊的nowayout參數設爲0, 往/dev/watchdog 寫入字符`V’ 可以使watchdog停止工作。

啓動watchdog的代碼段

int wd_fd= -1;

fd =open("/dev/watchdog", O_WRONLY);

if (wd_fd== -1)

{

    // fail to open watchdog device

}

停止watchdog的代碼段

  if (wd_fd != -1)
    {
        write(wd_fd, "V", 1);
        close(wd_fd);
        wd_fd = -1;
    }  

保持watchdog運行的代碼段

if (wdt_fd != -1)
        write(wdt_fd, "a", 1);

 

在基於Xilinx zynq的單芯片嵌入式系統中使用WDT,需要在設備樹種進行相應的配置。具體操作可以參考http://www.wiki.xilinx.com/Cadence+WDT+Driver

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章