![无需引导加载程序即可链式加载内核](https://linux22.com/image/27759/%E6%97%A0%E9%9C%80%E5%BC%95%E5%AF%BC%E5%8A%A0%E8%BD%BD%E7%A8%8B%E5%BA%8F%E5%8D%B3%E5%8F%AF%E9%93%BE%E5%BC%8F%E5%8A%A0%E8%BD%BD%E5%86%85%E6%A0%B8.png)
我正在开发一个嵌入式项目,该项目将进行就地升级。有时升级可能需要重新安装所有内容。由于这是一件非常危险的事情,我希望有某种故障安全回退模式来重新尝试升级。
我正在考虑添加一个非常基本的内核,该内核足以尝试另一次升级。我希望始终启动到这个基本内核,检查 GPIO,然后启动到另一个内核或根据 GPIO 的状态继续启动。我将在外壳上安装一个按钮来向相应的 GPIO 发出信号。
我不知道引导加载程序是如何工作的,并且 grub/syslinux 不可用 AFAIK。
这种事情可能吗?我是否把问题过于复杂化了?
答案1
Linux 引导加载程序至少必须加载内核并向其传递一些参数来告诉内核其加载位置。许多设置还需要能够传递命令行和初始 RAM 驱动器,尽管在具有已知硬件设置的嵌入式系统上,这可能是多余的。
获得可靠的引导加载程序的最佳方法是使用可用的引导加载程序。在固定配置中拥有一个简单的第一阶段引导加载程序,该引导加载程序可以链式加载 Linux 引导加载程序(U-Boot 或您的嵌入式系统具有的任何内容),并具有回退机制。 U-Boot 本身可以实现回退机制 - 请参阅U-Boot 用户邮件列表中的“在 U-Boot 上实现启动映像回退”, 和冗余图像以 xpedite5370 为例。