/***********************************************************************************
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