一個軟體實現的Linux看門狗—soft_wdt

來源:互聯網
上載者:User

標籤:linux   核心   看門狗   

    soft_wdt是一個軟體實現的Linux看門狗。

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

    :http://sourceforge.net/projects/soft-wdt/files/latest/download?source=files


    soft_wdt的主要特點:
        1. 他可以提供大量的看門狗供使用者使用; 
        2. 每個看門狗的特性可以單獨進行設定


    soft_wdt代碼編譯後,產生一個核心模組soft_wdt.ko。


    模組載入後,將建立一個檔案/dev/soft_wdt


    使用者態程式,通過系統調用open每開啟一次/dev/soft_wdt,就得到一個看門狗,
該看門狗通過open返回的fd進行操作。


    使用者每調用一次write系統調用,向fd寫入任何資料,就完成了一次喂狗操作。


    如果通過向fd寫入如下幾種特殊資料,則可實現對看門狗的一些設定。


    <name>x</name>  給看門狗取個名字。x為狗的名字,例如 wangcai  :)。
    <timeout>x</timeout> 設定逾時時間,單位為秒。x換成具體數值即可。
    <stop_on_fd_close>x</stop_on_fd_close> 設定關閉fd時,看門狗是否關閉。x=1 close; x=0 not close
    <no_reboot>x</no_reboot> 設定看門狗逾時後,是否重啟系統。x=1 no reboot; x=0 reboot
    <stop_dog>x</stop_dog>   停止看門狗。 x=1 stop; x=0 do nothing


下面介紹一下此軟體的編譯及使用方法

(一)模組編譯


方法一、單獨編譯


    在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 "soft_wdt-Software watchdog timer"
default m
help
 Software implemented watchdog timer, supporting mutiple dogs, 
 and supply some control mechanism.


 To compile this driver as a module, choose M here: the
 module will be called softdog.


    4. 執行make menuconfig進入watchdog驅動程式的選擇介面,然後直接退出,並儲存配置。
    
    5. 執行make modules,然後在drivers/watchdog/目錄下,就會產生模組檔案soft_wdt.ko


(二)模組載入
    1. 使用預設參數載入(5秒逾時,記錄檔為/var/log/soft_wdt.log)
    insmod soft_wdt.ko


    2. 指定參數載入(5秒逾時,記錄檔為/var/log/soft_wdt.log)
    insmod soft_wdt.ko timeout=12 log_file="/path/to/other/log_file"


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


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>


#define    SOFT_WDT_DEV    "/dev/soft_wdt"


int main(int argc, char *argv[])
{
    int i;
    int fd=open("/dev/soft_wdt", O_WRONLY);


    if (fd < 0)
    {
        printf("open %s failed\n", SOFT_WDT_DEV);
        exit(1);
    }


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


    /* set dog name. it‘s heplful for review log file. */
    write(fd, "<name>my_dog</name>", strlen("<name>my_dog</name>"));


    /* set timeout to 123 seconds */
    write(fd, "<timeout>123</timeout>", strlen("<timeout>123</timeout>"));


    /* we just make a test. So don not reboot system */
    write(fd, "<no_reboot>1</no_reboot>", strlen("<no_reboot>1</no_reboot>"));
    
    for (i=0; i<100; i++)
    {
        write(fd, "1234", 4);
        usleep(1000000);
    }


    /* attention: before close fd, you should stop dog. otherwise, it may still effects */
    write(fd, "<stop_dog>1</stop_dog>", strlen("<stop_dog>1</stop_dog>"));
    close(fd);
    
    return 0;
}


一個軟體實現的Linux看門狗—soft_wdt

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.