内核与ramdisk到底是什么关系?
生活随笔
收集整理的這篇文章主要介紹了
内核与ramdisk到底是什么关系?
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
假如把所有驅(qū)動/模塊都編譯進內(nèi)核(注:即編一個通用的、萬能的內(nèi)核),那自然沒問題,但是這樣就違背了“內(nèi)核”的精神或本質(zhì),所以一般來說驅(qū)動/模塊都駐留在根文件系統(tǒng)本身上/lib/modules/xxx,那么“雞蛋”問題就來了,現(xiàn)在要mount根文件系統(tǒng)卻需要根文件系統(tǒng)上的模塊文件,怎么辦?于是,就想出ramdisk,內(nèi)核總是能安裝ramdisk的(注:這是因為ramdisk臨時文件系統(tǒng)和內(nèi)核一樣,也是由bootloader通過低級讀寫命令(如uboot用nand read,而不用通過文件系統(tǒng)層提供的高級讀寫接口)加載進內(nèi)存,因此內(nèi)核可以掛載內(nèi)存里ramdisk文件系統(tǒng)),然后把所有可能需要的驅(qū)動/模塊都放在ramdisk上,首先,讓內(nèi)核將ramdisk當作根文件系統(tǒng)來安裝,然后再用這個根文件系統(tǒng)上的驅(qū)動來安裝真正的根文件系統(tǒng),就將這個矛盾問題解決了
?
ramdisk還舉出一個作用,現(xiàn)在的發(fā)行版在boot時一般都是圖形界面的,那么,ramdisk就可以放framebuffer驅(qū)動和一些圖片來做這種簡單的動畫。
前一段時間剛好也在研究ramdisk, 下面是我找到的關(guān)于ramdisk的資料,希望對樓主有用
在 Linux kernel 2.4 中,initrd 大致的處理流程如下:(方括號表示主要的執(zhí)行單元)[boot loader]?Boot loader 依據(jù)預(yù)先設(shè)定的條件,將 kernel 與 initrd 這兩個 image 載入到 RAM?[boot loader -> kernel]?完成必要的動作后,準備將執(zhí)行權(quán)交給 Linux kernel?[kernel] 進行一系列初始化動作,initrd 所在的記憶體被 kernel 對應(yīng)為 /dev/initrd 裝置設(shè)備,? ?? ???透過?kernel 內(nèi)部的 decompressor?(gzip 解壓縮)?解開該內(nèi)容并複製到 /dev/ram0 裝置設(shè)備上?[kernel]?Linux 以 R/W (可讀寫) 模式將 /dev/ram0 掛載為暫時性的 rootfs?[kernel-space -> user-space]?kernel 準備執(zhí)行 /dev/ram0 上的 /linuxrc 程式,并切換執(zhí)行流程?[user space]?/linuxrc 與相關(guān)的程式處理特定的操作,比方說準備掛載 rootfs 等?[user-space -> kernel-space] /linuxrc 執(zhí)行即將完畢,執(zhí)行權(quán)轉(zhuǎn)交給 kernel?[kernel]?Linux 掛載真正的 rootfs 并執(zhí)行 /sbin/init 程式?[user space]?依據(jù) Linux distribution 規(guī)范的流程,執(zhí)行各式系統(tǒng)與應(yīng)用程式?
值得一提的是,以上「兩階段開機」是 initrd 提出的彈性開機流程,在真實的應(yīng)用中,也可能從未需要掛載真正的 rootfs,換言之,只是把系統(tǒng)當作都在 RAM disk 上運作,或者永遠都在 initrd 所引導(dǎo)執(zhí)行的 /linuxrc 程序中執(zhí)行 (注意:kernel 永遠保留 PID=1 作為 init process 識別,而 /linuxrc 執(zhí)行的 PID 必非為 1),在許多裝置如智慧型手機,都是行之有年的,不過這不影響我們后續(xù)的探[/quote]
里邊所說的?initrd 大體上就是指 包含根文件系統(tǒng)的ramdisk。
ramdisk還舉出一個作用,現(xiàn)在的發(fā)行版在boot時一般都是圖形界面的,那么,ramdisk就可以放framebuffer驅(qū)動和一些圖片來做這種簡單的動畫。
前一段時間剛好也在研究ramdisk, 下面是我找到的關(guān)于ramdisk的資料,希望對樓主有用
在 Linux kernel 2.4 中,initrd 大致的處理流程如下:(方括號表示主要的執(zhí)行單元)[boot loader]?Boot loader 依據(jù)預(yù)先設(shè)定的條件,將 kernel 與 initrd 這兩個 image 載入到 RAM?[boot loader -> kernel]?完成必要的動作后,準備將執(zhí)行權(quán)交給 Linux kernel?[kernel] 進行一系列初始化動作,initrd 所在的記憶體被 kernel 對應(yīng)為 /dev/initrd 裝置設(shè)備,? ?? ???透過?kernel 內(nèi)部的 decompressor?(gzip 解壓縮)?解開該內(nèi)容并複製到 /dev/ram0 裝置設(shè)備上?[kernel]?Linux 以 R/W (可讀寫) 模式將 /dev/ram0 掛載為暫時性的 rootfs?[kernel-space -> user-space]?kernel 準備執(zhí)行 /dev/ram0 上的 /linuxrc 程式,并切換執(zhí)行流程?[user space]?/linuxrc 與相關(guān)的程式處理特定的操作,比方說準備掛載 rootfs 等?[user-space -> kernel-space] /linuxrc 執(zhí)行即將完畢,執(zhí)行權(quán)轉(zhuǎn)交給 kernel?[kernel]?Linux 掛載真正的 rootfs 并執(zhí)行 /sbin/init 程式?[user space]?依據(jù) Linux distribution 規(guī)范的流程,執(zhí)行各式系統(tǒng)與應(yīng)用程式?
值得一提的是,以上「兩階段開機」是 initrd 提出的彈性開機流程,在真實的應(yīng)用中,也可能從未需要掛載真正的 rootfs,換言之,只是把系統(tǒng)當作都在 RAM disk 上運作,或者永遠都在 initrd 所引導(dǎo)執(zhí)行的 /linuxrc 程序中執(zhí)行 (注意:kernel 永遠保留 PID=1 作為 init process 識別,而 /linuxrc 執(zhí)行的 PID 必非為 1),在許多裝置如智慧型手機,都是行之有年的,不過這不影響我們后續(xù)的探[/quote]
里邊所說的?initrd 大體上就是指 包含根文件系統(tǒng)的ramdisk。
總結(jié)
以上是生活随笔為你收集整理的内核与ramdisk到底是什么关系?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android编译系统分析四:实战-新增
- 下一篇: Linux驱动调试中的Debugfs的使