走進(jìn)Linux 操作系統(tǒng)
這些工具?! ≡诎惭b的過(guò)程中可以直接編譯一個(gè)整體式的內(nèi)核,但這并不能很好的解決問(wèn)題:首先,所有的編譯工具還 需要,其次,編譯過(guò)程中出現(xiàn)差錯(cuò)導(dǎo)致無(wú)法完成任務(wù)的概率太大了。所以,我們?nèi)匀灰褂媚K機(jī)制:模塊機(jī)制很可靠,出了錯(cuò)誤也只不過(guò)不加載對(duì)應(yīng)的模塊而已,不會(huì)使整個(gè)任務(wù)失敗。而載入模塊,象前 面說(shuō)的,也是在掛載root文件系統(tǒng)之前就要得到模塊的?! 』谝陨侠碛?,linux引入了initrd機(jī)制。initrd做什么 initrd允許系統(tǒng)在啟動(dòng) 的時(shí)候載入一個(gè)ram盤,這個(gè)ram盤可以被當(dāng)作一個(gè)root文件系統(tǒng),程序可以在其上運(yùn)行。(有兩重含義,第一,程序在上面;第二,程序的文件系統(tǒng)環(huán)境也在上 面。)在此之后,可以從別的設(shè)備上掛載一個(gè)新的root文件系統(tǒng),先前的root文件系統(tǒng)(initrd)就會(huì)被移動(dòng)到 一個(gè)目錄上去,最終被卸載掉?! 槭裁匆褂胷am盤呢?首先,使用ram盤能方便的支持以后可能發(fā)生的變化;另外,也是為了保持 boot loader 工作盡可能的簡(jiǎn) 單。在系統(tǒng)引導(dǎo)時(shí),除了內(nèi)核鏡像之外,boot loader把所有相關(guān)的信息作為一個(gè)文件讀入內(nèi)存,內(nèi)核在啟動(dòng)中將該文件作為一段連續(xù)的內(nèi)存塊看待。也就是把 它當(dāng)作ram盤來(lái) 使用了。正因?yàn)槿绱?,這種機(jī)制被稱作“初始 ram 盤 (initial ram disk)”,縮 寫成 initrd?! nitrd主要用來(lái)把系統(tǒng) 的啟動(dòng)劃分為兩個(gè)階段:初始啟動(dòng)的內(nèi)核只需保留最精簡(jiǎn)的驅(qū)動(dòng)程序最小集,此后,在啟動(dòng)必須加載附加的模塊時(shí),從initrd中加載。 initrd進(jìn)行的操作 使用initrd的時(shí)候,典型的 系統(tǒng)啟動(dòng)的流程變?yōu)椋篵oot loader讀入內(nèi)核鏡像以及initrd文件內(nèi)核將initrd文件轉(zhuǎn)成“普通”的ram盤,并且釋放掉initrd文件占用的內(nèi) 存。initrd被當(dāng)作root文件系統(tǒng),以可讀可寫(read-write)方式安裝。/linuxrc被執(zhí)行 (它可以是任何可執(zhí)行文件,包括腳本在內(nèi);它以u(píng)id0身份執(zhí)行,基本上能完成所有init程序可以做的工作)linuxrc安裝“實(shí)際” 的root文件系 統(tǒng)linuxrc通過(guò)pivot_root系統(tǒng)調(diào)用將root文件系統(tǒng)放置在root目錄下。常用的啟動(dòng)流 程(比如調(diào)用/sbin/init)開(kāi)始執(zhí)行。卸載initrd文件系統(tǒng)?! ∽⒁猓@是一個(gè)典型流程。其實(shí)initrd機(jī)制可以通過(guò)兩 種方式使用:要么就是作為一個(gè)普通的root文件系統(tǒng)使用,這樣的話第5、第6兩個(gè)步驟可以被略過(guò),直接執(zhí)行/sbin/init(我 們的試驗(yàn)系統(tǒng)就是利用這種方法);要么作為一個(gè)過(guò)渡環(huán)境使用,通過(guò)它內(nèi)核可以繼續(xù)裝載“實(shí)際”的root文件系統(tǒng)。 |
<< Linux 串口截止閥的分類以及特點(diǎn) >>