假如把所有驅動/模組都編譯進核心(注:即編乙個通用的、萬能的核心
),那自然沒問題,但是這樣就違背了「核心」的精神或本質,所以一般來說驅動/模組都駐留在根檔案系統本身上/lib/modules/***,那麼「雞蛋」問題就來了,現在要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到底是什麼關係
個人notes 1 有這個必要嗎?相當有!不然核心太大!不符 核心 原則。2 作用 既要核心小,又要核心不帶草 解決 先有雞還是先有蛋的問題 3 解決該問題所依據的客觀事實 ramdisk根檔案系統也是由bootloader通過低階的讀寫命令載入到記憶體的,因此核心啟動後可以輕鬆掛載記憶體中的ram...
敏捷到底是什麼?
文 ivar jacobson 在支援軟體工程 比如rational統一過程rup 與敏捷陣營 比如scrum或是xp 之間,人們一直存在著衝突。也不難理解,因為這兩種方法間都是在用著彼此並不相容的方式來描述的。其實大可不必,因為他們背後的觀點全然是相輔相成的。關鍵在於該如何用對兩者來說都公平的方式...
我們到底是什麼?
我們到底是什麼?我們是一種生物電流 生物電流有幾種狀態,喜怒哀樂等,可以根據外部環境進行自我切換 該種生物電流附屬在一種器官硬體上面 我們可以從器官硬體上感知一些資訊,產生新的資訊生物電流,新產生的生物電流符合原先的標準 我們可以把資訊電流儲存在器官硬體上,但具體如何儲存等資訊無法被我們感知 我們的...