Linux kernel ARM板中的内核死机错误

Linux kernel ARM板中的内核死机错误,linux-kernel,arm,kernel,linux-device-driver,embedded-linux,Linux Kernel,Arm,Kernel,Linux Device Driver,Embedded Linux,我在远程位置安装了臂板。有一段时间,我有一个内核恐慌错误。同时,没有硬件重启的选项。没有人可以在这个地方重新启动它 我想在内核死机错误后自动重启主板。那么在内核中该做什么呢 如果您的硬件包含,则使用看门狗支持编译内核并对其进行配置。我建议你关注这个博客 注意::我从未试过这个。如果问题已解决,请在此处进行更新 您可以修改panic()函数kernel/panic.c,以便在希望重新启动时调用内核_restart(*cmd)(可能是在打印所需的调试信息之后) 我假设您正在启动一个板,因此请注意,您

我在远程位置安装了臂板。有一段时间,我有一个内核恐慌错误。同时,没有硬件重启的选项。没有人可以在这个地方重新启动它

我想在内核死机错误后自动重启主板。那么在内核中该做什么呢

如果您的硬件包含,则使用看门狗支持编译内核并对其进行配置。我建议你关注这个博客

注意::我从未试过这个。如果问题已解决,请在此处进行更新

您可以修改panic()函数kernel/panic.c,以便在希望重新启动时调用内核_restart(*cmd)(可能是在打印所需的调试信息之后)


我假设您正在启动一个板,因此请注意,您需要根据马赫数为machine_restart()-(由kernel_restart调用)中的相关函数提供ops。如果您只是按原样使用主板,那么我想用kernel_restart(*cmd)重建内核就可以了。

正如前面的评论所建议的,看门狗定时器是您的朋友。如果您的硬件包含看门狗定时器,请在内核选项中启用它并对其进行配置

另一种选择是使用。如果您的usb连接在远程位置可用。Phidget控制器/软件用于使用USB控制板。检查电路板支撑

panic()通常是由于内核无法从中恢复的事件造成的。如果没有看门狗,则需要查看硬件,查看是否有GPIO等连接到重置线路。如果是这样,您可以切换此pin以重新启动CPU。试图改变
panic()
可能只会让事情变得更糟,这取决于根本原因和您使用的功能类型

您可以使用自定义重启功能进行挂接。如果存在,您可以使用shell命令重新启动来测试它
panic()
应该调用相同的例程。使用当前的ARM Linux版本

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

看门狗也许更好;它可能会捕捉到甚至不能调用
panic()
的情况。你可能有一个看门狗,却没有意识到这一点。许多皮质——一个CPU,都有一个内置的。硬件很少没有看门狗

然而,如果你没有看门狗,你可以使用上面的GPIO机制;硬件通常应该为软件重新启动设备(和外围设备)提供某种方式。
panic()
可能是由于一些错误的设备运行内存、锁定DRAM/Flash等。在这种情况下,切换重置线路可能比切换看门狗更好;如果重置也连接到CPU之外的其他硬件


相关:,

AFAIK,在内核死机后重新启动主板的一种简单方法是传递一个内核参数(通常来自引导加载程序)

然后,电路板将在死机后“1”秒自动重新启动

搜索更多

文档中的一些示例:

...
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=[KNL]内核在panic:delay上的行为
超时>0:重新启动前的秒数
超时=0:永远等待
超时<0:立即重新启动
格式:
...
oops=在oops上总是惊慌失措。默认情况是只杀死
过程,但有一个小概率
把机器锁死。
这也会导致机器检查异常的恐慌。
与panic=30一起使用可触发重新启动。
...

感谢您的回复,您的回答是正确的,但在我的板上不起作用。两者兼备是最容错的。即,一个看门狗和一个点击硬件复位线的
arm\u pm\u restart
挂钩;希望线路有一个锁存器或保持器,因为复位时CPU可能无法保持。如果您完全没有硬件支持,您可以尝试将CPU置于重置配置(所有CP15寄存器)中,并在任何启动代码中跳过重置向量。通过
arm\u pm\u restart
钩住这个例程。我认为您不需要修改
panic()
panic()
将调用
kernel\u restart()
并调用
arm\u pm\u restart
钩子。所以,您可以修改您的计算机文件以保持更改的区域设置。对,但他的问题是
panic
不会重置他的板?即,
panic
功能不工作。这就是它应该如何工作。
...
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.
...