看门狗:设备或资源繁忙

时间:2015-05-27 13:37:30

标签: c linux raspberry-pi watchdog

我正在尝试从Ras中提供看门狗设备 - /dev/watchdog - 来自C.

问题是无论我如何尝试访问设备总是抛出繁忙或权限被拒绝的错误(因为该进程已经在运行并由系统提供..)。

watchdog API中说'..驱动程序不会禁用 看门狗除非发送特定的魔法字符'V'  / dev / watchdog就在关闭文件之前。'但是再次不能/dev/watchdog ..我试过了:

echo V > /dev/watchdog //bash, /dev/watchdog: Permission denied

open("/dev/watchdog", O_WRONLY); //C, Device or resource busy

有没有办法释放设备,以便我可以从C控制心跳?

2 个答案:

答案 0 :(得分:5)

当我使用Raspberry Pi时遇到了这个问题。我的应用程序使用了大量CPU时间工作1或2天后,它会导致Raspberry pi挂起。所以我决定使用wtchdog。当我想从C ++程序编写看门狗设备时,我得到了同样的错误。

我找到的解决方案:

打开一个新规则文件 sudo nano /etc/udev/rules.d/60-watchdog.rules

并将此行添加到文件中 KERNEL=="watchdog", MODE="0666"

在此之后,我能够访问看门狗表格终端屏幕或c ++程序。

答案 1 :(得分:0)

为什么“设备或资源繁忙”错误

我发现的问题是systemd和wd_keepalive似乎在每个定影器输出中使用看门狗资源:

>sudo fuser -v /dev/watchdog
                     USER        PID ACCESS COMMAND
/dev/watchdog:       root      15087 F.... wd_keepalive

>sudo fuser -v /dev/watchdog
                     USER        PID ACCESS COMMAND
/dev/watchdog:       root          1 F.... systemd

修复繁忙错误

我从/etc/systemd/system.conf删除了看门狗计时器引用,以消除systemd繁忙系统上的繁忙问题。

如果您感到胆大,可以杀死-9您的wd_keepalive PID,然后将字符回显到/dev/watchdog设备(如果要手动控制看门狗)。我宁愿只让守护程序执行其操作。

可在运行Stretch 12/17/18的Pi上运行的看门狗设置

与关于SO和网络的其他建议不同,我不需要在Pi上将看门狗安装为设备,例如在/boot/config.txt中。除了通过systemctl外,我也不需要调用任何服务。我刚跑

sudo apt-get install watchdog
sudo update-rc.d watchdog defaults

然后配置看门狗,我将这些行放在/etc/watchdog.conf

watchdog-device = /dev/watchdog

# Set default Timeout
watchdog-timeout         = 14

运行看门狗

然后,使用监视程序所需要做的唯一一件事就是从应用程序中调用它,该应用程序在启动后运行:

sudo systemctl enable watchdog
sudo systemctl start watchdog
sudo systemctl -l status watchdog