Rockchip Watchdog
使用说明
使用说明
使用说明使用说明
发布版本:1.00
日期:2017.04
Rockchip Watchdog 使用说明
使用说明
使用说明使用说明
前言前言前言前言
内核版本
Linux-3.10
Linux-4.4
概述概述概述概述
产品版本
产品版本
产品版本产品版本
芯片名称
RK3368 等
RK3399 等
读者对象
读者对象
读者对象读者对象
本文档(本指南)主要适用于以下工程师:
技术支持工程师
软件开发工程师
修订记录
修订记录
修订记录修订记录
日期
日期
日期日期
2017-04-06
版本
版本
版本版本
V1.0
作者
作者
作者作者
洪慧斌
修改说明
修改说明
修改说明修改说明
Rockchip Watchdog 使用说明
使用说明
使用说明使用说明
1 Linux watchdog 简介
watchdog 一般是用来监视某个进程,或整个系统的。
一般在 linux3.10及以前的驱动里都只开了中断喂狗,保证内核异常时能重启即可。
watchdog 的使用标准化,可以这样:
在某个特定功能的进程里去 open write close 操作/dev/watchdog,一旦该进程出现异常
无法执行喂狗操作,或者被 kill 掉,就会通过 watchdog 触发复位,重启。
以安卓为例,会启动普通进程./sbin/watchdogd,如果该进程被 kill 或系统异常无法调度执行,
就会触发 watchdog 复位重启。
比如广告机,户外的一些机器,需要系统不间断运行,即便系统死机或者某个程序异常后能
触发重启,保证机器继续运行。
关于/dev/watchdog 的使用:
int main(void)
{
int fd = open("/dev/watchdog", O_WRONLY); 通过 open 来启动 watchdog
int ret = 0;
if (fd == -1) {
perror("watchdog");
exit(EXIT_FAILURE);
}
while (1) {
ret = write(fd, "\0", 1); 通过 write 来喂狗
if (ret != 1) {
ret = -1;
break;
}
sleep(10);
}
close(fd);
return ret;
}
关于 close()
1、正常情况下 close(),不再喂狗,watchdog 会自动重启
2、先 write(fd, "V", 1);,再 close(),内核会继续喂狗,系统不会自动重启
3、配置宏 CONFIG_WATCHDOG_NOWAYOUT,重复步奏2,内核不会继续喂狗,
系统会被重启。
Copyright 2017 @Fuzhou Rockchip Electronics Co., Ltd.2
Rockchip Watchdog 使用说明
使用说明
使用说明使用说明
2、watchdog 的配置
配置以安卓为例,在 init.rockchip.rc 添加以下 service
service watchdogd /sbin/watchdogd 10 20 每10秒喂一次狗,watchdog 的超时时间是30秒。
class core
seclabel u:r:watchdog:s0
/sbin/watchdogd 进程起来后会去打开/dev/watchdog,如果内核没使能 watchdog,则会打开失败,进程
退出。如果内核使能 watchdog,则进程继续运行,并每隔一段时间喂一次狗。
2.1、linux4.4 内核配置,默认选上 watchdog 的驱动,DTS 节点也默认禁止
Symbol: DW_WATCHDOG [=y]
│ Type : tristate
│ Prompt: Synopsys DesignWare watchdog
│ Location:
│ -> Device Drivers
│ -> Watchdog Timer Support (WATCHDOG [=y])
│ Defined at drivers/watchdog/Kconfig:291
│ Depends on: WATCHDOG [=y] && HAS_IOMEM [=y]
watchdog@ff848000 {
compatible = "snps,dw-wdt";
reg = <0x0 0xff848000 0x0 0x100>;
clocks = <&cru PCLK_WDT>;
interrupts = ;
status = "disabled";
};
drivers/watchdog/dw_wdt.c
2.2、linux3.10内核配置
Symbol: WATCHDOG [=y]
│ Type : boolean
│ Prompt: Watchdog Timer Support
│ Location:
│ -> Device Drivers
│ Defined at drivers/watchdog/Kconfig:5
│ Selected by: RK_PM_TESTS [=y] && ARCH_ROCKCHIP [=y]
arch/arm64/boot/dts/rk3368.dtsi
watchdog: wdt@ff800000 {
Copyright 2017 @Fuzhou Rockchip Electronics Co., Ltd.3
Rockchip Watchdog 使用说明
使用说明
使用说明使用说明
compatible = "rockchip,watch dog";
reg = <0x0 0xff800000 0x0 0x100>;
clocks = <&pclk_alive_pre>;
clock-names = "pclk_wdt";
interrupts = ;
rockchip,irq = <0>;
rockchip,timeout = <60>;
rockchip,atboot = <0>;
rockchip,debug = <0>;
status = "disabled";
};
status = "disabled";改为 okay
2.3、linux3.0内核配置
Device Drivers --->
Watchdog Timer Support --->
RK29 watchdog
start watchdog at system boot
<*> RK29 watchdog
[] feed watchdog by interrupt
[] start watchdog at system boot
(5) set watchdog time out value (unit second)
相关代码在:drivers/watchdog/rk29_wdt.c
Copyright 2017 @Fuzhou Rockchip Electronics Co., Ltd.4