- 論壇徽章:
- 3
|
原帖由 Zcanoe 于 2008-11-5 08:32 發(fā)表 ![]()
講得很詳細(xì),最好能講講為什么需要initrd.img,前段時(shí)間就卡在這里了,最后選擇做一個(gè)LFS系統(tǒng)來(lái)學(xué)習(xí)。
其實(shí)我也不是特別清楚initrd.img的作用,看到你的回復(fù)大概查了一下,我想下面的這段說明應(yīng)該可以作為答案。非常感謝Zcanoe兄的指出!
什么是initrd?
initrd = init ramdisk,是一個(gè)啟動(dòng)時(shí)存在于內(nèi)存的文件系統(tǒng)。 initrd的最初的目的是為了把kernel的啟動(dòng)分成兩個(gè)階段:在kernel中保留最少最基本的啟動(dòng)代碼,然后把對(duì)各種各樣硬件設(shè)備的支持以模塊的方式放在 initrd中,這樣就在啟動(dòng)過程中可以從initrd所mount的根文件系統(tǒng)中裝載需要的模塊。這樣的一個(gè)好處就是在保持kernel不變的情況下,通過修改initrd中的內(nèi)容就可以靈活的支持不同的硬件。在啟動(dòng)完成的最后階段,根文件系統(tǒng)可以重新mount到其他設(shè)備上。
Linux啟動(dòng)一定要用initrd么?
不必,如果把需要的功能全都編譯到內(nèi)核中(非模塊方式),只需要一個(gè)內(nèi)核文件即可,initrd能夠減小啟動(dòng)內(nèi)核的體積并增加靈活性。如果你的內(nèi)核以模塊方式支持某種文件系統(tǒng)(例如ext3, UFS),而啟動(dòng)階段的驅(qū)動(dòng)模塊(如jbd)放在這些文件系統(tǒng)上,內(nèi)核是無(wú)法讀取文件系統(tǒng)的,從而只能通過initrd的虛擬文件系統(tǒng)來(lái)裝載這些模塊。這里有些人會(huì)問: 既然內(nèi)核此時(shí)不能讀取文件系統(tǒng),那內(nèi)核的文件是怎么裝入內(nèi)存中的呢?答案很簡(jiǎn)單,Grub是file-system sensitive的,能夠識(shí)別常見的文件系統(tǒng)。
initrd文件是怎么生成的?
使用mkinitrd命令,這個(gè)命令其實(shí)是一個(gè)Bash腳本
#file `which mkinitrd`
/sbin/mkinitrd: Bourne-Again shell script text executable
該腳本先建立一個(gè)8M的空文件,并在此上建立一個(gè)文件系統(tǒng),并拷貝相應(yīng)的的文件。 |
|