以下內容基於s5pv210硬體進行分析
當我們配置好核心後執行make,在arch/arm/makefile中有:
首先要生成依賴vmlinux,這個過程請參考我的隨筆(linux核心編譯make做了什麼?),得到vmlinux後make會執行:
$(q)$(make) $(build)=$(boot) machine=$(machine) $(boot)/$@
即:make -f scripts/makefile.build obj=arch/arm/boot arch/arm/boot/zimage
開啟arch/arm/boot/makefile找到該目標如下:
由上圖可知arch/arm/boot/zimage的依賴關係鏈為:
arch/arm/boot/zimage->arch/arm/boot/compressed/vmlinux>arch/arm/boot/image->vmlinux
1.vmlinux已經生成,
2. 接著執行arch/arm/boot/image目標下的命令即可生成arch/arm/boot/image,
3. 再接著執行arch/arm/boot/compressed/vmlinux目標下的命令:
$(q)$(make) $(build)=$(obj)/compressed $@
即:make -f scripts/makefile.build obj=arch/arm/boot/compressed arch/arm/boot/compressed/vmlinux
開啟arch/arm/boot/compressed/makefile,得到:
其中:suffix_y = gzip head = head.o objs = misc.o decompress.o lib1funcs =lib1funcs.o
在arch/arm/boot/compressed/makefile,找到vmlinux.lds目標:
該命令為將在arch/arm/boot/compressed/vmlinux.lds.in作為輸入產生arch/arm/boot/compressed/vmlinux.lds,該命令的原理不做分析。
在arch/arm/boot/compressed/makefile,找到arch/arm/boot/compressed/piggy.gzip.o目標:
先執行$(call if_changed,$(suffix_y)),即$(call if_changed,gzip),
if_changed是執行引數gzip命令的函式位於scripts/kbuild.include,而gzip命令定義位於scripts/makefile.lib,如下:
該命令意思是將依賴集合中的force出去,剩餘的arch/arm/boot/image通過cat傳給gzip生成piggy.gzip為image的壓縮檔案
piggy.gzip.o head.o misc.o decompress.o lib1funcs.o由makefile.build以及所包含的makefile的下匹配規則產生。
最後回到arch/arm/boot/compressed/vmlinux目標下執行:$(call if_changed,ld)鏈結後成功得到arch/arm/boot/compressed/vmlinux
4. 回到arch/arm/boot/makefile/zimage執行命令:$(call if_changed,objcopy)得到zimage
總結:
簡單的說,根目錄下編譯得到的vmlinux核心先生成image檔案,用gzip工具將image壓縮成piggy.gzip並且被包含到piggy.s中。通過編譯生成的head.o,piggy.gzip.o,misc.o...鏈結成新的vmlinux,最後用objdump工具得到zimage。
Linux學習之zImage核心映象解壓過程詳解
zimage核心映象解壓過程詳解 本文以linux 2.6.14核心在s3c2410平台上執行為例,講解核心的解壓過程。核心編譯完成後會生成zimage核心映象檔案。關於bootloader載入zimage到核心,並且 跳轉到zimage開始位址執行zimage的過程,相信大家都很容易理解。但對於z...
zImage核心映象解壓過程詳解
在華清遠見教學過程中,發現很多學員對核心映象解壓過程比較感興趣,但網上相關的文章往往不能把關鍵問題講清楚,所以寫了這篇文章。本文以linux 2.6.14核心在s3c2410平台上執行為例,講解核心的解壓過程。核心編譯完成後會生成zimage核心映象檔案。關於bootloader載入zimage到核...
zImage核心映象解壓過程詳解
在華清遠見教學過程中,發現很多學員對核心映象解壓過程比較感興趣,但網上相關的文章往往不能把關鍵問題講清楚,所以寫了這篇文章。本文以linux 2.6.14核心在s3c2410平台上執行為例,講解核心的解壓過程。核心編譯完成後會生成zimage核心映象檔案。關於bootloader載入zimage到核...