我认为这取决于。不同种类的 CPU 架构,它们使用不同的方式将信息传递给 Linux 内核。当然,Linux Kernel 可以在没有 bootloader 传递信息的情况下成功启动,但需要在 Linux Kernel 中进行正确的静态设置,例如 root 设备名称、控制台设备、mem 大小,以及一些参数来启用/禁用Linux 内核中的一些特性。
为什么 bootloader 需要将各种信息(参数)传递给 Linux Kernel,我认为这是灵活的考虑。考虑一下这种情况,可以在两个具有相同 CPU 但不同外围模块的板上共享一个 Linux 内核。
让我展示一些 UBoot 将信息传递给 Linux 内核的示例:
(1) 对于 PowerPC cpu,现在他们使用 DTB(Device Tree Blob) 文件将更多信息从 UBoot 传递到 Linux Kernel。他们将 UBoot 和 DTB 视为固件,并且在 Linux Kernel 中,他们采用了一个开放的固件(OF)基础设施。你可能知道UBoot中的“bootm”命令,bootm可以有三个参数,第一个是uImage地址,第二个是initrd地址,第三个是dtb地址。
(2) 早期,他们使用 bootargs 将信息传递给 Linux 内核。你也可能知道 UBoot 中有 gd/bd 结构,它们也可以将信息传递给 Linux Kernel。但是这种方式传递的信息是有限的,不像DTB。
希望以上信息能帮助您理解您的问题。