一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Linux|Centos|Ubuntu|系統進程|Fedora|注冊表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服務器之家 - 服務器系統 - Linux - 詳解linux 看門狗驅動編寫

詳解linux 看門狗驅動編寫

2022-03-07 16:45feixiaoxing Linux

本篇文章主要介紹了詳解linux 看門狗驅動編寫,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

1、代碼目錄

?
1
drivers/watchdog

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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

?
1
obj-$(CONFIG_S3C2410_WATCHDOG) += s3c2410_wdt.o

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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

?
1
2
3
4
5
ret = watchdog_register_device(&wdt->wdt_device);
if (ret) {
  dev_err(dev, "cannot register watchdog (%d)\n", ret);
  goto err_cpufreq;
}

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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、找到設備注冊函數、函數結構基本就算結束了,當然有中斷的話,也可以確認一下

?
1
2
3
4
5
6
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對比者來看

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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;
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/feixiaoxing/article/details/79874642

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 全彩孕交漫画福利啪啪吧 | 亚洲一级特黄特黄的大片 | 国产麻豆精品入口在线观看 | 久久热在线视频精品店 | caoporn草棚在线视频 | 欧美色精品天天在线观看视频 | 欧美日韩高清完整版在线观看免费 | 毛片免费全部免费观看 | 任我鲁精品视频精品 | 欧美高清国产 | 国产亚洲精品高清在线 | 欧美日韩亚洲成人 | 九九热在线视频观看这里只有精品 | 青草久久影院 | 日本加勒比在线精品视频 | 青柠影院在线观看免费完整版1 | 成人无高清96免费 | 美尻在线 | 国产一区二区三区在线看片 | 99视频在线看 | 午夜爽喷水无码成人18禁三级 | 欧美va在线播放免费观看 | 国产精品久久毛片蜜月 | 四虎影在线永久免费观看 | 久久精品亚洲国产AV涩情 | 亚洲精品视频在线 | 亚洲精品国产成人7777 | 无人影院在线播放 | 国产精品久久久久影视不卡 | 国内自拍成人网在线视频 | 欧美日韩国产一区二区三区不卡 | 国产农村一级特黄α真人毛片 | 国产在线观看精品香蕉v区 国产在线观看a | 欧美肥胖bb | 欧美一区二区视频 | 我被黄总征服的全过程 | 成人私人影院在线版 | 91麻豆国产精品91久久久 | 日韩欧一级毛片在线播无遮挡 | 国产亚洲精品一区二区在线播放 | 欧美激情精品久久久久久不卡 |