initrd 和 Intramfs 用途混淆

initrd 和 Intramfs 用途混淆

我对 initrd 或 intramfs 的目的的理解是让内核能够在 RAM 中挂载一个临时文件系统来加载驱动程序和其他东西,以便能够挂载实际的 rootfs(无论它位于何处)。

读完这篇文章后,似乎主要目标是能够维护通用的内核发行版,而无需对每个可能的不同场景进行硬编码来告诉如何在启动期间挂载 rootfs。

我猜想在这种情况下 initrd 或 intramfs 几乎总是定制的。

然而我不明白的是,我们是否还需要修改内核代码来告诉它在为我们的特定情况安装了intramfs时要执行什么?例如,运行特定的脚本,甚至实际加载驱动程序并使用它们等。

答案1

要点是节省内核 RAM(未分页)。内核不是构建包含所有内容的内核,而是构建包含一些重要驱动程序的内核,其余部分可作为模块使用。在启动时,内核会探测它找到的各种总线,例如 pcie,并尝试查找声称是所发现的各种事物的驱动程序的模块。这些模块保留在 RAM 中,而其余模块则被丢弃。通常 initrd 将包含所有可能的模块,或者至少包含大量模块,并且 initrd 本身的生成不会涉及太多定制(如果有的话)。

相关内容