乙個軟體實現的Linux看門狗 soft wdt

2021-09-07 12:29:59 字數 3191 閱讀 4622

soft_wdt(下面簡稱本軟體)是乙個軟體實現的linux看門狗。

本軟體是一款開源、免費軟體。

本軟體和/drivers/watchdog/softdog.c實現的軟體看門狗差點兒一樣。

基本的不同點是,前者支援乙個看門狗。本軟體則支援大量的看門狗。

soft_wdt**編譯後。生成乙個核心模組soft_wdt.ko。

模組載入後,將建立乙個裝置檔案/dev/soft_wdt

使用者態程式,通過系統呼叫open每開啟一次/dev/soft_wdt,就得到乙個新的看門狗,

此看門狗的用法就和普通的看門狗一樣。

比如:1) 向fd寫入不論什麼資料,就等於是餵狗。

2) 使用者能夠通過ioctl對看門狗進行各種操作。

3) 假設模擬載入時,模組引數nowayout的值為0,

那麼當使用者向fd寫入一次含有字元v(注意。是大寫)的資料時,

就將此看門狗設定成了可關閉的。

以下介紹一下此軟體的用法

(一)模組編譯

方法一、單獨編譯

在soft_wdt源**資料夾下。執行例如以下命令就可以

make -c /path/to/kernel/source/dir m=`pwd` modules

方法二、在linux核心編譯體系中編譯

1. 拷貝soft_wdt.c到drivers/watchdog/資料夾下。

2. 將以下這行**。追加到核心源**的drivers/watchdog/makefile中(在architecture independant部分)

obj-$(config_soft_wdt) += soft_wdt.o

3. 將以下的內容追加到核心源**的drivers/watchdog/kconfig中(在architecture independant部分)

config soft_wdt

tristate "software watchdog timer (multiple dogs)"

default m

help

a software watchdog driver, supporting multiple dogs.

each time, user opens the device file(/dev/soft_wdt),

a new dog was created, associated with the fd returned

by the open system call. the usage of each dog is just

the same as ordinary watchdog, including magic close.

currently the driver supports a maximum of 128 dogs.

to compile this driver as a module, choose m here: the

module will be called soft_wdt.

4. 執行make menuconfig進入watchdog驅動程式的選擇介面,然後直接退出,並儲存配置。

5. 執行make modules。然後在drivers/watchdog/資料夾下。就會生成模組檔案soft_wdt.ko

(二)模組載入

本軟體提供的模組引數例如以下。

使用者可依據須要進行指定。

nowayout           - 一旦啟動看門狗,不能夠停止 (0。no;1,yes。default=0)

timeout            - 看門狗超時時間。單位:秒。 (0 ~ 65536, default=5)

no_reboot          - 看門狗超時。不重新啟動系統 。(0,no; 1,yes  default=0)

core_dump_ill_task - 看門狗超時時,core dump異常任務,(0,no; 1,yes  default=1)

注意,core dump是通過向異常執行緒傳送sigabrt訊號實現的。

因此。假設使用看門狗的程式。想自己記錄異常資訊。能夠通過捕獲sigabrt訊號來實現。

以下是載入命令的演示樣例。

1. 使用預設引數載入(預設值如上面所列)

insmod soft_wdt.ko

2. 指定引數載入(12秒超時,看門狗可關閉。超時不重新啟動機器)

insmod soft_wdt.ko timeout=12 nowayout=0 no_reboot=1

(三)使用者態程式使用看門狗

以下是演示樣例**

#include #include #include #include #include #include #include #include #include #define    soft_wdt_dev    "/dev/soft_wdt"

int feed_dog_cnt;

int feed_dog_gap;

int main(int argc, char *ar**)

fd=open("/dev/soft_wdt", o_wronly);

if (fd < 0)

printf("open %s succeed\n", soft_wdt_dev);

timeout = 7;

printf("set timeout to %d\n", timeout);

ioctl(fd, wdioc_settimeout, &timeout);

timeout = 0;

ioctl(fd, wdioc_gettimeout, &timeout);

printf("get timeout returns %d\n", timeout);

ioctl(fd, wdioc_getsupport, &ident);

printf("dog name is %s\n", ident.identity);

printf("make the dog closable\n");

write(fd, "v", 1);

feed_dog_gap = atoi(ar**[1]);

feed_dog_cnt = atoi(ar**[2]);

for (i=0; iprintf("stop feeding dog\n");

while (1)

return 0;

}

Linux 軟體看門狗 watchdog

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

Linux 軟體看門狗 watchdog 餵狗

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

Linux 軟體看門狗 watchdog 餵狗

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