说明
- 公司SOC使用的watchdog模块是新思(Synopsys)的IP。
需求
- 用户有时会在uboot/kernel中做些开发,新增一些功能(OTA升级等),可能会出现uboot/kernel启动崩溃甚至设备死机等问题,需要在uboot启动阶段开启watchdog监控设备运行实现异常后复位。
实现
- 前提:dts watchdog节点配置ok。
- 由于历史原因,根据是否支持DM(Driver model),uboot原生支持两种wdt驱动和使用的配置/实现方式。
- 不支持DM,常见于较早版本(uboot,wdt驱动)实现
核心配置项:CONFIG_HW_WATCHDOG
- 支持DM
核心配置项:CONFIG_WDT
// file: drivers/watchdog/Kconfig
config WDT
bool "Enable driver model for watchdog timer drivers"
depends on DM
....
不支持DM
配置项
- 核心配置
CONFIG_HW_WATCHDOG
- wdt timeout时间
CONFIG_WATCHDOG_TIMEOUT_MSECS
- 具体型号的wdt,例如:dw wdt。
CONFIG_DESIGNWARE_WATCHDOG
- 如果未配置支持DM(CONFIG_WDT),但是配置了硬件wdt,CONFIG_HW_WATCHDOG会自动选上,例如:
config DESIGNWARE_WATCHDOG
bool "Designware watchdog timer support"
select HW_WATCHDOG if !WDT
...
驱动代码
- 定义并实现驱动相关功能接口
//file: drivers/watchdog/designware_wdt.c
static int designware_wdt_settimeout(unsigned