LinuxのカーネルzImageのは、どのように来ますか?

以下は、ハードウェアs5pv210に基づいて分析しました。

  我々はカーネル実行メイクを構成すると、アーチ/腕/ Makefileであります。

まず、依存関係のvmlinuxを生成するために、このプロセスは、実行後に取得するのvmlinuxを作る、私のエッセイを参照してください(Linuxカーネルのコンパイルは何をすべきかを作ります?):

  $(Q)$(MAKE)$(ビルド)= $(ブート)MACHINE = $(MACHINE)$(ブート)/ $ @ 

  即ます。make -fスクリプト/ Makefile.build OBJ =アーチ/腕/ブートアーチ/腕/ブーツ/ zImageの

次のようにターゲットを見つけることが開きアーチ/腕/ブーツ/ Makefileの:

図は、依存チェーンアーチ/腕/ブートを示し/ zImageのは、次のとおりです。

アーチ/腕/ブーツ/ zImage->アーチ/腕/ブーツ/圧縮/のvmlinux>アーチ/腕/ブーツ/イメージ - >のvmlinux

  1。  のvmlinuxは、生成されました、

  図2は、ターゲット生成するコマンドアーチ/アーム/ブート/イメージ実行アーチ/アーム/ブート/画像を

  3。ブート時に再度行っアーチ/腕コマンド/ /圧縮/のvmlinux目的:

$(Q)$(MAKE)$(ビルド)= $(OBJ)/圧縮$ @

即:-fスクリプト/ Makefile.build OBJ =アーチ/腕/ブーツ/圧縮アーチ/腕/ブーツ/圧縮/のvmlinuxを作ります

オープンアーチ/腕/ブーツ/圧縮/ Makefileを、取得します:

 

其中:suffix_y = gzip  HEAD = head.o  OBJS = misc.o decompress.o  lib1funcs =lib1funcs.o

在arch/arm/boot/compressed/Makefile,找到vmlinux.lds目标:

 

SEDFLAGS = s/TEXT_START/0/;s/BSS_START/ALIGN(4)/

该命令为将在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。

 

おすすめ

転載: www.cnblogs.com/genshu123/p/11210328.html