Linux内核watchdog

本文基于RockPi 4A单板Linux 4.4内核介绍RK3399看门狗(watchdog)的调试方法。

一、驱动文件

RK3399 watchdog用的是新思(Synopsys)的IP,在watchdog驱动程序加载时,会注册misc设备,节点为/dev/watchdog

驱动文件:drivers/watchdog/dw_wdt.c

二、DTS配置

配置文件:arch/arm64/boot/dts/rockchip/rk3399.dtsi

watchdog具体配置如下:

watchdog@ff848000 { 
compatible = "snps,dw-wdt"; 
reg = <0x0 0xff848000 0x0 0x100>; 
## watchdog寄存器基地址和映射长度 clocks = <&cru PCLK_WDT>; 
## watchdog时钟 interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH 0>; 
## watchdog中断号和触发方式 
};

三、调试方法

1、关闭看门狗

echo A > watchdog

写入除大写V以外的任意字符,不再喂狗,一段时间后系统会重启。

## drivers/watchdog/watchdog_dev.c
 /* 
* watchdog_write: writes to the watchdog. 
* A write to a watchdog device is defined as a keepalive ping. 
* Writing the magic 'V' sequence allows the next close to turn 
* off the watchdog (if 'nowayout' is not set). 
*/ 

static ssize_t watchdog_write(struct file *file, const char __user *data, 
size_t len, loff_t *ppos) 
{ 
... 
}

例:

## 关闭看门狗后,等待一段时间后重启
root@linaro-alip:/dev# echo A > watchdog 
[ 1502.302824] dw_wdt: unexpected close, system will reboot soon 
root@linaro-alip:/dev# DDR Version 1.20 20190314 ## 系统重启 In 
soft reset

2、打开卡门狗

echo V > watchdog

写入大写V,继续喂狗,系统不再重启。

例:

## 打开看门狗 
root@linaro-alip:/dev# echo V > watchdog 
root@linaro-alip:/dev#

3、CONFIG_WATCHDOG_NOWAYOUT

watchdog驱动程序中,需要关注宏CONFIG_WATCHDOG_NOWAYOUT。使用如下:

static bool nowayout = WATCHDOG_NOWAYOUT; 
module_param(nowayout, bool, 0); 
MODULE_PARM_DESC(nowayout, "
Watchdog cannot be stopped once started "
 "(default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")");

如果配置了CONFIG_WATCHDOG_NOWAYOUT,通过echo命令写入任何字符,都不会关闭喂狗。

root@ubuntu:/home/run/code/rockchip-bsp/kernel/arch/arm64/configs# git 
diff rockchip_linux_defconfig diff --git a/arch/arm64/configs/rockchip_linux_defconfig b/arch/arm64/configs/rockchip_linux_defconfig 
index cfbc7774a15f..80265bdcd598 100644 
--- a/arch/arm64/configs/rockchip_linux_defconfig 
+++ b/arch/arm64/configs/rockchip_linux_defconfig
CONFIG_WATCHDOG=y 
CONFIG_DW_WATCHDOG=y +
CONFIG_WATCHDOG_NOWAYOUT=y 
CONFIG_MFD_CROS_EC=y

例:

## 写入任何字符,都不会关闭喂狗 
root@linaro-alip:~# echo A > watchdog 
root@linaro-alip:~#

注:

使用./build/mk-kernel.sh rockpi4a编译内核时,即使修改了rockchip_linux_defconfig文件,编译时,相关配置也不会生效。需要在编译前make distclean或删除内核根目录下的.config文件后,重新编译内核。

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 1
收藏 1
关注 141
成为作者 赚取收益
全部留言
0/200
成为第一个和作者交流的人吧