想使用CPU内部自带的WDOG1开门狗,折腾了一下午,虽然调试通了,但有些疑问请大牛帮忙解答。
dts中配置的复位狗为WDOG2,而WDOG2是TZ专用的,不能用作系统复位。不明白为什么默认用WDOG2???
此处需要修改为WDOG1
&gpc {
/* use ldo-bypass, u-boot will check it and configure */
fsl,ldo-bypass = <1>;
fsl,wdog-reset = <2>;
};
通过阅读内核看门狗源码,内核在注册watchdog设备时,只在/dev/watchdog下面注册一个设备。
而dts文件中配置两个wdog设备时,每次都注册WDOG2,而WDOG1却注册不上。源码中只注册id为0的wdog,不知道内核怎么决定这个id的,导致每次都注册WDOG2.
if (watchdog->id == 0) {
old_wdd = watchdog;
watchdog_miscdev.parent = watchdog->parent;
err = misc_register(&watchdog_miscdev);
if (err != 0) {
pr_err("%s: cannot register miscdev on minor=%d (err=%d).\n",
watchdog->info->identity, WATCHDOG_MINOR, err);
if (err == -EBUSY)
pr_err("%s: a legacy watchdog module is probably present.\n",
watchdog->info->identity);
old_wdd = NULL;
return err;
}
}
最后不得已,在内核的dtb中删掉了WDOG2,解决这个问题。 |