linux文件系統初始化過程(3)---加載initrd(上)

1、目的

 

    本文主要講述linux3.10文件系統初始化過程的第二階段:加載initrdlinux

    initrd是一個臨時文件系統,由bootload負責加載到內存中,裏面包含了基本的可執行程序和驅動程序。在linux初始化的初級階段,它提供了一個基本的運行環境。當成功加載磁盤文件系統後,系統將切換到磁盤文件系統並卸載initrdubuntu

    若是是嵌入式設備,那麼最終的文件系統就是initrd工具

 

 

2、cpio文件格式

 

    initrd經常使用的的文件格式是cpiocpio格式記錄了文件系統的結構和內容。spa

    cpio格式具體定義如圖1所示:.net

    cpio格式的文件由段組成,最後一個段比較特殊,文件名爲」TRAILER!!!」。code

    每一個段都由文件頭、文件名和文件體組成;文件名和文件體的長度由文件頭中的name_lenbody_len指定,而且文件名和文件體須要按指定字節對齊,因此尾部包含padding。blog

    文件頭共110個字節,頭6個字節固定爲070701,剩下字節的含義分別爲:索引節點號、文件模式、用戶id、組id、連接數、時間戳、文件體長度、主設備號、次設備號、設備號、文件名長度、保留字段。索引

    其餘詳細狀況請參見init/initramfs.c文件,這裏再也不描述。ip


                                                   圖1內存

 

 

3、initrd文件實例

 

    爲了更直觀的理解cpio格式的initrd文件,下面看一個實例。

    在ubuntu環境中,boot目錄下存放着通過壓縮的cpio格式文件initrd

    將boot目錄下的initrd文件拷貝到任意目錄下,重名爲爲initrd.gz,而且使用gunzip解壓。

    這樣咱們就獲得了一個cpio格式的initrd文件,使用vi查看文件內容如圖2所示(因爲文件太大,只展現了部份內容)

    簡單分析後顯示該文件包含了script/nfs-top目錄、script/nfs-top/ORDER文件、script/nfs-top/udev文件、run目錄、標誌cpio結束的TRAILER!!!文件。


                                                          圖2

 

 

4、解壓initrd文件

 

    initrd通過gunzip解壓後,可使用cpio工具解壓cpio格式的文件。命令以下:

 

[cpp]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
 
  1. root: cpio-idmv < initrd  

 

    解壓成功後,使用ls命令查看initrd文件內容如圖3所示:

    binsbin目錄下包含基本的可執行程序;confetc目錄下是配置文件;lib目錄下是可執行程序使用的動態庫;scripts目錄下是腳本程序;init程序。initrd必須提供一個init程序,linux在加載完initrd後,會跳轉到init程序,由init程序負責後面的初始化工做。

                            圖3

 

 

5、總結

 

    本文詳細介紹了cpio格式的initrd文件,以及解壓後各個目錄的含義。initrd文件系統提供了init程序,在linux初始化階段的後期會跳轉到init程序,由該程序負責加載驅動程序和掛載磁盤文件系統以及其餘的初始化工做。

相關文章
相關標籤/搜索