【发布时间】:2014-08-24 03:48:29
【问题描述】:
我在远程位置有 ARM 板。有时我遇到了内核恐慌错误。同时没有硬件重启的选项。 bus 没有人可以在这个地方重新启动它。
我想在内核崩溃错误后自动重启我的主板。那么在内核中该怎么做。
【问题讨论】:
标签: linux-kernel arm kernel linux-device-driver embedded-linux
我在远程位置有 ARM 板。有时我遇到了内核恐慌错误。同时没有硬件重启的选项。 bus 没有人可以在这个地方重新启动它。
我想在内核崩溃错误后自动重启我的主板。那么在内核中该怎么做。
【问题讨论】:
标签: linux-kernel arm kernel linux-device-driver embedded-linux
如果您的硬件包含watchdog timer,则使用看门狗支持编译内核并对其进行配置。我建议关注这个博客http://www.jann.cc/2013/02/02/linux_watchdog.html
注意 :: 我从未尝试过。如果问题已解决,请在此处请求您更新。
【讨论】:
您可以修改 panic() 函数 kernel/panic.c 以在您希望它重新启动时调用 kernel_restart(*cmd)(可能在打印所需的调试信息之后)。
我假设您正在开发一个板,所以请注意,您需要根据 MACH 为 machine_restart() 中的相关函数(由 kernel_restart 调用)提供操作。如果您只是按原样使用板子,那么我猜应该使用 kernel_restart(*cmd) 重建内核。
【讨论】:
panic()。 panic() 将调用 kernel_restart() 并且 arm_pm_restart 钩子将被调用。因此,您只需修改您的机器文件以保持您的更改区域设置。
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 之外的其他硬件。
【讨论】:
arm_pm_restart 钩子;希望这条线有一个锁存器或保持,因为它在复位时 CPU 可能不会保持它。如果您完全没有硬件支持,您可以尝试将 CPU 置于复位配置(所有 CP15 寄存器)并在您拥有的任何引导代码中跳过复位向量。通过arm_pm_restart 钩住这个例程。
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.
...
【讨论】:
panic 没有重置他的董事会?即,panic 功能不起作用。它应该是这样工作的。
正如之前的 cmets 看门狗计时器所建议的那样,这里是您的朋友。如果您的硬件包含看门狗定时器,请在内核选项中启用它并进行配置。
其他选择是使用Phidget。如果您的 USB 连接在远程位置可用。 Phidget 控制器/软件用于使用 USB 控制您的电路板。检查电路板支持。
【讨论】: