嵌入式 Linux 看门狗与电源管理指南
1. 看门狗的添加
在嵌入式设备中,看门狗是常见需求。当关键服务停止工作时,通常需要采取行动,一般是重置系统。大多数嵌入式片上系统(SoC)都有硬件看门狗,可通过 /dev/watchdog
设备节点访问。看门狗在启动时会设置超时时间,必须在该时间段内重置,否则会触发看门狗,导致系统重启。与看门狗驱动的接口在 Documentation/watchdog
内核源码中描述,驱动代码位于 drivers/watchdog
目录。
若有两个或更多关键服务需要看门狗保护,会出现问题。 systemd
有一个实用功能,可在多个服务间分配看门狗。
systemd
可配置为期望从服务定期收到保活调用,若未收到则采取行动,为每个服务创建软件看门狗。要实现这一点,需在守护进程中添加代码以发送保活消息。代码需检查 WATCHDOG_USEC
环境变量是否为非零值,然后在该时间内(建议为看门狗超时时间的一半)调用 sd_notify(false, "WATCHDOG=1")
。 systemd
源代码中有相关示例。
要在服务单元中启用看门狗,可在 [Service]
部分添加如下内容:
WatchdogSec=30s
Restart=on-watchdog
StartLimitInte