一.环境
以下是基于3588例子,3328其他的RK平台同理,参考TRM即可,将寄存器基地址改一下就可以进行排查验证。
二.配置
1.dts
&wdt{
status = "okay";
};
2.config
CONFIG_WATCHDOG=y
CONFIG_WATCHDOG_CORE=y
CONFIG_DW_WATCHDOG=y
3.应用层APP
/system/bin/watchdogd
三.验证
1.基本寄存器
3588在配置了WTD之后,如果没有人去打开这个设备,看门狗设备内核是不会使能的
0xfeaf0000 第0个bit 是开关。可以看到下面是关闭状态。
0xfeaf0008是计数器,count到0会产生reset中断(驱动会配置)
./io -4 0xfeaf0008
feaf0008: 0000ffff
./io -4 0xfeaf0000
feaf0000: 00000008
2.内核喂狗
打开WTD(open /dev/watchdog),如果喂狗'V',那么内核会开启自动喂狗,看如下结果,WTD counts 已经在计数,并且毫无疑问enable=1,当feaf0008到0就会reset系统,但是这个计数永远不会到0,猜猜为啥?因为开了 V...IP(🐶)
echo 'V' > /dev/watchdog
io -4 0xfeaf0000
feaf0000: 00000009
io -4 0xfeaf0008
feaf0008: 2773d61c
3.应用层喂狗
打开WTD 后,但凡喂的不是V,那么就需要自己去喂狗,这个时候内核是不会自动喂狗的,count会计数到0,那么会reset。
echo '' > /dev/watchdog
./io -4 0xfeaf0008
feaf0008: 3d099539
./io -4 0xfeaf0000
feaf0000: 00000009
./io -4 0xfeaf0008
feaf0008: 17436391
./io -4 0xfeaf0008
feaf0008: 0c5830ce
./io -4 0xfeaf0008
feaf0008: 00000000
......err
IO命令问题可以参考
一键三连,欢迎提问