u-boot配置/编译过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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_.*\)/-u\1/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会把其转换为二进制格式

以上是关于u-boot配置/编译过程的主要内容,如果未能解决你的问题,请参考以下文章

u-boot配置阶段分析

RK356x U-Boot研究所(编译篇)2.1 U-Boot编译过程浅析

Tiny4412 u-boot分析u-boot配置流程分析

uboot之make all执行过程分析

U-boot 移植 ---1u-boot裁剪配置(Kbuild)

U-boot 移植 ---1u-boot裁剪配置(Kbuild)