下面分析命令“make TQ2440_config”执行过程,为了简化分析过程这里主要分析将编译目标输出到源代码目录的情况。
- TQ2440_config : unconfig
- @$(MKCONFIG) $(@:_config=) arm arm920t TQ2440 samsung s3c24x0
TQ2440_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t TQ2440 samsung s3c24x0
其中的依赖“unconfig”定义如下:- unconfig:
- @rm -f $(obj)include/config.h $(obj)include/config.mk \
- $(obj)board/*/config.tmp $(obj)board/*/*/config.tmp \
- $(obj)include/autoconf.mk $(obj)include/autoconf.mk.dep
unconfig:
@rm -f $(obj)include/config.h $(obj)include/config.mk \
$(obj)board/*/config.tmp $(obj)board/*/*/config.tmp \
$(obj)include/autoconf.mk $(obj)include/autoconf.mk.dep
其中“@”的作用是执行该命令时不在shell显示。“obj”变量就是编译输出的目录,因此“unconfig”的作用就是清除上次执行make *_config命令生成的配置文件(如include/config.h,include/config.mk等)。
$(MKCONFIG)在上面指定为“$(SRCTREE)/mkconfig”。$(@:_config=)为将传进来的所有参数中的_config替换为空(其中“@”指规则的目标文件名,在这里就是“TQ2440_config ”。$(text:patternA=patternB),这样的语法表示把text变量每一个元素中结尾的patternA的文本替换为patternB,然后输出) 。因此$(@:_config=)的作用就是将TQ2440_config中的_config去掉,得到TQ2440。
因此“@$(MKCONFIG) $(@:_config=) arm arm920tTQ2440 samsung s3c24x0”实际上就是执行了如下命令:
./mkconfig TQ2440 arm arm920t TQ2440 samsung s3c24x0
即将“TQ2440 arm arm920t TQ2440 samsung s3c24x0”作为参数传递给当前目录下的mkconfig脚本执行。
在mkconfig脚本中给出了mkconfig的用法:
# Parameters: Target Architecture CPU Board [VENDOR] [SOC]
因此传递给mkconfig的参数的意义分别是:
- TQ2440:Target(目标板型号)
- arm:Architecture (目标板的CPU架构)
- arm920t:CPU (具体使用的CPU型号)
- TQ2440:Board
- samsung:VENDOR(生产厂家名)
- s3c24x0:SOC
TQ2440:Target(目标板型号)
arm:Architecture (目标板的CPU架构)
arm920t:CPU (具体使用的CPU型号)
TQ2440:Board
samsung:VENDOR(生产厂家名)
s3c24x0:SOC