/**************************************************************************************
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可以实现重复多次编译。