|
【linux内核】firefly看门狗浅析
发表于 2014-12-15 19:14:07
浏览:31257
|
回复:10
打印
只看该作者
[复制链接]
楼主
看门狗,又叫 watchdog timer,是一个定时器电路, 一般有一个输入,叫喂狗,一个输出到MCU的RST端,MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给 WDT 清零,如果超过规定时间不喂狗(一般在程序跑飞时),WDT 定时超过,就会给出一个复位信号到MCU,使MCU复位. 防止MCU死机. 看门狗的作用就是防止程序发生死循环或者说程序跑飞。
那么,firefly是如何打开看门狗呢?
首先在menuconfig下打开SOFT_WATCHDOG,
然后打开看门狗。
- --- a/kernel/arch/arm/boot/dts/rk3288.dtsi
- +++ b/kernel/arch/arm/boot/dts/rk3288.dtsi
- @@ -213,7 +213,7 @@
- rockchip,timeout = <60>;
- rockchip,atboot = <1>;
- rockchip,debug = <0>;
- - status = "disabled";
- + status = "okay";
- };
复制代码
就这简单的2个步骤就可以开启看门狗。
代码位置kernel/drivers/watchdog/rk29_wdt.c
rk29_wdt_set_heartbeat下可以给定时器设定一个中断的时间间隔maxtime,通过修改这个参数你可以定义寄存器复位的时间。
内核默认是22s一次中断。意思是每间隔22s,寄存器的计数器就复位一次(喂狗)。
rk29_wdt_keepalive() ----喂狗
想让机器重启,只需在下一次中断到来的时候不给寄存器复位计数器就可以了。
|
|