本文基于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 = 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文件后,重新編譯內核。
審核編輯 :李倩
-
看門狗
+關注
關注
10文章
573瀏覽量
71122 -
Linux
+關注
關注
87文章
11373瀏覽量
211214
原文標題:Linux驅動之watchdog
文章出處:【微信號:yikoulinux,微信公眾號:一口Linux】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
RK3399處理器:高性能多核異構計算平臺
安利給工程師!看門狗相關知識

抄作業!看門狗定時器必備知識

一文詳解看門狗/電壓監控芯片規格書

軟件看門狗和硬件看門狗的區別
TLF35584中集成的看門狗工作應用案例

評論