本文基于RockPi 4A單板Linux 4.4內(nèi)核介紹RK3399看門狗(watchdog)的調(diào)試方法。
一、驅(qū)動(dòng)文件
RK3399 watchdog用的是新思(Synopsys)的IP,在watchdog驅(qū)動(dòng)程序加載時(shí),會(huì)注冊(cè)misc設(shè)備,節(jié)點(diǎn)為/dev/watchdog。
驅(qū)動(dòng)文件: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寄存器基地址和映射長(zhǎng)度
clocks = <&cru PCLK_WDT>; ## watchdog時(shí)鐘
interrupts = 120 IRQ_TYPE_LEVEL_HIGH 0>; ## watchdog中斷號(hào)和觸發(fā)方式
};
三、調(diào)試方法
1、關(guān)閉看門狗
echo A > watchdog
寫入除大寫V以外的任意字符,不再喂狗,一段時(shí)間后系統(tǒng)會(huì)重啟。
## 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)
{
...
}
例:
## 關(guān)閉看門狗后,等待一段時(shí)間后重啟
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 ## 系統(tǒng)重啟
In
soft reset
2、打開卡門狗
echo V > watchdog
寫入大寫V,繼續(xù)喂狗,系統(tǒng)不再重啟。
例:
## 打開看門狗
root@linaro-alip:/dev# echo V > watchdog
root@linaro-alip:/dev#
3、CONFIG_WATCHDOG_NOWAYOUT
在watchdog驅(qū)動(dòng)程序中,需要關(guān)注宏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,通過(guò)echo命令寫入任何字符,都不會(huì)關(guān)閉喂狗。
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
例:
## 寫入任何字符,都不會(huì)關(guān)閉喂狗
root@linaro-alip:~# echo A > watchdog
root@linaro-alip:~#
注:
使用./build/mk-kernel.sh rockpi4a編譯內(nèi)核時(shí),即使修改了rockchip_linux_defconfig文件,編譯時(shí),相關(guān)配置也不會(huì)生效。需要在編譯前make distclean或刪除內(nèi)核根目錄下的.config文件后,重新編譯內(nèi)核。
審核編輯 :李倩
-
看門狗
+關(guān)注
關(guān)注
10文章
579瀏覽量
71551 -
Linux
+關(guān)注
關(guān)注
87文章
11456瀏覽量
212760
原文標(biāo)題:Linux驅(qū)動(dòng)之watchdog
文章出處:【微信號(hào):yikoulinux,微信公眾號(hào):一口Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
TPS3430 具有可編程復(fù)位延遲的窗口看門狗定時(shí)器數(shù)據(jù)手冊(cè)


什么是看門狗?這樣的看門狗,你想領(lǐng)養(yǎng)一條嗎? #看門狗復(fù)位芯片 #WDT芯片 #單片機(jī)復(fù)位 #單片機(jī)方案
RT1170EVKB如何設(shè)置CM7和CM4內(nèi)核來(lái)實(shí)現(xiàn)它們自己的看門狗外設(shè)?
看門狗,你真的會(huì)用嗎?

RK3399處理器:高性能多核異構(gòu)計(jì)算平臺(tái)
安利給工程師!看門狗相關(guān)知識(shí)

抄作業(yè)!看門狗定時(shí)器必備知識(shí)

一文詳解看門狗/電壓監(jiān)控芯片規(guī)格書

RK3576單板發(fā)布倒計(jì)時(shí):RK3399與RK3576對(duì)比

看門狗定時(shí)器的工作原理

Sitara AM6442 RTI看門狗調(diào)試

LM75A數(shù)字溫度傳感器和熱看門狗數(shù)據(jù)表

評(píng)論