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