一、首先分析根目录下Makefile
1、uboot2009没有configs目录,这个跟之后的版本是有区别的。ub2009的配置命令在根目录的Makefile中可以找到。如下为imx6solo的配置命令:
unconfig:
@rm -f $(obj)include/config.h $(obj)include/config.mk \
$(obj)board/*/config.tmp $(obj)board/*/*/config.tmp \
$(obj)include/autoconfig.mk $(obj)include/autoconf.mk.dep
mx6solo_sabresd_config \
mx6solo_sabresd_mfg_config \
mx6dl_sabresd_config \
mx6dl_sabresd_mfg_conig \
mx6dl_sabresd_android_config \
mx6q_sabresd_config \
mx6q_sabresd_android_config \
mx6q_sabresd_mfg_config \
mx6q_sabresd_iram_config : unconfig
@[ -z "$(findstring iram_,$@)" ] || \
{ echo "TEXT_BASE = 0x00907000" > $(obj)board/freecale/mx6q_sabresd/config.tmp; \
echo "...with iram configuration"; \
}
@$(MKCONFIG) $(@:_config=) arm arm_cortexa8 mx6q_sabresd freescale mx6
# -z 判断如果存在的话
# $@ 为输入的参数,即上方 *_config
# findstring 在$@ 中查找是否存在 iram_,即判断是否是使用的mx6q_sabresd_iram_config
# $(@:_config=) :分隔符, 即最后得出的字符为*_config去掉_config的部分
# $(MKCONFIG) = $(SRCTREE)/mkconfig
# 此处我们使用的是:mx6solo_sabresd_config 去配置的。
# 所以最后一句的配置为:
# ./mkconfig mx6solo_sabresd arm arm_cortexa8 mx6q_sabresd freescale mx6
2、分析mkconfig文件,mkconfig是一个shell脚本,内容如下:
#!/bin/sh -e
APPEND=no
BOARD_NAME=""
# $# 是输入参数的个数,此处我们使用的配置中 $# == 6
# 判断参数的个数 以及第一个参数的格式
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_BANE为传入的第一个参数即: mx6solo_sabresd
[ "${BOARD_NAME})" ] || BOARD_NAME="$1"
[ $# -lt 4 ] && exit 1
[ $# -gt 6 ] && exit 1
echo "Configuring for ${BOARD_NAME} board... "
# Makefile 中定义了:
# OBJTREE := $(if $(BUILD_DIR),$(BUILD_DIR),CURDIR)"
# SRCTREE := $(CURDIR)
#$(BUILD_DIR)此处未定义,
# $2 = arm
if [ "$(SRCTREE)" != "$OBJTREE" ] ; then
mkdir -p ${OBJTREE}/include
mkdir -p ${OBJTREE}/include2
cd ${OBJTREE}/include2
rm -f asm
ln -s ${SRCTREE}/include/asm-$2 asm
LNPREFIX="../../include2/asm/"
cd ../include
rm -rf asm-$2
rm -rf asm
mkdir arm-$2
ln -s arm-$2 asm
else
# 未定义BUILD_DIR 走这里, 从新创建一个链接文件
cd ./include
rm -f asm
ln -s asm-$2 asm
fi
rm -f asm-$2/arch
# $6 = mx6
# 创建一个链接asm-arm/arch --> asm-arm/arch-mx6
if [ -z "$6" -o "$6" = "NULL" ] ; then
ln -s ${LNPREFIX}arch-$3 asm-$2/arch
else
ln -s ${LNPREFIX}arch-$6 asm-$2/arch
fi
if [ "$2" = "arm" ] ; then
rm -f asm-$2/proc
ln -s ${LNPREFIX}proc-armv asm-$2/proc
fi
# $2 == arm
# $3 == arm_cortexa8
# $4 == mx6q_sabresd
# $5 == freescale
# $6 == mx6
echo "ARCH =$2" > config.mk
echo "CPU =$3" >> config.mk
echo "BOARD =$4" >> cinfig.mk
[ "$5" ] && [ "$5" != "NULL" ] && echo "VERDOR = $5" >> config.mk
[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC = $6" >> config.mk
# 写入 include/config.h
if [ "$APPEND" = "yes" ] ; then
echo >> config.h
else
echo > config.h
fi
echo "/* Automatically generated - do not edit */" >> config.h
# 包含板子对应的配置文件 $1 = mx6solo_sabresd
echo "#include <configs/$1>" >> config.h
echo "#include <asm/config.h>" >> config.h
exit 0
配置过程到此分析完成。
配置使用命令: make mx6solo_sabresd_config 。