首页 > 解决方案 > 如果文件系统损坏,使用 kexec --load-panic 重新启动

问题描述

我有一个设备,它从 coreboot 加载一个小的“安全模式”Yocto 图像,然后选择一个更大的图像来加载,并执行一个 kexec 来加载该图像。通常这是可行的,但在极少数情况下,目标映像的文件系统已损坏并且内核在启动时出现崩溃。

由于该设备最终将部署到难以访问的位置,因此我希望找到一种方法来从任何内核恐慌中恢复,而无需重新启动设备。

为了解决这个问题,我在加载新内核时在 kexec 命令行中使用“init=/sbin/init.sh”添加了一个初始化脚本,并在第二个文件系统上的初始化脚本。这种方法成功地恢复了在启动过程后期发生的内核恐慌,但我遇到了一个文件系统,它以特定方式被丢弃,因此内核恐慌会在启动脚本启动之前发生。由于初始化脚本没有被执行,panic 内核永远不会被加载,并且设备必须重启。

为了解决这个问题,我尝试将恢复内核添加到由 coreboot 加载的初始小内核中,但它似乎只处理在“kexec --exec”命令加载新内核之前发生的内核恐慌。

我试图找出解决这个问题的最佳方法。例如,我可以在 kexec 到新图像之前添加验证。我目前检查文件系统是否可以挂载,它的内核文件和初始化脚本是否存在。如果有人知道获取初始化脚本还需要哪些其他文件,我可以将它们添加到我的验证中。

或者,有没有办法在已经加载恢复内核“--load-panic”参数的情况下加载新内核和kexec?

我尝试将 kexec --load 和 --load-panic 放在同一行,但这不起作用。

非常感谢任何建议。

标签: linux-kernelembedded-linux

解决方案


推荐阅读