我有一台设备,该设备从coreboot加载一个小的“安全模式” Yocto映像,然后选择一个较大的映像加载,然后执行kexec加载该映像。通常这可以正常工作,但是在极少数情况下,目标映像的文件系统已损坏,并且在启动时出现内核崩溃。
由于该设备最终将部署到难以访问的位置,所以我希望找到一种方法,可以从任何内核恐慌中恢复而无需物理重启设备。
为解决此问题,在加载新内核时,我在kexec命令行中使用“ init = / sbin / init.sh”添加了一个初始化脚本,并使用“ kexec --load-panic”添加了恢复内核加载。在第二个文件系统的init脚本中。这种方法成功地恢复了在启动过程中发生的内核崩溃,但是我遇到了一个文件系统,该文件系统以一种特殊的方式被破坏了,以便内核崩溃将在启动初始化脚本之前发生。由于未执行初始化脚本,因此紧急内核永远不会加载,并且必须重新启动设备。
要解决此问题,我尝试将恢复内核添加到由coreboot加载的初始小内核中,但是它似乎只能处理在“ kexec --exec”命令加载新内核之前发生的内核崩溃。
我正在尝试找出解决此问题的最佳方法。例如,我可以在kexec到新映像之前添加验证。我目前正在检查是否可以挂载文件系统,是否存在其内核文件和init脚本。如果有人知道要进入初始化脚本还需要哪些其他文件,则可以将其添加到我的验证中。
或者,是否有一种方法可以用已加载的恢复内核“ --load-panic”参数来加载新内核和kexec?
我尝试将kexec --load和--load-panic放在同一行,但这不起作用。
任何建议都将不胜感激。