天天看點

嵌入式Linux的核心鏡像生成過程嵌入式Linux的核心鏡像生成過程

嵌入式Linux的核心鏡像生成過程

最近讀了《embedded linux primer》,裡面講到了Linux核心鏡像的生成過程。

感覺在這方面算是講的比較好的。在這裡翻譯一下。

頂層目錄的vmlinux

配置好交叉編譯環境後,就可以以開始準備編譯核心了。

首先需要編譯生成核心頭檔案,然後開始編譯核心。核心編譯完成後,會在

頂層目錄生成vmlinux ELF檔案。

這個vmlinux檔案包含整個核心代碼,包括注釋,調試符号資訊等。

piggy.o

piggy.o是包含經過壓縮的核心代碼的object檔案。piggy.o主要是為了友善與其他object檔案

連結生成最終Linux核心鏡像檔案。

生成piggy.o檔案主要包含:

  • 利用objcopy去掉vmlinux的一些輔助資訊,生成鏡像檔案Image。
  • 利用gzip将Image壓縮成piggy.gz。
  • 利用asm編譯piggy.gzip.S生成piggy.o。

到此核心二進制鏡像制作完成。

Bootstrap Loader

許多CPU架構都設計成通過兩個階段來加載Linux核心鏡像。第一階段為BootLoader,

第二階段為Bootstrap Loader。每個階段都有各自的設計目的。

Bootstrap Loader主要提供檢查核心鏡像完整性,解壓核心鏡像,核心鏡像重定位功能。

Bootstrap Loader主要包括:

  • misc.o 核心解壓,重定位相關代碼。
  • head.o CPU啟動相關底層代碼。配置cache,建立C運作環境等。
  • 其他.o

另一個vmlinux

将Bootstrap Loader和piggy.o連結成vmlinux。這個vmlinux在/arch/arm/boot/compressed/

目錄下。

zImage

使用objcpoy将剛剛提到的vmlinux打包成Boot Loader需要的zImage檔案。

結束

把之前的過程總結為下圖:

嵌入式Linux的核心鏡像生成過程嵌入式Linux的核心鏡像生成過程

繼續閱讀