内核开启 Watchdog
- 找到你的目标板 defconfig
根据你的 SOC/板子,在对应的 defconfig 中添加配置。以项目中已有的配置为参考:
通用框架(必须开启):
CONFIG_WATCHDOG=y
CONFIG_WATCHDOG_CORE=y
SOC 专用驱动(按实际硬件选一个):
DesignWare WDT(常见于 HiSilicon、RK 等)
CONFIG_DW_WATCHDOG=y
ARM SP805(ARM 通用)
CONFIG_ARM_SP805_WATCHDOG=y
软件 watchdog(无硬件时的备选)
CONFIG_SOFT_WATCHDOG=y
可选项:
防止 watchdog 在 boot 阶段被关闭
CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y
不允许关闭 watchdog(一旦打开无法停止)
CONFIG_WATCHDOG_NOWAYOUT is not set ← 调试阶段保持关闭
- 确认 DTS 中有 watchdog 节点
内核驱动需要 DTS 中有对应节点才能 probe,例如 DW WDT:
watchdog: watchdog@xxxxx {
compatible = "snps,dw-wdt";
reg = <0x0 0xXXXXXXXX 0x0 0x1000>;
clocks = <&clk_wdt>;
interrupts = <GIC_SPI XX IRQ_TYPE_LEVEL_HIGH>;
};
- 验证是否生效
内核启动后:
ls -la /dev/watchdog* # 应出现 /dev/watchdog 或 /dev/watchdog0
dmesg | grep -i watchdog # 看驱动 probe 日志
正常 probe 的日志类似:
2.xxx\] WDOG: Starting watchdog clock \[ 2.xxx\] dw_wdt: Watchdog enabled (timeout=30s) 4. 针对你的项目 你的项目 dp1000_oh_defconfig 中是 # CONFIG_WATCHDOG is not set,说明该板子 watchdog 被关闭了。如果目标就是这块板子,在其 defconfig 中加上: CONFIG_WATCHDOG=y CONFIG_WATCHDOG_CORE=y CONFIG_DW_WATCHDOG=y # 根据实际 SOC 选择 CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y