【发布时间】:2018-05-24 19:12:58
【问题描述】:
我在嵌入式设备上发生了一些意外重启。由于 ioctl 调用,我目前能够检测到硬件看门狗问题。现在我希望能够检测内核恐慌是否是重新启动的原因。我找到了一些关于 crashkernel 和 crashdump 的文章,但我无法让它正常工作。而且我不想存储内核恐慌日志。只是能够知道是否发生内核恐慌。
我目前的想法是写在 mmc 的保留空间中。我目前正在使用预留空间来处理双重分配系统。这是个好主意吗?在内核恐慌期间是否可以在 mmc 中写入?我不确定,但似乎我可以使用某种内核恐慌钩子在此事件上运行例程。
没有标准方法可以检查启动时是否发生内核崩溃?
【问题讨论】:
-
好吧,当Kenel 崩溃时使用文件系统不是一个好主意。因此,我建议您避免访问 eMMC,因为它会包含您的 rootfs。我不确定是否有可用的内核恐慌钩子。您可以编辑
panic.c来切换一些 LED(如果有的话)或将一些命令发送回 UART 或在 LCD 上显示一些数据;在内核崩溃期间尽量避免文件系统访问。 -
我不能使用 led 或 uart。嵌入式设备在物理上是不可访问的。我目前正在尝试使用我的 rtc 的未使用寄存器来保存内核恐慌事件,以便能够在下次重新启动时检测到它。不确定这是处理我的用例的最佳实践。我正在使用 atomic_notifier_chain_register api 来注册内核恐慌的钩子。
-
这听起来比尝试在通知程序中弄乱文件系统要好得多。
-
你需要谷歌如何使用
pstore和ramoops。
标签: linux-kernel embedded coredump panic