歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

關於Linux下兩種內存引導模式的區別

1.關於linux下兩種內存引導模式的區別

Linux 的 initrd 技術是一個非常普遍使用的機制,linux2.6 內核的 initrd 的文件格式由原來的文件系統鏡像文件轉變成了 cpio 格式,變化不僅反映在文件格式上, linux 內核對這兩種格式的 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在內的多種介質上,如果將這些設備的驅動都編譯進內核,可以想象內核會多麼龐大、臃腫。

2.Linux2.4內核對 Initrd 的處理流程

為了使讀者清晰的了解Linux2.6內核initrd機制的變化,在重點介紹Linux2.6內核initrd之前,先對linux2.4內核的initrd進行一個簡單的介紹。Linux2.4內核的initrd的格式是文件系統鏡像文件,本文將其稱為p_w_picpath-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 處理流程的一個顯著區別。

Copyright © Linux教程網 All Rights Reserved