2010-01-16 73 views
1

在早期启动阶段,linux内核使用一种ram磁盘来访问模块。出于好奇,我想了解我有一个问题: 在这个阶段,包含initramfs/initrd的文件必须可供内核访问。这意味着内核必须支持适当的文件系统。那么,为什么initramfs的内容不能和普通文件在同一个文件系统中呢?为什么不只是纯文件而不是initramfs或initrd?

回答

1

它可以。 initrd映像不需要引导,但大多数使用它。但是,这样做可以让您为文件系统设置不同的设置。例如,在使用非ext2文件系统(NFS?XFS?),使用RAID时,或在不常用设备(USB驱动器?带有unionfs的CDROM?)上托管根文件系统时,通常需要initrd。

这当然可以通过编译适当的文件系统或RAID驱动程序到您的内核来避免,但这会使您的内核变大。

+0

简洁明了!我学到了东西。 –

6

包含initramfs/initrd的文件在此阶段必须可供内核访问。

这似乎是你的困惑的心脏:它不是内核,读取的initramfs/initrd的,这是引导程序!内核不需要知道如何访问initramfs/initrd。这是练习的整个

引导加载程序将initramfs/initrd加载到内存中,并且有一个明确定义的通信协议,它允许引导加载程序告诉内核它在哪个内存地址加载了initramfs/initrd。

对于initramfs,initramfs映像也可以附加到内核映像。

1

第一个引导程序(可能是LILOGrub)使用BIOS调用从引导驱动器读取内核映像。然后它将控制权交给刚刚放在系统RAM中的内核。

内核不使用BIOS调用来访问磁盘。在内核启动时,它会扫描系统中的设备,并为系统中的每个设备加载设备驱动程序模块,安装根文件系统并启动第一个用户进程。

但是等待:内核如何加载设备驱动程序模块,以便磁盘子系统被加载?这里有一个鸡与鸡蛋的问题,你需要访问磁盘以获取允许你访问磁盘的设备驱动程序。

解决方法是将所有这些驱动程序放入初始ramdisk(initrd);该引导加载程序读取该ramdisk映像,并将其与内核一起放入RAM中,并为内核提供进入根文件系统所需的一组驱动程序。

没有这个,你将需要所有的驱动程序来访问内核的根文件系统。

相关问题