我在使用iMX8MM和Yocto。我想弄清楚看门狗的重启原因。
我发现 watchdog.h 中有很多 FLAGs。
#define WDIOF_OVERHEAT 0x0001 /* Reset due to CPU overheat */
#define WDIOF_FANFAULT 0x0002 /* Fan failed */
#define WDIOF_EXTERN1 0x0004 /* External relay 1 */
#define WDIOF_EXTERN2 0x0008 /* External relay 2 */
#define WDIOF_POWERUNDER 0x0010 /* Power bad/power fault */
#define WDIOF_CARDRESET 0x0020 /* Card previously reset the CPU */
#define WDIOF_POWEROVER 0x0040 /* Power over voltage */
#define WDIOF_SETTIMEOUT 0x0080 /* Set timeout (in seconds) */
#define WDIOF_MAGICCLOSE 0x0100 /* Supports magic close char */
#define WDIOF_PRETIMEOUT 0x0200 /* Pretimeout (in seconds), get/set */
#define WDIOF_KEEPALIVEPING 0x8000 /* Keep alive ping reply */
但当我用命令检查时,我只得到4个FLAGs。
$ wdctl
Device: /dev/watchdog
Identity: imx2+ watchdog [version 0]
Timeout: 60 seconds
Pre-timeout: 0 seconds
FLAG DESCRIPTION STATUS BOOT-STATUS
KEEPALIVEPING Keep alive ping reply 1 0
MAGICCLOSE Supports magic close char 0 0
PRETIMEOUT Pretimeout (in seconds) 0 0
SETTIMEOUT Set timeout (in seconds) 0 0
我怎么才能得到更多的FLAG呢?
非常感谢你。
Toan
你在watchdog.h中看到的宏(flag)是完整的列表。然而,应用程序工具(这里是 wdctl
)正在从内核中读取驱动能力实现。
你看到的另一个标志是 WDIOF_OVERHEAT
和其他应该由内核驱动程序支持,然后只有它才会对 wdctl
列表。
从源码上看 wdctl
正在以下列方式工作。它正在调用 read_watchdog_from_device
API来获取已实现的标志(环境监测)。
请从i.MX8MM的看门狗中检查相应的驱动中的标志。imx2_wdt.c
.
参考文献: https:/github.comkarelzakutil-linuxblobmastersys-utilswdctl.c。https:/www.kernel.orgdocDocumentationwatchdogwatchdog-api.txt
这就是我解决上述问题的方法。
找到所有关于imx2+看门狗包的文件。
通过在watchdog.h文件中添加更多的标志进行修改。
在Yocto中访问menuconfig,并打开看门狗部分的一些选项。这个操作可以确保bitbake识别驱动的变化。
重建并生成操作系统镜像。