612 根目录下vmlinux , compressed下的vmlinux,boot下的Image、zImage

根据arch/unicore/kernel下的连接脚本vmlinux.lds以及hend.S等其他文件生成根目录下的vmlinuxELF格式文件。

quiet_cmd_vmlinux__ ?= LD      $@  

      cmd_vmlinux__ ?= $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) -o $@ \

      -T $(vmlinux-lds) $(vmlinux-init)                          \   

      --start-group $(vmlinux-main) --end-group                  \   

      $(filter-out $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) vmlinux.o FORCE ,$^)

Image以根目录下的vmlinux通过objcopy生成binary格式。

cmd_arch/unicore/boot/Image := unicore32-linux-objcopy -O binary -R .note -R .note.gnu.build-id -R .comment -S  vmlinux   arch/unicore/boot/Image

运用压缩工具gzip将Image进行压缩,生成piggy.gz

cmd_arch/unicore/boot/compressed/piggy.gz := (cat arch/unicore/boot/compressed/../Image | gzip -f -9 > arch/un    icore/boot/compressed/piggy.gz) || (rm -f arch/unicore/boot/compressed/piggy.gz ; false)

 

在compressed目录下有个piggy.S,其中使用了.incbin 将piggy.gz”植入”piggy.S中,而后生成piggy.o

./boot/compressed/Makefile:56:$(obj)/piggy.o:  $(obj)/piggy.gz FORCE

下面两个通过压缩而成的Image和compressed下的head.S(不同于kernel下的head.S)及piggy.o,misc.c生成含有部分被压缩的代码vmlinux(此vmlinux位于compressed目录下,不同于更目录下的vmlinux),运用的连接脚本是compressed目录下的vmlinux.lds(不同于kernel目录下的vmlinux.lds)

$(obj)/compressed/vmlinux: $(obj)/Image FORCE

  $(Q)$(MAKE) $(build)=$(obj)/compressed $@

 

$(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.o \

        $(addprefix $(obj)/, $(OBJS)) FORCE

    $(call if_changed,ld)

    @:

zImage有compressed下的vmlinux使用objcopy生成

cmd_arch/unicore/boot/zImage :=unicore32-linux-objcopy O binary -R .note –R .note.gnu.build-id –R .comment –S arch/unicore/boot/compressed/vmlinux arch/unicore/boot/zImage

uImage通过compressed下的zImage运用 mkimage工具生成。

cmd_arch/unicore/boot/uImage     :=      /bin/bash /home/liuchangcheng/contest_android/kernel/scripts/mkuboot.sh -A unicore -O linux -T kernel -C none -a 0x40808000 -e 0x40808000 -n 'Linux-2.6.32.9' -d arch/unicore/boot/zImage ar    ch/unicore/boot/uImage

 

mkimage的源程序大致看了一下(从tool下的mkimage.c文件开始阅读,而后是头文件中的数据结构,主要是里面有几个数据结构,自己的抽象能力还是不足,struct stat、truct image_type_params、struct mkimage_params还有个头结构,过段时间再看看),我们可以使用hexdump工具看看zImage 与uImage的区别,uImage在zImage前加了64个字节作为头信息)。 

原文地址:https://www.cnblogs.com/openix/p/2456075.html