核心與ramdisk到底是什麼關係

2021-10-01 18:48:12 字數 2252 閱讀 1283

個人notes:

(1)有這個必要嗎? --相當有!不然核心太大!不符「核心」原則。

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

(3)解決該問題所依據的客觀事實:ramdisk根檔案系統也是由bootloader通過低階的讀寫命令載入到記憶體的,因此核心啟動後可以輕鬆掛載記憶體中的ramdisk。

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

問題:

核心與ramdisk到底是什麼關係?系統在啟動的過程中,核心與ramdisk分別扮演什麼角色啊?

我對啟動的過程一直不明白,懂的朋友幫我講講。

謝謝精彩回答:

ramdisk乙個作用就是用來解決boot過程中mount根檔案系統的「先有雞還是先有蛋」的問題的。

一般來說,根檔案系統在形形色色的儲存裝置上,不同的裝置又要不同的硬體廠商的驅動,比如intel的南橋自然需要intel的ide/sata驅動,via的南橋需要via的ide/sata驅動,根檔案系統也有不同的檔案系統的可能,比如ubuntu發行版可能一般用ext3,suse可能就不是了,不同的檔案系統也需要不同的檔案系統模組;假如把所有驅動/模組都編譯進核心(注:即編乙個通用的、萬能的核心),那自然沒問題,但是這樣就違背了「核心」的精神或本質,所以一般來說驅動/模組都駐留在根檔案系統本身上/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。

ps:initrd 是核心啟動的乙個虛擬的磁碟。作用是在 linux 核心啟動時,不直接進入硬碟上的 root 分割槽,而是進入記憶體裡面的虛擬的 root 分割槽。

這個用意是當核心不能直接讀取硬碟時(比如用了核心沒有自帶的驅動的硬碟、分割槽。或者 root 分割槽在網路上)。那麼就可以用 initrd 裡面的驅動來過渡進入正確的 root ,或者乾脆就停在 initrd 模擬的記憶體盤裡面。

核心與ramdisk到底是什麼關係?

假如把所有驅動 模組都編譯進核心 注 即編乙個通用的 萬能的核心 那自然沒問題,但是這樣就違背了 核心 的精神或本質,所以一般來說驅動 模組都駐留在根檔案系統本身上 lib modules 那麼 雞蛋 問題就來了,現在要mount根檔案系統卻需要根檔案系統上的模組檔案,怎麼辦?於是,就想出ramdi...

敏捷到底是什麼?

文 ivar jacobson 在支援軟體工程 比如rational統一過程rup 與敏捷陣營 比如scrum或是xp 之間,人們一直存在著衝突。也不難理解,因為這兩種方法間都是在用著彼此並不相容的方式來描述的。其實大可不必,因為他們背後的觀點全然是相輔相成的。關鍵在於該如何用對兩者來說都公平的方式...

我們到底是什麼?

我們到底是什麼?我們是一種生物電流 生物電流有幾種狀態,喜怒哀樂等,可以根據外部環境進行自我切換 該種生物電流附屬在一種器官硬體上面 我們可以從器官硬體上感知一些資訊,產生新的資訊生物電流,新產生的生物電流符合原先的標準 我們可以把資訊電流儲存在器官硬體上,但具體如何儲存等資訊無法被我們感知 我們的...