===主要分析主makefile的调用的makefile -> config.mk文件 ===
调用uboot根目录下的config.mk进行编译:
注意:在include目录下也有个config.mk文件(该文件是在配置后生成的 make NAME_config),而根目录下的config.mk是本来就有的。
是用于主makefile调用的
在根目录下的config.mk是
打开它 首先看编译工具定义:如图:(config.mk)
将CROSS_COMPILE导出后结合后面的词汇定义成完整的交叉编译链
接着,我们继续看config.mk文件,导入autoconf.mk:如图:
autuconf.mk是一些通用的配置选项,他决定了makefile的编译走向。他也是在make NAME_config配置后生成的。
其目录在include/autoconf.mk(默认编译时)如图:
打开它可以看到是给一些uboot中的宏赋值,就是uboot中会条件编译,这就是个配置他的文件:内容如图:
y表示选中 “xxx”表示字符串赋值。
SO 这个文件autoconf.mk是如何生成的呢???看下么:
这个文件的生成也是要原材料才能生成的,而这个原材料解释在include/configs/xxx.h头文件 我用的x210就是在include/configs/x210_sd.h,
在这个include/configs目录下原始的uboot其实是有很多xyzxxx.h文件的每个.h文件其实就是对应一个开发板的,如图:
而我们的是x210_sd.h 如图:
这里面本来是有很多.h文件的 但是你在移植时可以删掉没用的 比如x210有nand和inand的,而我们是inand的 所以是x210_sd.h
打开x210_sd.h可以看到其实就是一些宏 刚才那个autoconf.mk里面的那些宏其实就是这里来的,只不过从里面提取一些必要的然后生成他。
其内容可以自己打开看看 这里就不贴图了。
接下来是导入不同文件夹下必要的config.mk文件。如下:
在接下来就是链接脚本以及链接选项的指定:如下:
这里可以打开autoconf.mk文件查看有没有宏CONFIG_NAND_U_BOOT的定义 显然是没有的,所以执行else分支:
其指定了链接脚本的文件在$(TOPDIR)/board/$(BOARDDIR)/u-boot.lds 我们就是根目录下的board/samsung/x210/u-boot.lds,如图:
TEXT_BASE解析:(uboot链接时 指定的 链接地址)
他不是事先写好的 是在make NAME_config配置是生成的 ,其线索如下图所示:
所以在目录/board/samsung/x210/config.mk 如图所示
其内容就是指定链接地址 如图:
这个地址不是实际的物理地址 因为uboot使用了虚拟内存映射 实际的地址分析代码的时候可以看到!
最后 可以看到config.mk文件的最后一段是 自动推导的过程 这个就不分析了 和我们裸机里面的makefile一样 如下图