Linux 軟體看門狗 watchdog

2021-07-08 17:17:20 字數 1031 閱讀 8837

linux 自帶了乙個 watchdog 的實現,用於監視系統的執行,包括乙個核心 watchdog module 和乙個使用者空間的 watchdog 程式。核心 watchdog 模組通過 /dev/watchdog 這個字元裝置與使用者空間通訊。使用者空間程式一旦開啟 /dev/watchdog 裝置(俗稱「開門放狗」),就會導致在核心中啟動乙個1分鐘的定時器(系統預設時間),此後,使用者空間程式需要保證在1分鐘之內向這個裝置寫入資料(俗稱「定期餵狗」),每次寫操作會導致重新設定定時器。如果使用者空間程式在1分鐘之內沒有寫操作,定時器到期會導致一次系統 reboot 操作(「狗咬人了」呵呵)。通過這種機制,我們可以保證系統核心程序大部分時間都處於執行狀態,即使特定情形下程序崩潰,因無法正常定時「餵狗」,linux系統在看門狗作用下重新啟動(reboot),核心程序又執行起來了。多用於嵌入式系統。

開啟 /dev/watchdog 裝置(「開門放狗」):

[cpp]view plain

copy

intfd_watchdog = open(

"/dev/watchdog"

, o_wronly);  

if(fd_watchdog == -1)   

每隔一段時間向 /dev/watchdog 裝置寫入資料(「定期餵狗」):

[cpp]view plain

copy

//feed the watchdog

if(fd_watchdog >= 0)   

}  

關閉 /dev/watchdog 裝置,通常不需要這個步驟:

[cpp]view plain

copy

close(fd_watchdog);  

所需標頭檔案:

[cpp]view plain

copy

#include 

#include 

#include 

#include 

硬體看門狗和軟體看門狗

看門狗,又叫watchdog timer,從本質上來說就是乙個定時器電路,一般有乙個輸入和乙個輸出,其中的輸入叫做餵狗,輸出一般連線到另外乙個部分的復位端,另外乙個部分就是所要處理的部分,暫且稱之為mcu。在mcu正常工作的時候,每隔一段時間輸出乙個訊號到餵狗端,給看門狗電路清零,如果在超過規定的時...

Linux 軟體看門狗 watchdog 餵狗

linux 自帶了乙個 watchdog 的實現,用於監視系統的執行,包括乙個核心 watchdog module 和乙個使用者空間的 watchdog程式。核心 watchdog 模組通過 dev watchdog 這個字元裝置與使用者空間通訊。使用者空間程式一旦開啟 dev watchdog 裝...

Linux 軟體看門狗 watchdog 餵狗

linux 自帶了乙個 watchdog 的實現,用於監視系統的執行,包括乙個核心 watchdog module 和乙個使用者空間的 watchdog程式。核心 watchdog 模組通過 dev watchdog 這個字元裝置與使用者空間通訊。使用者空間程式一旦開啟 dev watchdog 裝...