You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IMX6ULL平台watchdog未停止报错及重启配置技术咨询

针对i.MX6ULL看门狗配置与重启问题的解决方法

环境信息

  • i.MX6ULL处理器:MCIMX6Y2CVM08AB
  • 内核版本:6.1.1

问题1:解决watchdog: watchdog0: watchdog did not stop!报错并实现正常重启

报错原因分析

该报错源于systemd关机流程中尝试关闭看门狗但未成功,结合你的设备树配置来看,fsl,ext-reset-output属性会让看门狗向外接引脚输出复位信号,但你的硬件中LCD_RESET引脚并未连接到系统复位回路,导致看门狗无法完成正常停止流程。

解决方案

方案1:调整设备树看门狗节点配置

如果不需要看门狗输出外部复位信号,直接移除fsl,ext-reset-output属性即可:

&wdog1 {
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_wdog>;
    // 移除fsl,ext-reset-output属性
    status = "okay";
};

重新编译设备树并替换SD卡中的dtb文件后,重启即可消除报错并正常完成系统重启。

若必须保留外部复位输出,需确认硬件上LCD_RESET引脚是否连接到系统复位输入(如PMIC复位脚或处理器复位引脚),硬件未连接时该属性无实际作用,反而会引发报错。

方案2:内核启动参数调整(临时验证用)

若需快速验证,可在内核启动参数中添加nowatchdog禁用看门狗,但此方案不推荐长期使用,会丢失看门狗的硬件守护功能。


问题2:软件触发看门狗实现复位按键功能

方法1:直接操作/dev/watchdog设备文件

通过打开看门狗设备后停止喂狗,等待看门狗超时即可触发系统复位:

  • Shell命令方式(需确保等待时间小于看门狗默认超时,可通过cat /sys/class/watchdog/watchdog0/timeout查看当前超时值):
# 打开看门狗设备,10秒后超时复位(需根据实际超时调整数值)
exec 3>/dev/watchdog && sleep 10
  • C语言代码示例:
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>

int main() {
    int fd = open("/dev/watchdog", O_WRONLY);
    if (fd < 0) {
        perror("Failed to open watchdog device");
        return 1;
    }
    // 停止喂狗,等待超时复位
    while (1) {
        sleep(1);
    }
    close(fd);
    return 0;
}

方法2:结合GPIO按键实现复位功能

如果复位按键连接到LCD_RESET引脚,可通过以下步骤实现按键触发复位:

  1. 在设备树中添加GPIO按键节点,将LCD_RESET引脚配置为输入按键;
  2. 编写守护脚本监控按键事件,当检测到按键按下时,执行上述看门狗复位命令。

内容的提问来源于stack exchange,提问作者rpr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 11:36:15