如何在没有引导加载程序的情况下启动 Linux 内核?

如何在没有引导加载程序的情况下启动 Linux 内核?

默认情况下,要启动 Linux 内核的映像 bzImage,您需要使用引导加载程序。如果您尝试直接启动映像,则会给出错误:

Booting from Hard Disk...
Direct booting from floppy is no longer supported.
Please use a boot loader program instead.
Remove disk and press any key to reboot . . .

在旧版本的 Linux 中可以这样做:

make zImage

在较新版本的内核中,是否可以不使用引导加载程序进行启动?如果可以,该怎么做?

答案1

如果你有一个基于 EFI 的系统,从 Linux 内核 3.3 开始固件可以直接加载并执行内核

答案2

这是不可能的。至少,在那些没有打补丁的旧内核上是不可能的。

您有以下选择:

  1. 使用引导加载程序。
  2. 使用旧版本的linux。
  3. 将直接引导(即内置引导加载程序)破解到内核源中,因此它的工作方式或多或少类似于过去的软盘引导。

答案3

如果你有一个基于 EFI 并配置好的系统,你可以编译或获取启用 EFI 的内核(https://wiki.archlinux.org/index.php/EFISTUB)。您可以将这些技巧应用于大多数(如果不是全部)较新的发行版。我亲自尝试了从头开始构建完整的 Linux 和在 initramfs 中使用 Busybox 的基本内核(相当没用)。Arch Linux 运行起来非常好。

要么使用 EFI 引导加载程序(如 Grub 或 Clover),要么利用内核的 EFISTUB 功能直接引导内核并通过使用 efi 变量传递内核命令。Arch 的 wiki 对我来说同样有效。
注意,我禁用了 Secureboot。

或者,除了可以放入 MBR 或作为 optionrom 的各种引导加载程序之外,您还可以尝试查看 Coreboot(或 libreboot)并将 Linux 作为您的有效负载。如果您的系统支持,我认为 EFISTUB 选项最简单。您可能还想检查系统是否有某种启动菜单,可以在启动时在操作系统之间切换并禁用安全启动选项。

相关内容