- 前述:
- 内核配置方法,使用SMSC-SCH3114I ,而不是 FINTEK-F81801U。这是必须的基本操作。 未配置OK,会导致电源管理问题。
- 对于看门狗的系统调用Demo示例代码或示例脚本。看看是基于OS层面,还是应用程序层面的。 (基于Ubuntu或Yocto。LTMS表示无法操作看门狗。
针对前述,在初步查看内核配置后发现:系统中关于watchdog的驱动是叫iTCO_wdt.ko,它是Intel内部看门狗,是系统在启动过程中自动加载的,并非前述所写FINTEK-F81801U。
由于没有更多资料,目前甚至尚不清楚设备中是否有FINTEK-F81801U。
调试时可手动加载sch311x_wdt.ko,但加载后向/dev/watchdog设备写值时出现错误,具体操作如下:
# insmod /lib/modules/4.8.25-yocto-standard/kernel/driver/watchdog/sch311x_wdt.ko
# echo 1 > /dev/watchdog
bash: /dev/watchdog: Device or resource busy
应该是设备正在被使用
使用lsof查看占用的设备的进程:
# lsof /dev/watchdog
systemd
系统显示是systemd占用了
在/etc/systemd/目录下查找:
# grep -r dog /etc/systemd
/etc/systemd/system/multi-user.target.wants/systemd-networkd.service:WatchdogSec=3min
/etc/systemd/system/multi-user.target.wants/systemd-resolved.service:WatchdogSec=3min
/etc/systemd/system/bluetooth.target.wants/bluetooth.service:#WatchdogSec=10
/etc/systemd/system/dbus-org.bluez.service:#WatchdogSec=10
/etc/systemd/system.conf:RuntimeWatchdogSec=30s
/etc/systemd/system.conf:ShutdownWatchdogSec=5min
看样子是systemd.conf使用了RuntimeWatchdogSec 选项导致watchdog被占用,将/etc/systemd/system.conf 文件中RuntimeWatchdogSec选项屏蔽即可操作watchdog
系统镜像中,busybox watchdog命令解释:
watchdog
watchdog [-t N[ms]] [-T N[ms]] [-F] DEV
Periodically write to watchdog device DEV
Options:
-T N Reboot after N seconds if not reset (default 60)
-t N Reset every N seconds (default 30)
-F Run in foreground
-T N如果未重置,则在N秒后重新启动(默认为60)
-t N每N秒重置一次(默认为30)
-F 在前台运行
Use 500ms to specify period in milliseconds
根据以上解释,使用以下命令,可使设备在2s后重启:
# watchdog -t 10 -T 4 /dev/watchdog
参考资料:
http://www.jinbuguo.com/systemd/systemd-system.conf.html
https://www.busybox.net/downloads/BusyBox.html
最后一篇比较关键
https://unix.stackexchange.com/questions/125080/linux-watchdog-and-systemd-watchdog