- 论坛徽章:
- 0
|
回复 1# jtou100
既然你已经知道start.S中的宏是在config/xxx.h中定义的,那就容易给你讲解清楚了。
首先,start.S也包含了对应的头文件:
这个,你查看start.S中,即可找到。
而对应的config/xxx.h中的内容,包含在此config.h中。
再来解释config.h是哪里来的。:
以TQ2440为例,正常的编译流程是:
- make EmbedSky_config
- make
复制代码 其中,第一步:
是生成对应的配置,这你应该也知道的。
其内部处理流程,就是对应着根目录下makefile中的:
- EmbedSky_config : unconfig
- @$(MKCONFIG) $(@:_config=) arm arm920t EmbedSky NULL s3c24x0
复制代码 其中MKCONFIG是根目录下的mkconfig,其是一个脚本,脚本的作用是配置对应的变量,最后生成对应的config.h头文件,即我们上面所说的被start.S所包含的那个头文件。
先说一下,上面的$(@:_config=) 的含义是,把@中的_config删除掉,而@就是EmbedSky_config,所以,处理后的结果是EmbedSky,也就是传入mkconfig的第一个参数,是EmbedSky,即我们开发板的名字。
然后再来看mkconfig脚本,其最后几行是:
-
- #
- # Create board specific header file
- #
- if [ "$APPEND" = "yes" ] # Append to existing config file
- then
- echo >> config.h
- else
- > config.h # Create new config file
- fi
- echo "/* Automatically generated - do not edit */" >>config.h
- echo "#include <configs/$1.h>" >>config.h
复制代码
即先判断是否是append,如果不是,则新生成一个config.h文件,
然后想里面写入一行警告信息:/* Automatically generated - do not edit */
再把对应的config/$1.h写入到此config.h中。
而其中$1,表示传入mkconfg脚本时候,第一个参数,此处即EmbedSky,所以就是把configs/EmbedSky.h加到config.h中。
至此,你应该看懂了吧。
再简单总结一下
【start.S中的宏,即属于config/BOARD_NAME.h中的宏,是如何传入到start.S中去的】
其实只是因为start.S包含了config.h文件,而config.h中包含了configs/BOARD_NAME.h而已。
【关于config.h】
而config.h头文件,是在make BOARD_NAME去配置开发板的时候,makefile调用mkconfig自动生成的,
生成过程中,把对应的#include <configs/BOARD_NAME.h>加入到了config.h中。
所以,start.S中,才可以使用configs/BOARD_NAME.h中的宏的。 |
|