- 论坛徽章:
- 0
|
原帖由 Aramis 于 2009-8-3 21:04 发表 ![]()
两个部分
第一次是initrd.img在内存解压执行的,
把initrd用 zcat initrd-2.6.18-128.el5.img |cpio -i 释放之后,查看init文件,会有如下命令行
echo Creating root device.
mkrootdev -t ext3 -o default ...
谢谢你给我的解答, 下面一段是我找到的:
启动时用到initrd来mount根文件系统。注意理解ramdisk和initrd这两个概念,其实 ramdisk只是在ram上实现的块设备,类似与硬盘操作,但有更快的读写速度,它可以在系统运行的任何时候使用,而不仅仅是用于启动;initrd(boot loaderinitialized RAMdisk)可以说是启动过程中用到的一种机制,具体的实现过程也使用ramdisk技术。就是在装载linux之前,bootloader可以把一个比较小的根文件系统的映象装载在内存的某个指定位置,姑且把这段内存称为initrd(这里是initrd所占的内存,不是ramdisk,注意区别),然后bootloader通过传递参数的方式告诉内核initrd的起始地址和大小(也可以把这些参数编译在内核中),在启动阶段就可以暂时的用 initrd来mount根文件系统。initrd的最初的目的是为了把kernel的启动分成两个阶段:在kernel中保留最少最基本的启动代码,然后把对各种各样硬件设备的支持以模块的方式放在initrd中,这样就在启动过程中可以从initrd所mount的根文件系统中装载需要的模块。这样的一个好处就是在保持kernel不变的情况下,通过修改initrd中的内容就可以灵活的支持不同的硬件。在启动完成的最后阶段,根文件系统可以重新 mount到其他设备上,但是也可以不再 重新mount(很多嵌入式系统就是这样)。initrd的具体实现过程是这样的:bootloader把根文件系统映象装载到内存指定位置,把相关参数传递给内核,内是核启动时把initrd中的内容复制到ramdisk中(ram0),把initrd占用的内存释放掉,在ram0上mount根文件系统。从这个过程可以看出,内核需要对同时对ramdisk和initrd的支持(这种需要都编入内核,不能作为模块)。
是initrd先将/分区中的一些必须的模块读取并映射到内存, 然后内核把initrd映射中的内容复制并解压到内存, 释放掉initrd, 最后在内存上mount真正的根"分区"咯~~!
其实我想问的就是, 我们平常访问的"/"目录, 只是单说这个目录不是说分区, 其实是内存中的区域吧? "/"目录的inode和block也是内存中的区域? |
|