Python中的Beaglebone Black看门狗

Posted

技术标签:

【中文标题】Python中的Beaglebone Black看门狗【英文标题】:Beaglebone Black watchdog in Python 【发布时间】:2015-04-20 14:23:13 【问题描述】:

我有一个运行 Debian 的 Beaglebone Black,我需要一个在后台运行的脚本,它会每隔几秒检查一次系统是否仍在运行。据我了解,BBB 中的看门狗是基于硬件的,并且独立于操作系统运行,因此即使操作系统完全冻结,它也可以重新启动设备(对吗?)。这是来自logicsupply的一个非常简单的例子:

#!/usr/bin/env python

import time
import os

os.nice(20)
time.sleep(60)                  # Wait before starting
wd = open("/dev/watchdog", "w+")
while 1:
     wd.write("\n")
     wd.flush()
     time.sleep(5)

但我找不到更改默认超时的方法。在 C 中它看起来像:

ioctl(fd, WDIOC_SETTIMEOUT, &timeout);

但在 Python 中调用 ioctl 函数似乎相当晦涩难懂。从this discussion 看来,C 宏定义可能具有不同的值,具体取决于硬件。有没有一种方便的方法可以在 Python 中解决它们(至少,这个特定的方法,以更改默认的看门狗超时)? 在后台运行脚本以便它可以在冻结的操作系统下重新启动系统的最佳方法是什么?

【问题讨论】:

你不能从看门狗 conf 中执行此操作或使用 pid 吗?如果脚本失败,您真的要重新启动吗? @PadraicCunningham BBB 将用作移动机器人的控制器。如果操作系统或控制软件出现问题(崩溃/冻结),我们需要尽快恢复控制。这就是为什么我想尽可能低级。 我对看门狗并不太熟悉,但看手册页,我认为设置间隔工作linux.die.net/man/5/watchdog.conf @PadraicCunningham 它有效,谢谢!我已经放弃了通过 ioctl 实现的想法,而是更改了 .conf 文件。 【参考方案1】:

Padraic Cunningham 的This comment 已将我引导至manpage for watchdog.conf,这是在 AM335x 上配置硬件 WDT 的正确且有效的方式,因此无需额外的脚本/守护程序:

watchdog-timeout = 10

【讨论】:

以上是关于Python中的Beaglebone Black看门狗的主要内容,如果未能解决你的问题,请参考以下文章

Barebox 如何为 Beaglebone Black 启动?

Beaglebone Black教程Beaglebone Black的引脚分配

如何从 BeagleBone Black 连接到 USB TTY?

BeagleBone Black教程之BeagleBone Black设备的连接

Beaglebone Black扩展板开发(零):缘起

从 beaglebone black 上的文件实时转码 1080p 流的选项