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

/**************************************************************************************
    2018.10下旬
    针对三星官方为210移植过的uboot和kernel内Makefile的分析
/*****************************************************************************************

重点:CROSS_COMPILE,环境变量(路径)+交叉编译工具链的前缀  (7) 

1.***uboot的版本配置信息:
    VERSION = 1   
    PATCHLEVEL = 3
    SUBLEVEL = 4
    EXTRAVERSION =
    U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
    
2.***在根目录下的include内创建了一个宏。编译之后生成。    
    VERSION_FILE = $(obj)include/version_autogenerated.h
    

3.***环境变量的设置    
    HOSTARCH := $(shell uname -m | \
    ............
    HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
            sed -e 's/\(cygwin\).*/cygwin/')
    export    HOSTARCH 
    

4.***实现静默编译    
    ifeq (,$(findstring s,$(MAKEFLAGS)))
    XECHO = echo
    else
    XECHO = :
    endif
    
5.***三个重要的参数:OBJTREE,SRCTREE,TOPDIR
    OBJTREE:编译之后.o文件的存放位置。
    在默认编辑的情况下OBJTREE等于当前目录,在o=xx编译下,OBJTREE是我们设置的输出目录
    SRCTREE:源码目录,也就是uboot的根目录目录,当前目录。
    TOPDIR:被赋值于SRCTREE,是uboot的根目录目录,当前目录。

6.***两个重要的环境变量:
    ARCH:当前编译目标的CPU架构。  126    
    CROSS_COMPILE:交叉编译工具链的前缀,由于不同CPU架构的交叉编译工具链之间只是前缀的不同,将前缀用环境变量单独设置,保证了uboot的可移植性。  136
    CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
    =后面就是交叉编译工具链的储存位置。
    
7.***5个与板子信息有关的环境变量:
    ARCH CPU BOARD VENDOR SOC    
    具体的定义在smdkv210onenand_config : unconfig   2597
    
8.***CROSS_COMPILE定义交叉编译工具链的前缀。在不停的CPU架构下的交叉编译工具链前缀都不相同
    后缀一样,将前后缀分开可以实现移植的目的。

    
9.***include $(TOPDIR)/config.mk  (169)
    引用了主目录下一个config.mk文件夹,文件夹内具体的说明了其应用。
    其中以下定义了一些交叉编译工具链:
    
    在config.mk中有一个TEXT_BASE,是我们将来整个uboot链接时指定的链接地址
    
    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
    这个文件就是用来指导整个uboot的编译过程,这个文件的内容其实就是很多的CONFIG开头的宏,这些宏会影响我们uboot的编译过程。
    这个文件产生于源代码根目录下的include/configs/xxx.h头文件。此config目录下包括了各个版本开发板的全部头文件。在移植的时候,只要是将对应的头文件留下,并作出相应的修改。这些配置是我们移植的关键所在。
    
    编译链接的一个脚本链接在根目录下的u-boot.lds
    config.mk内的TEXT_BASE是整个uboot链接时指定的链接地址。而这个地址是一个虚拟地址映射,具体的地址取决于uboot中的虚拟地址映射关系。
    

***整个Makefile的第一个主目标:
    291行:all:        $(ALL)
    
    smdkc110n_mtd_config :    unconfig
    即我们进行编译时,make只是编译其中的个别目标。而这个目标在2558行有着具体的解释。    而这个目标在2558行有着具体的解释。同时他也依赖于前面的unconfig这个目标,使得uboot可以实现重复多次编译。
    
    
    
    
    
    
    
    
    
    
    
    
    
    

猜你喜欢

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