如何在看门狗执行前将日志复制到闪存?

How to copy logs to flash before watchdog execution?

本文关键字:复制 日志 闪存 看门狗 执行      更新时间:2023-10-16

如何在看门狗执行之前执行一些脚本(在我的情况下,它会编写将日志复制到闪存或远程复制日志的脚本)?

我应该修改 linux 内核看门狗驱动程序吗?如果是,采用哪种方法? 或者,也许可以通过以下方式以某种方式配置它:

/etc/default/watchdog
/etc/watchdog.conf

但是,我们安装了看门狗配置有限的繁忙盒。 我在谷歌上找不到任何东西,令人惊讶的是,这是需要解决的基本问题 - 每个人都希望在持久内存中的看门狗重置后拥有日志,闪存不是/var/log/路径的内容。

当然,在正常的设备生命周期中不时将日志复制到闪存的解决方案并不是一个好主意,因为应该有一些解决方案如何在馈送/dev/看门狗的看门狗超时到期时做到这一点。

在比 4.9 更新的 Linux 内核上,您应该具有预超时调控器框架的可用性,该框架允许您编写一个 Linux 内核驱动程序,该驱动程序将在检测到预超时时做出反应。像这样的解决方案远远超出了简单问答的范围,所以我保留了我原来的答案。

TL;博士:

如果在操作系统仍在运行时可检测到问题,则可以刷新日志。如果问题是由操作系统锁定引起的,那么您将没有机会解决问题,因为硬件将重置盒子。

这里有两件事:

  • 看门狗装置
  • 看门狗程序

看门狗设备通常是一个硬件计时器,当它的计时器到期时,它将执行"特定低级别"的操作。最常见的低级操作是重置框。如果它发生在硬件中,则不会涉及操作系统。一旦计时器用完,您将没有机会执行任何高级别的操作 - 例如在某处写入日志文件。

看门狗程序是一种工具,只要满足检查条件,就会定期向看门狗设备保证。

忙盒看门狗计时器的条件是一个简单的循环(伪代码):

while (1) {
# reassure watchdog
# sleep some time
}

因此,如果程序停止运行 - 例如通过操作系统锁定或程序终止,那么底层硬件将简单地踢盒子。

"更大"的看门狗二进制文件提供了一堆检查,如果它们失败,那么它将触发/etc/watchdog.conf中的repair-binary选项以尝试恢复。这将是刷新日志的潜在点。