Firefly开源社区

12
发表新贴

【linux内核】firefly看门狗浅析

2918

积分

12

威望

22

贡献

注册会员

Rank: 8Rank: 8

积分
2918
发表于 2014-12-15 19:14:07     
看门狗,又叫 watchdog timer,是一个定时器电路, 一般有一个输入,叫喂狗,一个输出到MCU的RST端,MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给 WDT 清零,如果超过规定时间不喂狗(一般在程序跑飞时),WDT 定时超过,就会给出一个复位信号到MCU,使MCU复位. 防止MCU死机. 看门狗的作用就是防止程序发生死循环或者说程序跑飞。

那么,firefly是如何打开看门狗呢?
首先在menuconfig下打开SOFT_WATCHDOG,
然后打开看门狗。
  1. --- a/kernel/arch/arm/boot/dts/rk3288.dtsi
  2. +++ b/kernel/arch/arm/boot/dts/rk3288.dtsi
  3. @@ -213,7 +213,7 @@
  4.                 rockchip,timeout = <60>;
  5.                 rockchip,atboot = <1>;
  6.                 rockchip,debug = <0>;
  7. -               status = "disabled";
  8. +               status = "okay";
  9.         };
复制代码

就这简单的2个步骤就可以开启看门狗。
代码位置kernel/drivers/watchdog/rk29_wdt.c
rk29_wdt_set_heartbeat下可以给定时器设定一个中断的时间间隔maxtime,通过修改这个参数你可以定义寄存器复位的时间。
内核默认是22s一次中断。意思是每间隔22s,寄存器的计数器就复位一次(喂狗)。
rk29_wdt_keepalive()    ----喂狗
想让机器重启,只需在下一次中断到来的时候不给寄存器复位计数器就可以了。


回复

使用道具 举报

发表于 2014-12-18 14:59:05     
支持原创
暴走的创客!
回复

使用道具 举报

79

积分

0

威望

0

贡献

技术小白

积分
79
发表于 2014-12-26 11:08:30     
本帖最后由 connet 于 2014-12-26 11:15 编辑

不需要开启SOFT_WATCHDOG, SOFT_WATCHDOG对应的是softdog.c , 只要开启 CONFIG_WATCHDOG,只要选中了rockchip 平台会自动包含rk29_wdt.c
SOFT_WATCHDOG 是软件侦测的, 用于没有硬件watchdog  的场合,比如很多很多pc, 一般只有工控机和服务器才有硬件watchdog.

回复

使用道具 举报

2918

积分

12

威望

22

贡献

注册会员

Rank: 8Rank: 8

积分
2918
发表于 2014-12-26 14:49:49     
connet 发表于 2014-12-26 11:08
不需要开启SOFT_WATCHDOG, SOFT_WATCHDOG对应的是softdog.c , 只要开启 CONFIG_WATCHDOG,只要选中了rockc ...

学习了!!{:2_27:}
回复

使用道具 举报

2918

积分

12

威望

22

贡献

注册会员

Rank: 8Rank: 8

积分
2918
发表于 2014-12-26 14:49:55     
connet 发表于 2014-12-26 11:08
不需要开启SOFT_WATCHDOG, SOFT_WATCHDOG对应的是softdog.c , 只要开启 CONFIG_WATCHDOG,只要选中了rockc ...

学习了!!{:2_27:}
回复

使用道具 举报

21

积分

0

威望

0

贡献

技术小白

积分
21
发表于 2015-8-10 13:27:05     
楼主,我的开发板上如果什么都没有,连你说的这个开门狗的代码都没有,怎么开发这个看门狗呢?求楼主指教一下。谢谢!
回复

使用道具 举报

13

积分

0

威望

0

贡献

技术小白

积分
13
发表于 2018-10-31 17:20:47     
看门狗的上层代码在 system/core/init/watchdogd.c ,编译成 init ,一般在 sbin 下面建立一个 watchdogd 的软链接。可以在 init.rc 里面搞一个 service ,如 service watchdogd /sbin/watchdogd 10 20 ,然后再start watchdogd。测试的时候可以直接在adb 下面,sart  watchdogd 和 stop watchdogd
回复

使用道具 举报

19

积分

0

威望

0

贡献

技术小白

积分
19
发表于 2019-9-12 11:00:02     
支持一波,码了
回复

使用道具 举报

84

积分

0

威望

0

贡献

技术小白

积分
84
发表于 2019-9-30 14:37:33     
标记一个。。
回复

使用道具 举报

5

积分

0

威望

0

贡献

吃瓜的群众

积分
5
发表于 2021-3-19 10:25:56     
支持一个,,,
回复

使用道具 举报

返回列表
12
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表