logo资料库

Rockchip Watchdog使用说明V1.0-20170406.pdf

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
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
分享到:
收藏