如何在重启/关机期间保持看门狗定时器运行


10

到目前为止,在我的研究中,我注意到有两种方法可以在树莓派上激活看门狗计时器:使用systemd或安装看门狗。一切都在这里得到了很好的解释:https : //www.raspberrypi.org/forums/viewtopic.php?f=29&t=147501#

而且我设法使其能够双向运行,但在重启/关机期间却没有。我用一个前炸弹进行了测试,它确实对此做出了反应,但是当我尝试时:

sudo poweroff

它只是停留下来。因此,我在想是否有办法强制看门狗在重新引导/关闭期间继续运行,以便在不正确引导的情况下在几秒钟后将其重置?

大多数方法在引导过程中启动看门狗,但是如果您需要一直运行它怎么办?我的树莓一旦重启就停止了,我不得不手动拔下插头才能使其正常工作。


更新:

现在,有些东西对我来说更清晰了。有三件事要考虑:

  1. 看门狗定时器
  2. 看门狗守护程序
  3. 看门狗服务守护程序

看门狗定时器:溢出时触发复位的寄存器,每个RPI周期递增,需要定期清除(踢)以避免复位

要在启动时运行它,请在/boot/config.txt中添加以下内容

dtparam=watchdog=on

看门狗守护程序:负责定期清除(踢)看门狗计时器的进程

安装它:

sudo modprobe bcm2835_wdt echo "bcm2835_wdt" | sudo tee -a /etc/modules sudo apt-get install watchdog sudo update-rc.d watchdog defaults

配置/etc/watchdog.conf

watchdog-device = /dev/watchdog watchdog-timeout = 14 realtime = yes priority = 1 max-load-1 = 24

配置/ etc / default / watchdog

watchdog_module="bcm2835_wdt"

要配置它,请在/etc/modprobe.d/watchdog.conf中添加以下内容:

options bcm2835_wdt nowayout=1 heartbeat=10

参考:http//vk5tu.livejournal.com/35721.html

内核模块的心跳参数是硬件重启之前设备看到的心跳之间的最大间隔

nowayout参数确定在关闭/ dev / watchdog设备时会发生什么:是否仍然需要心跳?值为1表示重新启动的倒计时将继续运行,如果未重新打开设备并写入心跳,则计算机将重新启动。

启用它(如果不起作用,请先注意watchdog.service并重试):

sudo systemctl enable watchdog

监视它:

sudo systemctl status watchdog

看门狗服务守护程序:在看门狗守护程序失败/停止时激活,通常运行一个keepalive守护程序,该守护程序会定期启动看门狗

配置/lib/systemd/system/watchdog.service

# OnFailure=wd_keepalive.service-注释掉此选项将禁用keepalive守护程序,因此一旦看门狗守护程序失败/停止,任何操作都不会阻止看门狗计时器重新启动RPI

[Install] WantedBy=multi-user.target -错误修复


最后:

重新启动RPI。覆盆子重新启动后,所有内容均应启动(看门狗计时器和看门狗守护程序)。要检查此用法:

cat /var/log/syslog | grep watchdog

预期产量:

Jun 14 12:09:08 raspberrypi systemd[1]: Starting watchdog daemon... Jun 14 12:09:08 raspberrypi watchdog[813]: starting daemon (5.14): Jun 14 12:09:08 raspberrypi watchdog[813]: int=1s realtime=yes sync=no soft=no mla=24 mem=0 Jun 14 12:09:08 raspberrypi watchdog[813]: ping: no machine to check Jun 14 12:09:08 raspberrypi watchdog[813]: file: no file to check Jun 14 12:09:08 raspberrypi watchdog[813]: pidfile: no server process to check Jun 14 12:09:08 raspberrypi watchdog[813]: interface: no interface to check Jun 14 12:09:08 raspberrypi watchdog[813]: temperature: no sensors to check Jun 14 12:09:08 raspberrypi watchdog[813]: test=none(0) repair=none(0) alive=/dev/watchdog heartbeat=none to=root no_act=no force=no Jun 14 12:09:08 raspberrypi watchdog[813]: watchdog now set to 14 seconds Jun 14 12:09:08 raspberrypi watchdog[813]: hardware watchdog identity: Broadcom BCM2835 Watchdog timer Jun 14 12:09:08 raspberrypi systemd[1]: Started watchdog daemon.

