OBJTREE、SRCTREE、TOPDIR
(1)OBJTREE:编译过后的.o文件存放的目录的根目录。默认情况下输出到此目录,但是在用O=xxx这种形式指定过的时候输出的就不是这个目录而是指定的目录了。
(2)SRCTREE:源码目录,其实就是源代码的根目录,也就是当前目录。
总结:默认情况下这2个目录相等,源码目录就等于目标目录,但是在用O=xxx指定后源码目录就不等于目标目录了。Makefile中定义这2个变量其实就是为了记录.o文件往哪里放,就是为了实现O=xxx这种方式的。
MKCONFIG := $(SRCTREE)/mkconfig
Makefile中定义的一个变量,它的值就是源码目录下面的mkconfig,在这里定义在后面使用。这个mkconfig是一个脚本,这个脚本就是uboot配置阶段的配置脚本。
ifneq ($(OBJTREE),$(SRCTREE))
obj := $(OBJTREE)/
src := $(SRCTREE)/
else
obj :=
src :=
endif
export obj src
如果OBJTREE和SRCTREE不相等,则obj就等于OBJTREE所定义的目录,src就等于SRCTREE所定义的目录。否则为空。说白了就是obj就是编译后的文件存放的目录。
ifeq ($(ARCH),powerpc)
ARCH = ppc
endif
如果ARCH等于powerpc那么ARCH赋值为ppc。
include $(obj)include/config.mk
(3)因为前面我们已经说过了没有指定编译输出目录的情况下就是在当前目录下面编译,所以obj就等于当前目录,所以 $(obj)include/config.mk其实就是当前目录里面include/config.mk,该文件不是源码自带的,在没有配置过的uboot中是找不到的,要在配置过程中才会生成这个文件,执行make x210_sd_config ,因此这个文件的值和我们配置过程有关,是由配置过程根据我们的配置自动生成的。
(4)配置过后在include目录下面产生一个config.mk的文件,文件的内容为:
ARCH = arm
CPU = s5pc11x
BOARD = x210
VENDOR = samsung
SOC = s5pc110
实际上config.mk文件里面也只有这些内容。
export ARCH CPU BOARD VENDOR SOC
导出了这5个变量作为环境变量,之所以不直接给出这5个环境变量的值,是因为我们希望这5个值是可以被人很容易的、集中的配置的。他们的值是在Makefile中配置的,在主Makefile的2589行,内容:
x210_sd_config : unconfig
@$(MKCONFIG) $(@:_config=) arm s5pc11x x210 samsung s5pc110
@echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/x210/config.mk
这里的配置值来自于以上代码的配置项。如果我们要更改这里的某个配置值要到此处调用MKCONFIG脚本传参时的参数。
阅读(851) | 评论(0) | 转发(0) |