• 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会把其转换为二进制格式

  • 相关阅读:
    如何实现桌面App图标可以动态显示消息数(类似手机上的QQ图标)?
    Quartz.NET开源作业调度框架系列(五):AdoJobStore保存job到数据库
    Quartz.NET开源作业调度框架系列(四):Plugin Job
    Quartz.NET开源作业调度框架系列(三):IJobExecutionContext 参数传递
    Quartz.NET开源作业调度框架系列(二):CronTrigger
    Quartz.NET开源作业调度框架系列(一):快速入门step by step
    如何在Visual Studio中开发自己的代码生成器插件
    C#如何定制Excel界面并实现与数据库交互
    Ajax+PHP+MySQL 登陆示例
    Tomcat性能优化(二) ExpiresFilter设置浏览器缓存
  • 原文地址:https://www.cnblogs.com/yixin-shenda/p/5502274.html
Copyright © 2020-2023  润新知