好久没有写内容了。上班太忙了。趁着五一忙里偷闲写点东西。
前些天遇到个问题,在调试一块新硬件的时候遇到了一个问题。我们在板上增加了一部分看门狗电路(看门狗的左右就不赘述了吧),一般来说我们都是在进入系统之后才开始激活看门狗并喂狗。但是我们的看们狗电路有个问题就是,激活脚在u-boot下是默认使能的,导致看门狗就被激活了。然后我们的内核又比较大。导致u-boot还在解压内核的时候看门狗就复位了。裁剪内核是不可能裁剪内核的。还是老老实实去u-boot中喂狗吧。
在u-boot中其实是存在看门狗的一些隐藏动作的,只是默认没有编译进去罢了。我在github上随意找了一个boot代码,在include/watchdog.h中就可以看到一些需要的东西:
CONFIG_HW_WATCHDOG
#define WATCHDOG_RESET hw_watchdog_reset
extern void hw_watchdog_reset(void);
这三部分,那就好办了,简单粗暴一些,直接在cpu型号的头文件里加上CONFIG_HW_WATCHDOG的宏定义,然后watchdog的实现中增加void hw_watchdog_reset(void);这部分的实现即可。一般来说都是规律性的电平变化就实现喂狗操作。这里看具体板的原理图和看门狗电路,操作gpio即可。
WATCHDOG_RESET调用出足够多,应该是够用了。如果不够用的话,在需要的地方包含头watchdogg头文件,调用即可。我这里是只加了实现,没有加入额外的调用功能就实现了。
其实高通的u-boot还有一个crash dump的功能。另一篇文章见,这个更加粗暴一下。
u-boot中喂狗操作
最新推荐文章于 2023-03-08 00:11:11 发布