initrd和引导Linux内核

据我所知,initrd是一个可载入RAM的小图片。 它用来启动所有可加载模块的完整内核。 作为该过程的一部分,我们需要vmlinuz内核映像,它是bzImage的重命名版本。

是否有可能在不创buildinitrd镜像的情况下启动内核?

Solutions Collecting From Web of "initrd和引导Linux内核"

initrd / initramfs是可选的,不是必需的。 bzImage是纯粹的内核镜像,可以直接由bootloader启动。 但是,执行一些任务(加载文件系统模块,磁盘访问驱动程序,从某些可交换介质挂载根文件系统,而没有固定的名称/路径等)通常需要访问文件系统和用户空间工具可能是十分必要的。

这就是initramfs的用途:它是一个CPIO存档文件,可以在内核映像本身中或在启动时由引导加载程序附加到内核映像(内核映像是initramfs的容器,而不是其他方式)。

该CPIO存档文件包含一个初始rootfs,其中包含设置所有设备以访问正确的根文件系统所需的模块,以及一些识别这些设备的程序,加载模块,执行一些其他启动任务,将相应的根文件系统重新挂载到/和启动/ sbin /在里面

initrd是相似的,主要区别在于它是一个文件系统映像,可能并经常被压缩。 内核必须支持内置的文件系统,并将该映像挂载为最初的/。

由于CPIO比较简单几个数量级,因此initramfs优先于initrd,因为这既节省了内置任何文件系统模块的要求,也使得创建initramfs更容易。 而不必创建一个ext2镜像,loopdevice挂载和填充它,它归结为一个简单的档案创建,而不像使用焦油。

但是,如果你编译你的内核,并在内核映像中内置所有必需的驱动程序和模块,并且你的根文件系统设备在系统中有一个固定的名字,那么你不需要一个initramfs,因为内核可以自己完成任务。

initrd包含理解根文件系统所需的模块,从而能够访问正常的内核模块存储。

如果您的内核是使用内置的所有代码编译的,而不是作为模块编译的,那么就不需要initrd。

是的,你可以在没有initrd镜像的情况下启动系统。

initrd映像是一个gzipped的ramdisc映像,或者(更常见的是一个gzipped的.cpio映像)。

在后一种情况下,.cpio被扩展到名为initramfs的文件系统中。

如果.cpio映像不存在,内核会使用一个内置的映像,它只包含一些特殊文件(如/ dev / console,/ dev / null和一些目录),但不包含二进制文件。

内核然后使用一些内置的逻辑和命令行选项来尝试查找和挂载是“真正的”根文件系统,该文件系统被挂载在“initramfs之上”,因此隐藏它。

这种“传统”引导系统大多不在现代发行版中使用。