麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 服務器 > Linux服務器 > 正文

詳解linux 看門狗驅動編寫

2024-09-05 23:04:43
字體:
來源:轉載
供稿:網友

看門狗是linux驅動的一個重要環節。某些特殊的設備,有時候需要放在一些環境惡劣的地方,比如電信設備。但是,任何軟件都不可能100%沒有bug。如何保證軟件在遇到嚴重bug、死機的時候也能正常運行呢,那么看門狗就是有效的一種方法。看門狗一般要求用戶定時喂狗,如果一段時間沒有喂狗的話,那么系統就會自動重啟。今天,我們就來看看這個看門狗驅動怎么編寫?

1、代碼目錄

drivers/watchdog 

2、閱讀目錄下的Kconfig,可以找一個s3c模塊macro

config HAVE_S3C2410_WATCHDOG   bool   help    This will include watchdog timer support for Samsung SoCs. If    you want to include watchdog support for any machine, kindly    select this in the respective mach-XXXX/Kconfig file.  config S3C2410_WATCHDOG   tristate "S3C2410 Watchdog"   depends on HAVE_S3C2410_WATCHDOG || COMPILE_TEST   select WATCHDOG_CORE   select MFD_SYSCON if ARCH_EXYNOS   help    Watchdog timer block in the Samsung SoCs. This will reboot    the system when the timer expires with the watchdog enabled.     The driver is limited by the speed of the system's PCLK    signal, so with reasonably fast systems (PCLK around 50-66MHz)    then watchdog intervals of over approximately 20seconds are    unavailable.     The driver can be built as a module by choosing M, and will    be called s3c2410_wdt 

3、S3C2410_WATCHDOG主要依賴WATCHDOG_CORE,可以繼續跟蹤Makefile

obj-$(CONFIG_S3C2410_WATCHDOG) += s3c2410_wdt.o 

4、macro只依賴一個s3c2410_wdt.c文件,繼續查看

static SIMPLE_DEV_PM_OPS(s3c2410wdt_pm_ops, s3c2410wdt_suspend,       s3c2410wdt_resume);  static struct platform_driver s3c2410wdt_driver = {   .probe   = s3c2410wdt_probe,   .remove   = s3c2410wdt_remove,   .shutdown  = s3c2410wdt_shutdown,   .id_table  = s3c2410_wdt_ids,   .driver   = {     .name  = "s3c2410-wdt",     .pm = &s3c2410wdt_pm_ops,     .of_match_table = of_match_ptr(s3c2410_wdt_match),   }, };  module_platform_driver(s3c2410wdt_driver); 

5、確認driver為platform類型,繼續在probe函數中查找有用的code

ret = watchdog_register_device(&wdt->wdt_device); if (ret) {   dev_err(dev, "cannot register watchdog (%d)/n", ret);   goto err_cpufreq; } 

6、網上繼續查找,尋找到和watchdog有關的數據結構

static const struct watchdog_info s3c2410_wdt_ident = {   .options     =   OPTIONS,   .firmware_version = 0,   .identity     = "S3C2410 Watchdog", };  static const struct watchdog_ops s3c2410wdt_ops = {   .owner = THIS_MODULE,   .start = s3c2410wdt_start,   .stop = s3c2410wdt_stop,   .ping = s3c2410wdt_keepalive,   .set_timeout = s3c2410wdt_set_heartbeat,   .restart = s3c2410wdt_restart, };  static const struct watchdog_device s3c2410_wdd = {   .info = &s3c2410_wdt_ident,   .ops = &s3c2410wdt_ops,   .timeout = S3C2410_WATCHDOG_DEFAULT_TIME, }; 

7、找到設備注冊函數、函數結構基本就算結束了,當然有中斷的話,也可以確認一下

ret = devm_request_irq(dev, wdt_irq->start, s3c2410wdt_irq, 0,       pdev->name, pdev); if (ret != 0) {   dev_err(dev, "failed to install irq (%d)/n", ret);   goto err_cpufreq; } 

8、有興趣的話,可以找一個函數閱讀一下。比如下面這個重啟函數,可以和spec對比者來看

static int s3c2410wdt_restart(struct watchdog_device *wdd, unsigned long action,          void *data) {   struct s3c2410_wdt *wdt = watchdog_get_drvdata(wdd);   void __iomem *wdt_base = wdt->reg_base;    /* disable watchdog, to be safe */   writel(0, wdt_base + S3C2410_WTCON);    /* put initial values into count and data */   writel(0x80, wdt_base + S3C2410_WTCNT);   writel(0x80, wdt_base + S3C2410_WTDAT);    /* set the watchdog to go and reset... */   writel(S3C2410_WTCON_ENABLE | S3C2410_WTCON_DIV16 |     S3C2410_WTCON_RSTEN | S3C2410_WTCON_PRESCALE(0x20),     wdt_base + S3C2410_WTCON);    /* wait for reset to assert... */   mdelay(500);    return 0; } 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到服務器教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 色婷婷久久久 | 国产精品视频海角社区88 | 99热1| 中午日产幕无线码1区 | 精品国产1区2区3区 免费国产 | 国产高清美女一级毛片久久 | 日产精品久久久一区二区福利 | 亚洲第五色综合网 | 日本黄色大片免费 | 国产日韩在线观看视频 | 鸳鸯谱在线观看高清 | 主播粉嫩国产在线精品 | 日产精品久久久一区二区开放时间 | 欧美亚州 | 国产99久久精品一区二区 | 日韩大片在线永久观看视频网站免费 | 视屏一区| 麻豆一二区 | 中文字幕在线观看成人 | 操毛片 | 免费视频一区 | 国产影院在线观看 | h视频在线免费看 | 黄色av.com| 欧美日韩国产一区二区三区在线观看 | 久久久久久久久成人 | 免费在线观看午夜视频 | 久久精品伊人网 | 国产一区毛片 | 九一免费版在线观看 | 成人综合在线观看 | 欧美一级视频免费看 | 欧美一级黄色片在线观看 | 国产1区2 | 国产精品久久久久久久四虎电影 | 午夜精品久久久久久久爽 | 成人在线免费视频观看 | 自拍亚洲伦理 | 国产精品刺激对白麻豆99 | 欧美成人黄色小视频 | 欧美亚洲国产成人 |