RaspberryPi-如何启用看门狗

简述:树莓派 5 的硬件看门狗由 RP1(南桥)提供,对应的内核驱动是 bcm2712_wdt;

1. 安装硬件看门狗模块:

sudo apt install watchdog

2. 启用并配置它:

sudo systemctl enable watchdog

sudo systemctl start watchdog

3. 检查系统是否已经识别看门狗:

看到类似 bcm2712-wdt / bcm2835-wdt 或 /dev/watchdog0,说明内核已创建设备。/dev/watchdog0 是具体的看门狗实例设备节点,/dev/watchdog 是为兼容性提供的默认入口,用户态程序通过 /dev/watchdog 与看门狗设备交互,用户态程序也可以直接打开 /dev/watchdog0,效果等同于通过 /dev/watchdog

dmesg | grep -i wdt

ls -l /dev/watchdog*

4. 【二选一】配置 /etc/watchdog.conf:

是给 watchdog daemon 的配置文件,这个守护进程会按配置去做一系列"自定义健康检测(health checks)"

用户态守护进程 - 可能有多个线程,做自定义监控,但守护进程挂掉就无法喂狗。如果 systemd 已经占用 hardware watchdog,守护进程可能报错:cannot open /dev/watchdog

有24个"需要CPU资源才能推进的任务"处于活跃状态,包括正在运行的和排队等待的线程/进程。

PID用的是2331:

验证:

# 方法 1 (先停止守护进程,等待超时,等待时间约等于 /sys/.../timeout 的值)

sudo systemctl stop watchdog

# 方法 2 (打开设备然后挂起,不喂)

sudo bash -c 'exec 3>/dev/watchdog; sleep 60'

# watchdog 服务日志(近期有没有错误)

journalctl -u watchdog -b --no-pager

# 查看上一次 boot kernel 日志里是否有 watchdog 重启痕迹

journalctl -k -b -1 | grep -i watchdog

# 或查看上一次系统日志的时间轴

journalctl -b -1 | grep -i watchdog

4. 【二选一】配置 /etc/systemd/system.conf:

设置 systemd runtime watchdog(操作系统自带的 watchdog,守护整个 userspace,不依赖任何额外进程,稳定、可靠、开机早就接管,防止用户态守护进程挂掉)

保存后并启用 watchdog 服务:

sudo systemctl enable --now watchdog0

sudo systemctl status watchdog0

systemd 在启动时会扫描所有可用的看门狗设备,选择第一个可用的设备也就是/dev/watchdog0:

验证:

# 直接让内核panic

sudo bash -c "echo 1 > /proc/sys/kernel/panic; echo 1 > /proc/sys/kernel/panic_timeout; echo c > /proc/sysrq-trigger"

# 查看当前启动的所有看门狗相关日志

sudo journalctl -b 0 | grep -iE "watchdog|panic|reset|reboot"

# 查看 systemd 服务的看门狗日志

sudo journalctl -u systemd | grep -i watchdog

# 查看所有日志中的看门狗信息

sudo journalctl | grep -i watchdog | tail -20

5. 查看内核当前状态:

只要 /dev/watchdog 被某个进程占用,并且 sysfs 能看到 identity/timeout,就说明 watchdog 已经启用并在工作。

# 查看看门狗设备状态

sudo wdctl

# 查看设备节点信息

ls -l /dev/watchdog*

# 查看 sysfs 中的设备信息

ls /sys/class/watchdog/

cat /sys/class/watchdog/watchdog0/identity

cat /sys/class/watchdog/watchdog0/timeout

# 查看 watchdog 服务状态( systemd

sudo systemctl status watchdog

# 查看所有与看门狗相关的 systemd 服务

systemctl list-units --all | grep -i watchdog

# 查看内核 watchdog 消息

sudo dmesg | grep -i watchdog

# 查看 watchdog 是否被某个进程占用

sudo lsof /dev/watchdog

# 检查 systemd 进程( PID 1 )打开了哪些文件

sudo ls -l /proc/1/fd/ 2>/dev/null | grep watchdog

# 服务没有启动,需要使用

sudo systemctl start watchdog

sudo systemctl enable watchdog

# 停止并禁用独立的 watchdog 服务

sudo systemctl disable --now watchdog.service

相关推荐
frank00600717 分钟前
Rocky 9.8设置本地yum源
服务器
智脑API平台22 分钟前
Codex CLI 怎么用 .env 配置 API Key?本地项目和自动化脚本接入教程
运维·自动化
土星云SaturnCloud38 分钟前
边缘计算在储气库调峰智能管控中的应用:架构设计与技术解析
服务器·人工智能·ai·边缘计算
无足鸟ICT38 分钟前
【RHCA+】bash命令
linux·开发语言·bash
weixin_307779131 小时前
Linux下Docker Compose里运行的MySQL数据库故障诊断Shell脚本
linux·运维·mysql·docker·自动化
小生不才yz1 小时前
Shell脚本精读 · S14-02 | 脚本模板:从 20 行工具到可维护项目
linux
x-cmd1 小时前
Linus 9 年前说「模糊测试有效」——今天已成 OSS-Fuzz 时代铁律
linux·ai·rust·开源·自动化·agent·安全性测试
流浪0012 小时前
Git篇(三):吃透远程协作:SSH 密钥、分支、标签全流程实战指南
运维·git·ssh
六点_dn2 小时前
Linux学习笔记-chmod命令
linux·笔记·学习
NiceCloud喜云2 小时前
Claude Code 应用内浏览器任务怎么写验收清单
服务器·人工智能·ai