如何在 Linux 中使用看门狗添加更多原因导致重启的 FLAG?
How to add more FLAG of reason cause reboot with watchdog in Linux?
我将 iMX8MM 与 Yocto 一起使用。我正在尝试找出导致 Watchdog 重启的原因。
我发现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?
您在 watchdog.h 中看到的宏(标志)是完整列表。但是,应用程序实用程序(此处 wdctl
)正在从内核读取驱动程序功能实现。
你看到的另一个标志 WDIOF_OVERHEAT
内核驱动程序应该支持其他标志,然后只有它可用于 wdctl
列表。
查看 wdctl
的源代码是按以下方式工作的。它正在调用 read_watchdog_from_device
API 来获取已实现的标志(环境监控)。
请检查来自 i.MX8MM 看门狗 imx2_wdt.c
的相应驱动程序中的标志。
参考文献:https://github.com/karelzak/util-linux/blob/master/sys-utils/wdctl.c
https://www.kernel.org/doc/Documentation/watchdog/watchdog-api.txt
我就是这样解决上面的问题的。
查找所有关于 imx2+ watchdog 包的文件 concert。
通过添加更多标志作为 watchdog.h 文件进行了修改。
访问 Yocto 中的 menuconfig 并打开 Watchdog 部分中的一些选项。此操作可确保 bitbake 识别驱动程序中的更改。
重建并生成 OS 图像。
我将 iMX8MM 与 Yocto 一起使用。我正在尝试找出导致 Watchdog 重启的原因。
我发现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?
您在 watchdog.h 中看到的宏(标志)是完整列表。但是,应用程序实用程序(此处 wdctl
)正在从内核读取驱动程序功能实现。
你看到的另一个标志 WDIOF_OVERHEAT
内核驱动程序应该支持其他标志,然后只有它可用于 wdctl
列表。
查看 wdctl
的源代码是按以下方式工作的。它正在调用 read_watchdog_from_device
API 来获取已实现的标志(环境监控)。
请检查来自 i.MX8MM 看门狗 imx2_wdt.c
的相应驱动程序中的标志。
参考文献:https://github.com/karelzak/util-linux/blob/master/sys-utils/wdctl.c https://www.kernel.org/doc/Documentation/watchdog/watchdog-api.txt
我就是这样解决上面的问题的。
查找所有关于 imx2+ watchdog 包的文件 concert。
通过添加更多标志作为 watchdog.h 文件进行了修改。
访问 Yocto 中的 menuconfig 并打开 Watchdog 部分中的一些选项。此操作可确保 bitbake 识别驱动程序中的更改。
重建并生成 OS 图像。