在真实硬件上从 USB 启动自定义 Linux 内核?

在真实硬件上从 USB 启动自定义 Linux 内核?

我是 Linux 内核编译的新手。我按照这个教程现在我剩下一个包含自定义内核的 bzImage 和一个包含根目录的 initrd.img,或者至少这是我所理解的……那么现在我如何将它放在 USB 上并从真实 PC 上的 bios 或 uefi 启动它?我猜它需要某种引导加载程序,但我如何在 USB 上安装引导加载程序并配置它以启动内核?如果整个过程都在 Windows 上进行,那将会很有帮助。提前谢谢 :)。

答案1

对于 UEFI 启动,首先将您的 USB 记忆棒格式化为 FAT32。

如果启用CONFIG_EFI_STUB,内核将有自己的引导加载程序直接集成到 bzImage 中。也就是说,您将能够简单地将 bzImage 作为文件运行*.efi。对于可移动磁盘,将其复制到\EFI\Boot\BootX64.efi(对于 x64 CPU)将使 UEFI 自动从该文件启动。

但是,如果没有外部启动管理器,将很难将命令行和 initrd 传递给以这种方式启动的内核。(集成的“efistub”引导加载程序需要initrd=指定 initramfs 路径的参数。)您有几种选择:

  • 嵌入 cmdline 和 initrd 映像进入内核可执行文件,使用CONFIG_CMDLINE参数(我不知道嵌入 initrd 的参数,但我知道这是可能的)。

  • 下载 EFI 启动管理器的预编译版本,例如systemd-boot(这只是一个.efi没有模块或特殊安装程序的单独文件)并将其放入您的 FAT32 文件系统(在 bootx64.efi 路径下)。


对于 BIOS 启动,您需要单独的引导程序。Syslinux 是一个不错的选择。如果您查看 SLAX 发行版,您会发现它不是“完整”磁盘映像,而是一个简单的存档,可以解压到 FAT32 格式的棒中 - 其中有 Syslinux 本身 (ldlinux.sys) 和一个用于将 Syslinux MBR 安装到 USB 棒上的 Windows .bat 文件。

相关内容