uboot移植之配置编译过程详解2

/***********************************************************************************    
        2018.11月
        作者:刘钰
        注:以uboot\u-boot-samsung-dev为分析对象

      config.mk的前世今生:
****************************************************************************************/
    

    1.config.mk在mkconfig中被创建
        Create include file for Make
        echo "ARCH   = $2" >  config.mk
        echo "CPU    = $3" >> config.mk
        echo "BOARD  = $4" >> config.mk
    
    2.在Makefile中被引用。
        # load other configuration
        include $(TOPDIR)/config.mk
        
    3.config.mk在配置执行过程中在根目录下生成了一个autoconfig.mk文件
        # Load generated board configuration
        sinclude $(OBJTREE)/include/autoconf.mk
        此文件很多内容是“CONFIG_”开头的宏,它的作用就是用来指导整个uboot的编译过程。
    这个文件不是凭空产生的,配置过程也是需要原材料来产生这个文件的。原材料在源码目录的inlcude/configs/xxx.h头文件。(行x210开发板中为include/configs/smdk2410.h)。这个h头文件里面全都是宏定义。每一个开发板的移植都对应这个目录下的一个头文件,这个头文件里每一个宏定义都是移植uboot的关键所在。

    4.config.mk一些关于编译选项的设置:
        CROSS_COMPILE:环境变量(路径)+交叉编译链的前半部分
    
    下面具体的定义了CROSS_COMPILE:
        export    CONFIG_SHELL HPATH HOSTCC HOSTCFLAGS CROSS_COMPILE \
        AS LD CC CPP AR NM STRIP OBJCOPY OBJDUMP \
        MAKE
        export    TEXT_BASE PLATFORM_CPPFLAGS PLATFORM_RELFLAGS CPPFLAGS CFLAGS AFLAGS
        
        ifeq ($(ARCH),arm)
        ifeq ($(CROSS_COMPILE),powerpc-netbsd-)
        PLATFORM_CPPFLAGS+= -D__ARM__
        endif
        ifeq ($(CROSS_COMPILE),powerpc-openbsd-)
        PLATFORM_CPPFLAGS+= -D__ARM__
        endif
        endif
        
    导出的环境变量:
        # Include the make variables (CC, etc...)
        AS    = $(CROSS_COMPILE)as
        LD    = $(CROSS_COMPILE)ld
        CC    = $(CROSS_COMPILE)gcc
        CPP    = $(CC) -E
        AR    = $(CROSS_COMPILE)ar
        NM    = $(CROSS_COMPILE)nm
        LDR    = $(CROSS_COMPILE)ldr
        STRIP    = $(CROSS_COMPILE)strip
        OBJCOPY = $(CROSS_COMPILE)objcopy
        OBJDUMP = $(CROSS_COMPILE)objdump
        RANLIB    = $(CROSS_COMPILE)RANLIB
        
     
    5.config.mk指定对应板子配置试的链接脚本
        ifeq ($(CONFIG_NAND_U_BOOT),y)
        LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds
        else
        LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds
        endif
    如果定义了CONFIG_NAND_U_BOOT宏,则链接脚本叫u-boot-nand.lds,如果未定义这个宏则链接脚本叫u-boot.lds。我们在分析uboot的编译链接过程时就要考虑u-boot.lds这个链接脚本。
    
    6.定义了整个uboot链接时指定的链接地址:TEXT_BASE
        ifneq ($(TEXT_BASE),)
        CPPFLAGS += -DTEXT_BASE=$(TEXT_BASE)
        endif
 

猜你喜欢

转载自blog.csdn.net/qq_41464499/article/details/84339218