2

我是 linux 内核的新手,尝试从加载到 RAM 的点来理解 Linux 内核的启动,我想知道 Linux 映像加载到 RAM 后,控制权是如何传递给这个映像的,所有必要的参数都需要传递到内核​​,我们可以在不传递任何参数的情况下将控制权传递给 linux 映像吗?

我正在使用“bootm.c”查看 UBOOT 代码,但无法理解将控制权传递给 Linux 映像的位置,哪个函数负责它。

是否 load_zimage() 负责传递控制/

任何人都可以引导我走向正确的方向或建议一些关于从 x86 架构引导的特定部分的好教程。

4

1 回答 1

2

我认为这取决于。不同种类的 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。

希望以上信息能帮助您理解您的问题。

于 2013-03-29T00:43:30.923 回答