和:

ps aux|grep watchdog

预期产量:

root 813 0.0 0.2 1888 1760 ? SLs 12:09 0:00 /usr/sbin/watchdog pi 900 0.0 0.2 4752 1992 pts/0 S+ 12:10 0:00 grep --color=auto watchdog


测试:

杀死看门狗守护程序,运行:

ps aux|grep watchdog

查看进程ID并杀死它:

root 812 0.0 0.2 1888 1760 ? SLs 12:16 0:00 /usr/sbin/watchdog pi 898 0.0 0.2 4752 1992 pts/0 S+ 12:16 0:00 grep --color=auto watchdog

sudo kill -9 812

经典前炸弹测试,运行:

: (){ :|:& };:

要测试如果重启过程失败,树莓派将重置,请运行:

sudo poweroff -我遇到了一些问题

树莓应该在cca 15s之后重启。

Answers:


5

sudo poweroff表示关闭并保持关闭。看门狗不会也不应拦截此事件。您遇到的行为是正确的,您不应期望看门狗重新启动已关闭电源的系统。

我认为这不是您想要执行的操作。如果要重新启动pi。您应该sudo reboot改为使用命令。在这种情况下,如果在关机期间挂起了某些东西(reboot触发了启动序列),则看门狗将接管工作。


4

我没有仔细检查过您链接的所有内容,但是作者似乎并不了解看门狗。

有一个BCM硬件看门狗。如果要启动硬件看门狗,请包括dtparam=watchdog=on/boot/config.txt

它本身并没有多大作用,尽管如果不定期“踢”它应该重新启动系统。您可以编写打开代码以将/dev/watchdog其启动。

还有一个watchdog daemon,你可以配置激活看门狗; 你应该可以开始sudo systemctl enable watchdog

注意下面提到的错误是在Jessie中,并已在Stretch中修复。
不幸的是,systemd脚本中存在一个已知的错误,该错误很容易修复。参见 http://unix.stackexchange.com/questions/346224/problem-with-systemd-starting-watchdog


感谢您的回答,我在原始帖子中添加了更新以显示进度。但是,运行WDT时,仍然无法让WDT重新启动RPI sudo poweroff。有时有效,有时却无效:S
Duje

1
不幸的是,您似乎混合了很多不同的想法。我并不是自称是看门狗的专家,而是看它是否正在运行systemctl status watchdog.service。杀watchdog 将不会导致重新启动,因为watchdog.service开始wd_keepalive.service的关闭,其顾名思义防止重新启动。
Milliways

如果禁用wd_keepalive.service,则不会。像这样:“ Configure /lib/systemd/system/watchdog.service:-注释掉 # OnFailure=wd_keepalive.service此选项将禁用keepalive守护程序,因此一旦watchdog守护程序失败/停止,任何操作都不会阻止Watchdog Timer重新启动RPI”
Duje

2

Power是pi中的系统服务/守护程序,由IC进行字符串解析,然后直接将其输出/扇出到Broadcom IC。可以通过参考系统文件来更改操作流程,但是据我所知,您正在尝试在中断和看门狗定时器的概念内的自定义功率调节方案中调用外围设备。您可以通过重新固定调节IC并进行一些预启动的裸机编程来改变这种行为的一部分。查看这些内容,如果您有任何想法,请立即与我联系。查看ARM Corp.组装参考行指令集以及体系结构文档。在网络上。

http://infocenter.arm.com/help/topic/com.arm.doc.dui0489f/DUI0489F_arm_assembler_reference.pdf

https://www.arm.com/files/pdf/CortexM3_programming_for_ARM7_developers.pdf

顺便说一句,对你的教授说“嗨”。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.