我正在尝试从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控制心跳?
答案 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
设备(如果要手动控制看门狗)。我宁愿只让守护程序执行其操作。
与关于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