內核,initrd,ramdisk,關係,用途

轉自:http://www.lupaworld.com/forum.php?mod=viewthread&tid=61425

原名:內核與ramdisk到底是什麼關係?


個人Notes:

      (1)有這個必要嗎? --相當有!不然內核太大!不符“內核”原則。

      (2)作用:“既要內核小,又要內核不帶草”,解決“先有雞還是先有蛋的問題”。

      (3)解決該問題所依據的客觀事實:ramdisk根文件系統也是由bootloader通過低級的讀寫命令加載到內存的,因此內核啓動後可以輕鬆掛載內存中的ramdisk。

      (4)總結:出來“混”,總是要“還”的,只是遲早問題。


問題:

http://linux.chinaunix.net/bbs/archiver/tid-1135273.html

內核與ramdisk到底是什麼關係?系統在啓動的過程中,內核與ramdisk分別扮演什麼角色啊?
我對啓動的過程一直不明白,懂的朋友幫我講講。
謝謝

精彩回答:
ramdisk一個作用就是用來解決boot過程中mount根文件系統的“先有雞還是先有蛋”的問題的。
一般來說,根文件系統在形形色色的存儲設備上,不同的設備又要不同的硬件廠商的驅動,比如intel的南橋自然需要intel的ide/sata驅動,VIA的南橋需要VIA的ide/sata驅動,根文件系統也有不同的文件系統的可能,比如ubuntu發行版可能一般用ext3,suse可能就不是了,不同的文件系統也需要不同的文件系統模塊;假如把所有驅動/模塊都編譯進內核(注:即編一個通用的、萬能的內核),那自然沒問題,但是這樣就違背了“內核”的精神或本質,所以一般來說驅動/模塊都駐留在根文件系統本身上/lib/modules/xxx,那麼“雞蛋”問題就來了,現在要mount根文件系統需要根文件系統上的模塊文件,怎麼辦?於是,就想出ramdisk內核總是能安裝ramdisk的(注:這是因爲ramdisk臨時文件系統和內核一樣,也是由bootloader通過低級讀寫命令(如uboot用nand read,而不用通過文件系統層提供的高級讀寫接口)加載進內存,因此內核可以掛載內存裏ramdisk文件系統),然後把所有可能需要的驅動/模塊都放在ramdisk上首先,讓內核將ramdisk當作根文件系統來安裝,然後再用這個根文件系統上的驅動來安裝真正的根文件系統,就將這個矛盾問題解決了


ramdisk還舉出一個作用,現在的發行版在boot時一般都是圖形界面的,那麼,ramdisk就可以放framebuffer驅動和一些圖片來做這種簡單的動畫。
前一段時間剛好也在研究ramdisk, 下面是我找到的關於ramdisk的資料,希望對樓主有用
在 Linux kernel 2.4 中,initrd 大致的處理流程如下:(方括號表示主要的執行單元)[boot loader] Boot loader 依據預先設定的條件,將 kernel 與 initrd 這兩個 image 載入到 RAM [boot loader -> kernel] 完成必要的動作後,準備將執行權交給 Linux kernel [kernel] 進行一系列初始化動作initrd 所在的記憶體被 kernel 對應爲 /dev/initrd 裝置設備,        透過 kernel 內部的 decompressor (gzip 解壓縮) 解開該內容並複製到 /dev/ram0 裝置設備上 [kernel] Linux 以 R/W (可讀寫) 模式將 /dev/ram0 掛載爲暫時性的 rootfs [kernel-space -> user-space] kernel 準備執行 /dev/ram0 上的 /linuxrc 程式,並切換執行流程 [user space] /linuxrc 與相關的程式處理特定的操作,比方說準備掛載 rootfs 等 [user-space -> kernel-space] /linuxrc 執行即將完畢,執行權轉交給 kernel [kernel] Linux 掛載真正的 rootfs 並執行 /sbin/init 程式 [user space] 依據 Linux distribution 規範的流程,執行各式系統與應用程式 

值得一提的是,以上「兩階段開機」是 initrd 提出的彈性開機流程,在真實的應用中,也可能從未需要掛載真正的 rootfs,換言之,只是把系統當作都在 RAM disk 上運作,或者永遠都在 initrd 所引導執行的 /linuxrc 程序中執行 (注意:kernel 永遠保留 PID=1 作爲 init process 識別,而 /linuxrc 執行的 PID 必非爲 1),在許多裝置如智慧型手機,都是行之有年的,不過這不影響我們後續的探[/quote]
裏邊所說的 initrd 大體上就是指 包含根文件系統的ramdisk


另附IBM專家之--Linux2.6 內核的 Initrd 機制解析

 

http://www.ibm.com/developerworks/cn/linux/l-k26initrd/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章