openwrt linux下gpio watchdog dts文件配置

由于项目需要,网关需要外接硬件看门狗,而且从网关上电开始就要开始喂狗,从uboot的代码中就开始了喂狗操作

而硬件看门狗只有1.7s的超时时间,所以内核态必须要喂狗,否则就会重启

现在的Linux都已经支持了dts,我们不需要再去手动修改或者添加内核模块来实现gpio映射为watchdog文件

内核中已经有了CONFIG_GPIO_WATCHDOG选项,打上即可生成gpio-wdt模块

另外还有一个选项CONFIG_GPIO_WATCHDOG_ARCH_INITCALL,是指是否指定gpio-wdt模块较早的启动,已防止内核没有来得及喂狗,这个选项是否打上看自己的cpu和项目需要

我发现打上这个选项驱动模块则在内核启动0.4s左右开始注册看门狗和喂狗,不大上则在3.1s左右开始注册和喂狗,3.1s相比于我使用的看门狗芯片来说实在太长了

所以只能打上。

 

写gpio-wdt的dts信息需要:

-compatible:应包含“ linux,wdt-gpio”。
-gpios:来自常见的gpio绑定;gpio连接到WDT复位引脚。
-hw_algo:驱动程序使用的算法。应为以下值之一:
    -toggle切换:从高到低或从低到高的跳变将清除WDT计数器。当GPIO悬空或连接到三态缓冲器时,看门狗定时器被禁用。
    -level级别:低电平或高电平开始计数WDT超时,相反的电平禁用WDT。活动级别由GPIO标志确定。
-hw_margin_ms:复位看门狗电路的最大时间(毫秒)。
可选:
-always-running:如果无法禁用看门狗定时器,请添加此标志以使驱动程序在没有客户端的情况下继续切换信号。仅在设备打开且经过超时后,它才会停止切换信号。
如下是我的示例,已经测试成功了

上面代码中always-running是指内核是否需要持续的喂狗,有这个字段则表示持续的喂狗,否则只是注册个watchdog文件而已,不需要的话直接//注释掉即可。

 

目前还没有搞清楚该如何让内核停止喂狗,转为应用态程序喂狗,烦请知道的小伙伴不吝赐教!

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注