下面对uboot顶层目录下的配置文件config.mk文件进行分析
config.mk源文件截图: config.mk源文件分析:
26行: 判断编译输出目录(OBJTREE)和源码目录(SRCTREE)两个目录是否不相同,不相同则处理下面的命令。
27~30行: 如果当前目录变量和源码目录变量相同,则dir赋值为空,否则,把CURDIR目录中的SRCTREE目录替换成空,即dir为$(CURDIR)去掉$(SRCTREE)的部分。
Makefile中的字符串替换函数 subst 格式:
$(subst < from >;,< to >;,< text >;)
功能:把字串< text >;中的< from >;字符串替换成< to >;。
返回:函数返回被替换过后的字符串。
33行: 如果dir不为空(当前目录不是顶层目录),那么obj等于$(OBJTREE) $(dir)/,否则(当前目录是顶层目录)等于$(OBJTREE)/
34行: 如果dir不为空(当前目录不是顶层目录),那么obj等于$(SRCTREE)/$(dir)/,否则(当前目录是顶层目录)等于$(SRCTREE)/
36行: 创建obj目录。
上面的代码,主要是针对用户自定义输出编译文件的目录设置的。
config.mk源文件截图:
config.mk源文件分析:
63行前面的于arm无关,暂不分析。
63行~70行也和arm没有关系,不分析。浪费感情。
config.mk源文件截图: config.mk源文件分析:
这些代码是和编译器相关的选项。(废话,别人又不是看不见)
config.mk源文件截图: config.mk源文件分析:
97行~107行:
这是一个完整的arm编译工具链列表代号,后面的编译就使用这些符号。
config.mk源文件截图: config.mk源文件分析:
112行: 包含了一个autoconf.mk文件。这个文件也是配置时生成的。它里面是定义的变量,是条件编译的不同的配置值,原来匹配不同的配置项目(或者开发板)。
它的生成是根据目录/include/config/xxx_sd.h(xxx_nand.h)等等文件的配置来生成的。根据这个.h文件里的宏定义生成autoconf.mk文件。这个.h文件对应一个开发板。移植一个uboot到一种开发板,必须配置这.h文件。 autoconf.mk 这个文件非常 重要
115行: 包含了ARCH_config.mk,即arm_config.mk
118行: CPU的config.mk
121行: SOC的config.mk
124~126行: 厂商和对应的开发板相关,具体的是(board/厂商名/开发板名称)这样的一个路径。
129行: 包含这个路径下的这个config.mk配置文件,这个文件内容是一个链接地址,即:TEST_BASE=0Xxxxxxxxx。
config.mk源文件截图: config.mk源文件分析:
144~147行: 是否定义了CONFIG_NAND_U_BOOT(在上面提到的autoconf.mk中定义),链接脚本就选u-boot-nand.lds,否则就选u-boot.lds脚本。
156行: TEXT_BASE,上面提到的链接地址,它是uboot在链接时必须指定的链接地址,注意是虚拟地址,它会对应一个物理地址。
config.mk源文件截图: config.mk源文件分析:
续待…