使用Linux作为引导程序?

我有一个SPI连接闪存的embedded式设备。 基本上这意味着设备从一个小的闪存部分启动引导加载程序和Linux内核。

当设备启动,但在根文件系统被挂载和switch_root被调用之前 – 我想select启动另一个不同的内核

这样的事情可能吗? 我的目标是在闪存中有一个非常小的引导程序和库存内核,然后在硬盘上放置一个更新/更大的内核。

我的引导程序非常有限,我无法从硬盘读取较新的内核。

简而言之

a) CPU comes out of reset, reads its bootloader from flash b) bootloader boots, inits basic hardware, loads Linux kernel from flash c) kernel boots, inits more hardware, and reads a second kernel from a hard disk d) I'd like to switch to the second kernel at this point 

在这个过程中,我的目标是提供一种机制,使Flash中的内核随着时间变老,但更新的内核可以通过硬盘提供。 如果我的引导程序更先进,我会走这条路线 – 但它不能初始化所需的硬件(磁盘控制器),也不支持现代文件系统

…我曾经思考过的一个选项是,如果可以将第二个内核放入物理内存,将已知地址标记为第二个内核,然后重置。 然后引导加载程序可以检测到已知的地址,并validation第二个内核的完整性,select它,而不是来自Flash的

任何提示将不胜感激!

你不必做太复杂的事情。 只要打电话到kexec启动到新的内核。 它不能变得更简单…除非你的旧内核在没有kexec支持的情况下以某种方式编译。

看一下UBOOT,这对我来说是过去的事了。

你甚至可以用它来读取文件系统,但应该允许你在多个图像之间切换。 这样你总是覆盖你目前没有使用的映像,并重新configurationuboot启动复位升级。