zoukankan      html  css  js  c++  java
  • 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个字节作为头信息)。 

  • 相关阅读:
    Linux如何设置时区/时间/上海时间
    Anaconda Python3.7环境 import _ssl DLL load failed(ImportError:DLL load failed:找不到指定模块)
    一行命令搞定/usr/bin/perl^M: bad interpreter
    Embed MP4 in HTML using flash-player(html5 video player)
    mp4文件转码为m3u8
    Python 下载图片的三种方法
    图解MySQL 内连接、外连接、左连接、右连接、全连接……太多了
    DOS批处理中%~dp0表示什么意思
    Android学习探索之App多渠道打包及动态添加修改资源属性
    Android学习探索之运用MVP设计模式实现项目解耦
  • 原文地址:https://www.cnblogs.com/openix/p/2456075.html
Copyright © 2011-2022 走看看