在内核映像之间转移控制

在内核映像之间转移控制

正如标题所述,我目前有一个利用多重引导和 GRUB 的现有引导加载程序/内核映像。附加到我的自定义内核映像末尾的是 Linux bzImage 的二进制文件。

在引导过程中,我想首先执行与我的自定义引导加载程序/内核相关的操作,然后将执行转移到 bzImage 以便 linux 引导没有重新启动系统或返回 GRUB 菜单。

关于该主题的信息很少甚至没有,并且任何资源都说明了双引导的方法,这不是我的目标。相反,我想将两个内核塞在一起(一个是我自己的自定义内核映像,非常基本),并让它们按顺序执行,从而加载 Linux 内核映像,但不是在我的自定义内核/程序执行之前加载第一的。

如果您有任何有关该主题的资源或信息,请告诉我,谢谢。

编辑:目标的另一部分是不要将两个内核作为单独的实体加载,而是将 linux bzImage 附加到自定义内核/程序的末尾,然后通过移动eip到 bzImage 的起始地址来转移控制。

答案1

听起来您的目标可能可以使用与以下非常相似的过程来实现kexec系统调用。请注意,该过程可能比您想象的更复杂,因为现代计算机往往具有多个独立的 CPU 核心。

除非您的初始内核限制自己仅使用单个 CPU 内核,否则您的自定义内核需要确保在跳转到新内核之前停止其他内核,否则您可能最终会得到不同内核运行不同内核并互相干扰的结果。

Arch wiki 有关于使用kexec.

相关内容