ARM板中的内核恐慌错误

时间:2014-07-03 06:38:58

标签: linux-kernel arm kernel linux-device-driver embedded-linux

我在远程位置安装了ARM板。有一段时间我有一个内核恐慌错误。同时,硬件重启没有选择。公共汽车上没有人可以重新启动它。

我想在内核崩溃错误后自动重启我的主板。那么在内核中该怎么做

5 个答案:

答案 0 :(得分:2)

如果您的硬件包含watchdog timer,则使用看门狗支持编译内核并进行配置。我建议关注此博客http://www.jann.cc/2013/02/02/linux_watchdog.html

警告 ::我从未尝试过这个。如果问题已解决,请在此处更新。

答案 1 :(得分:2)

您可以修改panic()函数kernel / panic.c以在您希望它重新启动的位置调用kernel_restart(* cmd)(可能在打印所需的调试信息之后)。

我假设你正在提出一个板,所以请注意你需要根据MACH为machine_restart()中的相关函数提供操作 - (由kernel_restart调用)。如果您只是按原样使用电路板,那么我想用kernel_restart(* cmd)重建内核应该这样做。

答案 2 :(得分:1)

panic()通常是由内核无法恢复的事件引起的。如果您没有看门狗,则需要查看硬件以查看 GPIO 等是否已连接到 RESET 行。如果是这样,您可以切换此引脚以重新启动CPU。尝试更改panic()可能会让事情变得更糟,具体取决于您使用的根本原因和功能类型。

您可以使用自定义重启功能挂钩arm_pm_restart。您可以使用shell命令reboot(如果存在)对其进行测试。 panic()应该调用相同的例程。 使用当前的ARM Linux版本

您可能希望在此例程中关闭MMU并阻止中断。从panic()调用时,它会使其更具弹性。当您要重置时,您可以将例程复制到您喜欢的任何物理地址。

看门狗可能更好;它可能会遇到甚至不能调用panic()的情况。你可能有一个看门狗而没有意识到这一点。许多Cortex-A CPU都内置了一个。硬件很少没有看门狗。

但是,如果您没有监视程序,则可以使用上面的GPIO机制;硬件应该通常为软件提供重启设备(和外围设备)。 panic()可能是由于某些行为不当导致内存占用错误,锁定了DRAM / Flash等等。切换 RESET 行可能比看门狗更好案件;如果 RESET 也连接到除CPU之外的其他硬件。

相关:How to debug kernel freezeHow to change watchdog timer

答案 3 :(得分:1)

AFAIK,一种在内核崩溃后重启板的简单方法是传递内核参数(通常来自引导程序)

 panic=1

然后,电路板将在恐慌后自动重启'1'秒。

搜索Documentation以获取更多信息。

文档中的一些示例:

...
panic=      [KNL] Kernel behaviour on panic: delay <timeout>
            timeout > 0: seconds before rebooting
            timeout = 0: wait forever
            timeout < 0: reboot immediately
            Format: <timeout>
...
oops=panic  Always panic on oopses. Default is to just kill the
            process, but there is a small probability of
            deadlocking the machine.
            This will also cause panics on machine check exceptions.
            Useful together with panic=30 to trigger a reboot.
...

答案 4 :(得分:0)

正如之前的评论所示,看门狗计时器是你的朋友。如果您的硬件包含监视程序计时器,请在内核选项中启用它并进行配置。

其他替代方法是使用Phidget。如果您在远程位置提供USB连接。 Phidg​​et控制器/软件用于使用USB控制您的电路板。检查电路板支持。