由于作者的机器安装了 bash shell,且 shell 默认环境变量中定义了“$BASH”,因此 SHELL被设置为$BASH。
2.make mini2440_config 命令执行过程
下面分析命令“make mini2440_config”执行过程,为了简化分析过程这里主要分析将编译目标输出到源代码目录的情
况。
mini2440_config:unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t mini2440 NULL 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
其中“@”的作用是执行该命令时不在 shell 显示。
“obj”变量就是编译输出的目录,因此“unconfig”的作用就是清除上次执行 make *_config 命令生成的配置文件(如
include/config.h,include/config.mk 等)。
$(MKCONFIG)在上面指定为“$(SRCTREE)/mkconfig”。
$(@:_config=) 为 将 传 进 来 的 所 有 参 数 中 的 _config 替 换 为 空 ( 其 中 “ @” 指 规 则 的 目 标 文 件 名 , 在 这 里 就 是
“mini2440_config ”。$(text:patternA=patternB),这样的语法表示把 text 变量每一个元素中结尾的 patternA 的文本替换为
patternB,然后输出)H。因此$(@:_config=)的作用就是将 mini2440_config 中的_config 去掉,得到 mini2440。
因此“@$(MKCONFIG) $(@:_config=) arm arm920t mini2440 samsung s3c24x0”实际上就是执行了如下命令:
./mkconfig mini2440 arm arm920t mini2440 samsung s3c24x0
即将“mini2440 arm arm920t mini2440 samsung s3c24x0”作为参数传递给当前目录下的 mkconfig 脚本执行。
在 mkconfig 脚本中给出了 mkconfig 的用法:
# Parameters:TargetArchitectureCPUBoard [VENDOR] [SOC]
因此传递给 mkconfig 的参数的意义分别是:
mini2440:Target(目标板型号)
arm:Architecture(目标板的 CPU 架构)
arm920t:CPU(具体使用的 CPU 型号)
mini2440:Board
samsung:VENDOR(生产厂家名)
s3c24x0:SOC
下面再来看看 mkconfig 脚本到底做了什么。
(1)确定开发板名称 BOARD_NAME
在 mkconfig 脚本中有如下代码:
APPEND=no# no 表示创建新的配置文件,yes 表示追加到配置文件中
BOARD_NAME=""# Name to print in make output
TARGETS=""
while [ $# -gt 0 ] ; do
case "$1" in
--) shift ; break ;;
评论0
最新资源