zoukankan      html  css  js  c++  java
  • u-boot配置/编译过程

    1. u-boot配置过程

        make xxx.config

       MKCONFIG    := $(SRCTREE)/mkconfig
       export MKCONFIG

     -----》》执行mkconfig

        1).确定开发板名称BOARD_NAME .

          CONFIG_NAME="${1%_config}"
          [ "${BOARD_NAME}" ] || BOARD_NAME="${1%_config}"

        2).创建到平台/开发板相关的头文件的链接

          ln -s ${LNPREFIX}arch-${soc} asm/arch

            ln -s ${LNPREFIX}proc-armv asm/proc

        3).创建顶层Makefile包含的文件include/config.mk

              [ "${vendor}" ] && echo "VENDOR = ${vendor}"
              [ "${soc}"    ] && echo "SOC    = ${soc}"
               exit 0 ) > config.mk

        4).创建开发板板相关的头文件include/config.h

               > config.h        # Create new config file

    2.u-boot编译、连接过程

      1).包含了配置过程中制作出来的config.mk文件,其中定义了ARCH,CPU,BOARD,SOC...

        # load ARCH, BOARD, and CPU configuration
        include $(obj)include/config.mk//作出来的config.mk
        export    ARCH CPU BOARD VENDOR SOC DDR3LIB DDRTYPE   

          # load other configuration
          include $(TOPDIR)/config.mk //包含顶层的config.mk 确定了编译器.编译选项 BOARDDIR LDFLAGS

          config.mk中定义了TEXT_BASE (uboot开始位置)  

        把所有的OBJS 。LIBS所表示的.o,.a文件生成

      # U-Boot objects....order is important (i.e. start must be first)
        OBJS  = $(CPUDIR)/start.o

        .......

        LIBS-y += lib/libgeneric.o
        LIBS-y += lib/lzma/liblzma.o
        LIBS-y += lib/lzo/liblzo.o
        LIBS-y += lib/zlib/libz.o

        

        得到ELF格式的u-boot ,最后转换为二进制格式U-BOOT.bin   LDFLAGS确定连接方式

        UNDEF_LST=`$(OBJDUMP) -x $(LIBBOARD) $(LIBS) |
            sed  -n -e 's/.*($(SYM_PREFIX)_u_boot_list_.*)/-u1/p'|sort|uniq`;
            cd $(LNDIR) && $(LD) $(LDFLAGS) $(LDFLAGS_$(@F))
                $$UNDEF_LST $(__OBJS)
                --start-group $(__LIBS) --end-group $(PLATFORM_LIBS)
                -Map u-boot.map -o u-boot

      在u-boot.lds 代码中 (指定各种段)

      SECTIONS
    {
     . = 0x00000000;
     . = ALIGN(4);
     .text :
     {
      __image_copy_start = .;
      arch/arm/cpu/armv7/start.o (.text*)////start.S为uboot入口
      *(.text*)
     }
     . = ALIGN(4);

    3.总结uboot 编译流程:

              (1)首先编译start.S

              (2)对于平台/开发板相关的每个目录,通用目录都使用它们各自的Makefile生成相应的库 .a .o

              (3)将生成的.a .o ,文件按照comfig.mk文件中指定的代码段起始地址. u-boot.lds连接脚本进行连接

              (4)上一步,得到ELF格式UBOOT,Makefie会把其转换为二进制格式

  • 相关阅读:
    tfs2012服务器搭建报表、门户、TFS权限设置
    遥望星空FTP文件同步工具(附源码)1.0 发布
    TortoiseGit连接gitlab,一直要求输入密码
    static、const、readonly与static readonly的区别与联系
    sql server对并发的处理乐观锁和悲观锁
    asp.net控件开发基础系列
    Sonne的健身日志(15)16周腹肌计划第四周感受
    上海新闻!
    Sonne的健身日志(9)16周腹肌计划第一周(2012.3.92012.3.15)
    Sonne的健身日志(5)
  • 原文地址:https://www.cnblogs.com/yixin-shenda/p/5502274.html
Copyright © 2011-2022 走看看