全部博文(56)
分类: 嵌入式
2012-05-16 10:47:40
U-boot的配置、编译及连接
执行make hkdkc110_mmc_config命令,会寻找当前目录下的Makefile中的hkdkc110_mmc_config目标,我们来看一下这个目标 |
hkdkc110_mmc_config : unconfig @$(MKCONFIG) $(@:_config=) arm s5pc11x hkdkc110 samsung s5pc110 @echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/hkdkc110/config.mk |
其中unconfig目标定义如下:它有来清除配制文件,其中“@”的作用是执行该命令时不在shell显示 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 \ $(obj)board/$(VENDOR)/$(BOARD)/config.mk |
MKCONFIG := $(SRCTREE)/mkconfig export MKCONFIG 因此@$(MKCONFIG)表示$(SRCTREE)目示下mkconfig脚本 |
$(@:_config=)为将传进来的参数中的_config替换为空(其中“@”指变量名,在这里就是“hkdkc110_mmc_config”。$(text:patternA=patternB),这样的语法表示把text变量每一个元素中结尾的patternA的文本替换为patternB,然后输出) 。因此$(@:_config=)的作用就是将hkdkc110_mmc_config中的_config去掉,变成hkdkc110_mmc |
执行make hkdkc110_mmc_config的实际作用就是执行 ./mkconfig hkdkc110_mmc arm s5pc11x hkdkc110 samsung s5pc110 |
./mkconfig $1 $2 $3 $4 $5 $6命令,其中$0=hkdkc110_mmc_config |
我们再来看一下mkconfig脚本 |
APPEND=no # Default: Create new config file BOARD_NAME="" # Name to print in make output
while [ $# -gt 0 ] ; do case "$1" in --) shift ; break ;; -a) shift ; APPEND=yes ;; -n) shift ; BOARD_NAME="${1%%_config}" ; shift ;; *) break ;; esac done #这段代码不起任何作用
[ "${BOARD_NAME}" ] || BOARD_NAME="$1" #将第一个参数传递给 BOARD_NAME
|
|
|
1:) BOARD_NAME="$1" 2:) ln -s asm-$2 asm ln -s arch-$6 asm-$2/arch ln -s proc-armv asm-$2/proc #如果$2不是ARM的话,此行没有 3:) 创建顶层Makefile包含的文件include/config.mk ARCH = arm $2 CPU = s5pc11x $3 BOARD = hkdkc110 $4 VENDOR = samsung $5 SOC = s5pc110 $6 4:) 创建开发板相关的头文件include/config.h /* Automatically generated - do not edit */ #include
|
从这个四个结果可知,如果要在board目录下新建一个开发板
|