1.什麼是 initrd
initrd 的英文含義是 boot loader initialized ram disk,就是由 boot loader 初始化的記憶體盤。在 linux核心啟動前, boot loader 會將儲存介質中的 initrd 檔案載入到記憶體,核心啟動時會在訪問真正的根檔案系統前先訪問該記憶體中的 initrd 檔案系統。在 boot loader 配置了 initrd 的情況下,核心啟動被分成了兩個階段,第一階段先執行 initrd 檔案系統中的"某個檔案",完成載入驅動模組等任務,第二階段才會執行 真正的根檔案系統中的 /sbin/init 程序。這裡提到的"某個檔案",linux2.6 核心會同以前版本核心的不同,所以這裡暫時使用了"某個檔案"這個稱呼,後面會詳細講到。第一階段啟動的目的是為第二階段的啟動掃清一切障礙,最主要的是載入根檔案系統儲存介質的驅動模組。我們知道根檔案系統可以儲存在包括ide、scsi、usb在內的多種介質上,如果將這些裝置的驅動都編譯進核心,可以想象核心會多麼龐大、臃腫。
initrd 的用途主要有以下四種:
1. linux 發行版的必備部件
linux 發行版必須適應各種不同的硬體架構,將所有的驅動編譯進核心是不現實的,initrd 技術是解決該問題的關鍵技術。linux 發行版在核心中只編譯了基本的硬體驅動,在安裝過程中通過檢測系統硬體,生成包含安裝系統硬體驅動的 initrd,無非是一種即可行又靈活的解決方案。
2. livecd 的必備部件
同 linux 發行版相比,livecd 可能會面對更加複雜的硬體環境,所以也必須使用 initrd。
3. 製作 linux usb 啟動盤必須使用 initrd
usb 裝置是啟動比較慢的裝置,從驅動載入到裝置真正可用大概需要幾秒鐘時間。如果將 usb 驅動編譯進核心,核心通常不能成功訪問 usb 裝置中的檔案系統。因為在核心訪問 usb 裝置時, usb 裝置通常沒有初始化完畢。所以常規的做法是,在 initrd 中載入 usb 驅動,然後休眠幾秒中,等待 usb裝置初始化完畢後再掛載 usb 裝置中的檔案系統。
4. 在 linuxrc 指令碼中可以很方便地啟用個性化 bootsplash。
2.linux2.4核心對 initrd 的處理流程
為了使讀者清晰的了解linux2.6核心initrd機制的變化,在重點介紹linux2.6核心initrd之前,先對linux2.4核心的initrd進行乙個簡單的介紹。linux2.4核心的initrd的格式是檔案系統映象檔案,本文將其稱為image-initrd,以區別後面介紹的linux2.6核心的cpio格式的initrd。 linux2.4核心對initrd的處理流程如下:
1. boot loader把核心以及/dev/initrd的內容載入到記憶體,/dev/initrd是由boot loader初始化的裝置,儲存著initrd。
2. 在核心初始化過程中,核心把 /dev/initrd 裝置的內容解壓縮並拷貝到 /dev/ram0 裝置上。
3. 核心以可讀寫的方式把 /dev/ram0 裝置掛載為原始的根檔案系統。
4. 如果 /dev/ram0 被指定為真正的根檔案系統,那麼核心跳至最後一步正常啟動。
5. 執行 initrd 上的 /linuxrc 檔案,linuxrc 通常是乙個指令碼檔案,負責載入核心訪問根檔案系統必須的驅動, 以及載入根檔案系統。
6. /linuxrc 執行完畢,真正的根檔案系統被掛載。
7. 如果真正的根檔案系統存在 /initrd 目錄,那麼 /dev/ram0 將從 / 移動到 /initrd。否則如果 /initrd 目錄不存在, /dev/ram0 將被解除安裝。
8. 在真正的根檔案系統上進行正常啟動過程 ,執行 /sbin/init。 linux2.4 核心的 initrd 的執行是作為核心啟動的乙個中間階段,也就是說 initrd 的 /linuxrc 執行以後,核心會繼續執行初始化**,我們後面會看到這是 linux2.4 核心同 2.6 核心的 initrd 處理流程的乙個顯著區別。
Linux 2 6核心編譯,核心公升級
本文描述了在fc8下公升級linux核心為2.6.25的詳細步驟.1.首先從如下 得到linux 2.6.25.2.然後在 usr src下untar這個包.tar xjfv linux 2.6.25.tar.bz2 3.配置核心 cd usr src linux 2.6.25 make mrpro...
Linux2 6核心啟動分析
我們已知u boot的終極目的是啟動核心,那麼核心啟動的開始必定是u boot傳入的引數。開啟armlinux.c 發現有一行的 為 thekernel 0,bd bi arch number,bd bi boot params 帶入三個引數 第乙個引數是0,第二個引數是機器id,第三個引數是引數所...
Linux 2 6 核心驅動移植
隨著 linux 2.6的發布,由於2.6核心做了教的改動,各個裝置的 驅動程式在不同程度上要進行改寫。為了方便各位linux愛好者我把自己整理的這分文件share出來。該文當列舉了2.6核心同以前版本的絕大多數變化,可惜的是由於時間和精力有限沒有詳細列出各個函式的用法。1 使用新的入口 必須包含 ...