当前位置:  开发笔记 > 运维 > 正文

谁在Linux中刷新硬件看门狗?

如何解决《谁在Linux中刷新硬件看门狗?》经验,为你挑选了3个好方法。

我有一个运行2.6内核的处理器AT91SAM9G20.看门狗在引导级别启用并配置为16秒.看门狗模式寄存器只能配置一次.当代码在引导程序,引导程序或内核中挂起时,该板将重新启动.但是一旦内核出现,即使看门狗没有在任何应用程序中刷新,板也不会在16秒后重置,而是15分钟.

谁在刷新看门狗?

在我们的例子中,看门狗应该受到应用程序的影响,因此如果我们的应用程序挂起,则可以重置板.

这些是正在运行的进程:

1 root     init
2 root     [kthreadd]
3 root     [ksoftirqd/0]
4 root     [watchdog/0]
5 root     [events/0]
6 root     [khelper]
63 root     [kblockd/0]
72 root     [ksuspend_usbd]
78 root     [khubd]
85 root     [kmmcd]
107 root     [pdflush]
108 root     [pdflush]
109 root     [kswapd0]
110 root     [aio/0]
740 root     [mtdblockd]
828 root     [rpciod/0]
982 root     [jffs2_gcd_mtd10]
1003 root     /sbin/udevd -d
1145 daemon   portmap
1158 dbus     dbus-daemon --system
1178 root     /usr/sbin/ifplugd -i eth0 -fwI -u0 -d5 -l -q
1190 root     /usr/sbin/ifplugd -i eth1 -fwI -u0 -d5 -l -q
1221 default  avahi-daemon: running [SP14.local]
1226 root     /usr/sbin/dropbear
1246 root     /root/bin/host_app
1254 root     /root/bin/mini_httpd -c *.cgi -d /root/bin -u root -E /root/bin/
1256 root     -sh
1257 root     /sbin/syslogd -n -m 0
1258 root     /sbin/klogd -n
1259 root     /usr/bin/tail -f /var/log/messages
1265 root     ps -e

我们在kernel-2.6.25-ts.at91sam9g20/kernel/softlockup.c中使用看门狗进行软锁定.



1> shodanex..:

如果在内核中启用了监视程序驱动程序,则监视程序驱动程序会设置内核计时器,负责重置监视程序.相应的代码在这里.它的工作原理如下:

如果没有应用程序打开/ dev/watchdog文件,则内核负责重置监视程序.由于它是一个计时器,它不会显示为专用的内核线程,而是由软IRQ线程处理.现在,如果应用程序打开此文件,它将负责监视程序,并可以通过写入文件来重置它,如Richard的帖子中链接的文档所述.

是否在内核中配置了看门狗驱动程序?如果没有,你应该配置它,看看是否仍然发生重置.如果它仍然发生,很可能你的重置来自其他地方.

如果你的内核太旧而没有合适的看门狗驱动程序(2.6.25中没有),你应该从2.6.28向后移植它.或者您可以尝试在引导加载程序中禁用看门狗,看看是否仍然发生了重置.



2> Nolan Herger..:

2016年7月,4.7内核中对watchdog_dev.c 的提交启用了与shodanex对所有监视程序计时器驱动程序的答案相同的行为.除了此线程和源代码之外,似乎没有任何记录.

/*
* A worker to generate heartbeat requests is needed if all of the
* following conditions are true.
* - Userspace activated the watchdog.
* - The driver provided a value for the maximum hardware timeout, and
*   thus is aware that the framework supports generating heartbeat
*   requests.
* - Userspace requests a longer timeout than the hardware can handle.
*
* Alternatively, if userspace has not opened the watchdog
* device, we take care of feeding the watchdog if it is
* running.
*/

return (hm && watchdog_active(wdd) && t > hm) ||
       (t && !watchdog_active(wdd) && watchdog_hw_running(wdd));



3> Richard Penn..:

这可能会给你一个提示:http://www.mjmwired.net/kernel/Documentation/watchdog/watchdog-api.txt

让用户空间守护程序处理监视程序是完全合理的.它可能默认为15分钟超时.

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有