启用 BeagleBone Black 的看门狗定时器,即使操作系统无法启动,该定时器也能工作

启用 BeagleBone Black 的看门狗定时器,即使操作系统无法启动,该定时器也能工作

我们知道,通过打开/dev/watchdog看门狗会激活并在不到一分钟内发送一个字符,它就会重置。说明是这里

BBB使用的处理器AM335x默认情况下启用其内部看门狗。但当U-Boot或Ubuntu启动时,该看门狗被禁用。操作系统启动后/dev/watchdog即可使用。

我想确保即使 U-Boot 或内核无法启动时看门狗也能正常工作。那么如何才能做到呢?

  • 内核和 U-Boot 不应禁用看门狗定时器。
  • 看门狗的默认超时时间应在 U-Boot 启动内核前一分钟以上,以便操作系统能够完全启动

我需要提及的是,更改 U-Boot 代码或 Linux 内核代码的某些部分是可以接受的。但外部看门狗不是一个选项。

答案1

经过我的调查,我发现Linux内核并没有在启动时禁用看门狗,但它实际上使用了一个定时器来重置看门狗。当内核发生错误或恐慌时,它仍然会重置看门狗,这样系统就不会因看门狗定时器溢出而重新启动。

下列的这个答案为了这个问题man proc

/proc/sys/内核/恐慌

该文件提供对内核变量panic_timeout的读/写访问。如果这个值为零,内核将在恐慌时循环;如果非零,则表示内核应在此秒数后自动重新启动

显然,应该将非零值传递给该文件。根据这个答案,要传递一个值,/proc/sys/kernel/panic我们应该修改/etc/sysctl.conf并添加参数,kernel.panic = 3在发生内核恐慌后重新启动之前等待 3 秒。

但这并没有解决我的问题。通过调查其他与恐慌相关的问题,我发现man proc

/proc/sys/kernel/panic_on_oops(自 Linux 2.5.68 起)

当遇到 oops 或 BUG 时,该文件控制内核的行为。如果该文件包含 0,则系统尝试继续操作。如果它包含 1,那么系统会延迟几秒钟(给 klogd 时间来记录 oops 输出),然后出现紧急情况。如果 /proc/sys/kernel/panic 文件也不为零,则机器将重新启动。

我的问题不是恐慌,而是内核哎呀!因此,通过添加kernel.panic_on_oops = 1/etc/sysctl.conf标志/proc/sys/kernel/panic_on_oops更改为 1。现在每当内核停止时,它都会在 3 秒后重新启动。

相关内容