内核与ramdisk到底是什么关系?
生活随笔
收集整理的這篇文章主要介紹了
内核与ramdisk到底是什么关系?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
假如把所有驅動/模塊都編譯進內核(注:即編一個通用的、萬能的內核),那自然沒問題,但是這樣就違背了“內核”的精神或本質,所以一般來說驅動/模塊都駐留在根文件系統本身上/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。
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。
總結
以上是生活随笔為你收集整理的内核与ramdisk到底是什么关系?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android编译系统分析四:实战-新增
- 下一篇: Linux驱动调试中的Debugfs的使