- 論壇徽章:
- 0
|
原帖由 Aramis 于 2009-8-3 21:04 發(fā)表 ![]()
兩個(gè)部分
第一次是initrd.img在內(nèi)存解壓執(zhí)行的,
把initrd用 zcat initrd-2.6.18-128.el5.img |cpio -i 釋放之后,查看init文件,會(huì)有如下命令行
echo Creating root device.
mkrootdev -t ext3 -o default ...
謝謝你給我的解答, 下面一段是我找到的:
啟動(dòng)時(shí)用到initrd來(lái)mount根文件系統(tǒng)。注意理解ramdisk和initrd這兩個(gè)概念,其實(shí) ramdisk只是在ram上實(shí)現(xiàn)的塊設(shè)備,類似與硬盤(pán)操作,但有更快的讀寫(xiě)速度,它可以在系統(tǒng)運(yùn)行的任何時(shí)候使用,而不僅僅是用于啟動(dòng);initrd(boot loaderinitialized RAMdisk)可以說(shuō)是啟動(dòng)過(guò)程中用到的一種機(jī)制,具體的實(shí)現(xiàn)過(guò)程也使用ramdisk技術(shù)。就是在裝載linux之前,bootloader可以把一個(gè)比較小的根文件系統(tǒng)的映象裝載在內(nèi)存的某個(gè)指定位置,姑且把這段內(nèi)存稱為initrd(這里是initrd所占的內(nèi)存,不是ramdisk,注意區(qū)別),然后bootloader通過(guò)傳遞參數(shù)的方式告訴內(nèi)核initrd的起始地址和大小(也可以把這些參數(shù)編譯在內(nèi)核中),在啟動(dòng)階段就可以暫時(shí)的用 initrd來(lái)mount根文件系統(tǒng)。initrd的最初的目的是為了把kernel的啟動(dòng)分成兩個(gè)階段:在kernel中保留最少最基本的啟動(dòng)代碼,然后把對(duì)各種各樣硬件設(shè)備的支持以模塊的方式放在initrd中,這樣就在啟動(dòng)過(guò)程中可以從initrd所mount的根文件系統(tǒng)中裝載需要的模塊。這樣的一個(gè)好處就是在保持kernel不變的情況下,通過(guò)修改initrd中的內(nèi)容就可以靈活的支持不同的硬件。在啟動(dòng)完成的最后階段,根文件系統(tǒng)可以重新 mount到其他設(shè)備上,但是也可以不再 重新mount(很多嵌入式系統(tǒng)就是這樣)。initrd的具體實(shí)現(xiàn)過(guò)程是這樣的:bootloader把根文件系統(tǒng)映象裝載到內(nèi)存指定位置,把相關(guān)參數(shù)傳遞給內(nèi)核,內(nèi)是核啟動(dòng)時(shí)把initrd中的內(nèi)容復(fù)制到ramdisk中(ram0),把initrd占用的內(nèi)存釋放掉,在ram0上mount根文件系統(tǒng)。從這個(gè)過(guò)程可以看出,內(nèi)核需要對(duì)同時(shí)對(duì)ramdisk和initrd的支持(這種需要都編入內(nèi)核,不能作為模塊)。
是initrd先將/分區(qū)中的一些必須的模塊讀取并映射到內(nèi)存, 然后內(nèi)核把initrd映射中的內(nèi)容復(fù)制并解壓到內(nèi)存, 釋放掉initrd, 最后在內(nèi)存上mount真正的根"分區(qū)"咯~~!
其實(shí)我想問(wèn)的就是, 我們平常訪問(wèn)的"/"目錄, 只是單說(shuō)這個(gè)目錄不是說(shuō)分區(qū), 其實(shí)是內(nèi)存中的區(qū)域吧? "/"目錄的inode和block也是內(nèi)存中的區(qū)域? |
|