整个内核是否在启动时加载到内存中?

use*_*270 15 linux grub kernel initrd initramfs

我通读了这个流行的 IBM 文档(我在网上经常看到它被引用),解释了初始 RAM 磁盘的功能。

不过,我在概念化其工作原理时遇到了障碍。

在文档中它说

引导加载程序(例如 GRUB)识别要加载的内核并将内核映像和任何关联的 initrd复制到内存中

我已经很困惑了:它是将整个内核复制到内存中还是只是其中的一部分?如果整个内核都在内存中,那么为什么我们甚至需要初始 RAM 磁盘?

我认为 initrd 的目的是能够拥有一个小的通用内核映像,initrd 将在加载内核映像之前在其中安装正确的模块。但是如果整个内核已经在内存中,为什么我们还需要 initrd?

这也带来了另一件让我困惑的事情——加载到内核中的模块在哪里?是否所有内核模块都存储在 initrd 中?

Ste*_*itt 19

整个内核在启动时加载到内存中,通常与initramfs现在一起加载。(仍然可以将系统设置为在没有启动的情况下启动,initramfs但这在台式机和服务器上并不常见。)

initramfs的作用是提供所需要安装的‘真实’的文件系统,并继续引导系统的功能。这涉及内核模块以及各种二进制文件:您至少需要udev一些网络,并且kmod需要加载模块。

模块可以在启动后加载到内核中,因此initramfs. 他们可以在任何地方存储:在initramfs/lib/modules在真实的文件系统,在开发树,如果你正在开发一个模块...的initramfs只需要包含哪些是需要安装的根文件系统(其中包含其余部分)的模块。


Tob*_*ght 6

整个内核(但不是它的模块)将被加载到内存中。如果在任何文件系统可用之前内核需要一些模块(这通常意味着文件系统及其设备的驱动程序),那么这些模块将在 initramfs(在内存中)中,内核将从那里加载它们。其他模块可以稍后从文件系统加载。