uboot顶层目录(根目录)下的config.mk解析

该文件在主Makefile中的第185行被包含,如下:

# load other configuration
include $(TOPDIR)/config.mk

1. 编译工具定义(94 ~ 107行)

#
# 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

2. 包含开发板配置项(112行)

# Load generated board configuration
sinclude $(OBJTREE)/include/autoconf.mk

(1)autoconf.mk文件不会源代码提供的,是在配置过程中自动生成的。

(2)该文件的作用是指导uboot的编译过程。该文件里面的内容是以CONFIG_开头的宏,这些宏会影响uboot的编译过程(其实就是条件编译)。

在uboot代码中的很多地方使用条件编译进行编写,这里的条件编译时用来可移植性的。

(3)这个文件是根据include/configs/xxx.h头文件的内容生成的。x210开发板对应的头文件是x210_sd.h,在这个.h头文件中,全部都是宏定义,这些宏定义就代表了对x210开发板的移植。每一个开发板的移植对应include/configs目录下的一个头文件,而对应的头文件中全部都是宏定义,因此配置头文件中的这些宏定义就是移植uboot的关键所在。

3. 链接脚本(142 ~ 149行)

ifndef LDSCRIPT
#LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds.debug
ifeq ($(CONFIG_NAND_U_BOOT),y)
LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds
else
LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds
endif
endif

如果定义了CONFIG_NAND_U_BOOT宏,则使用u-boot-nand.lds这个链接脚本;如果未定义,使用u-boot.lds这个链接脚本。

4. TEXT_BASE(156 ~ 158行)

ifneq ($(TEXT_BASE),)
CPPFLAGS += -DTEXT_BASE=$(TEXT_BASE)
endif

(1)在Makefile中配置x210开发板时,在board/samsung/x210目录下生成了一个文件config.mk,这个文件中的内容就是:

TEXT_BASE = 0xc3e00000

相当于定义了一个变量TEXT_BASE,它的内容是0xC3E00000。

(2)TEXT_BASE是整个uboot链接时指定的链接地址。由于在uboot中启用了虚拟地址映射,因此0xC3E00000这个地址就等于0x23E00000。

5. 自动推到规则(239 ~ 256行)

ifndef REMOTE_BUILD

%.s:	%.S
	$(CPP) $(AFLAGS) -o $@ $<
%.o:	%.S
	$(CC) $(AFLAGS) -c -o $@ $<
%.o:	%.c
	$(CC) $(CFLAGS) -c -o $@ $<

else

$(obj)%.s:	%.S
	$(CPP) $(AFLAGS) -o $@ $<
$(obj)%.o:	%.S
	$(CC) $(AFLAGS) -c -o $@ $<
$(obj)%.o:	%.c
	$(CC) $(CFLAGS) -c -o $@ $<
endif

该部分内容可以参考《跟我一切学Makefile》。

猜你喜欢

转载自blog.csdn.net/linuxweiyh/article/details/84674349
今日推荐