Mkconfig文件分析
#!/bin/sh -e
# Script to create header files and links to configure
# U-Boot for a specific board.
#
# Parameters: Target Architecture CPU Board [VENDOR] [SOC]
#@$(MKCONFIG) mini6410 arm arm1176 mini6410 samsung s3c64xx
# (C) 2002-2006 DENX Software Engineering, Wolfgang Denk <[email protected]>
#
#***定义变量
APPEND=no # Default: Create new config file
BOARD_NAME="" # Name to print in make output
TARGETS=""
arch=""
cpu=""
board=""
vendor=""
soc=""
#*** make -A xxx$#为2,且$1为-A时条件成立
if [ \( $# -eq 2 \) -a \( "$1" = "-A" \) ] ; then
# Automatic mode
#***搜索boards.cfg文件,把包含有xxx的行,赋值给line变量
#假如为:mini6410 arm arm1176 mini6410 samsung s3c64xx
line=`egrep -i "^[[:space:]]*${2}[[:space:]]" boards.cfg` || {
echo "make: *** No rule to make target \`$2_config'. Stop." >&2
exit 1
}
#*** 把line的内容分别赋值给$1--$6
set ${line}
# add default board name if needed
[ $# = 3 ] && set ${line} ${1}
fi
while [ $# -gt 0 ] ; do
case "$1" in
--) shift ; break ;;
-a) shift ; APPEND=yes ;;
-n) shift ; BOARD_NAME="${1%_config}" ; shift ;;
-t) shift ; TARGETS="`echo $1 | sed 's:_: :g'` ${TARGETS}" ; shift ;;
*) break ;;
esac
done
#***$#表示参数个数,如果参数个数小于4个大于6个就退出
[ $# -lt 4 ] && exit 1
[ $# -gt 6 ] && exit 1
#***此处的$1如上面代码所表示,如果$1是以_config结尾,则去掉_config
CONFIG_NAME="${1%_config}"
#***如果BOARD_NAME没有定义 就执行BOARD_NAME="${CONFIG_NAME}" #=mini6410
[ "${BOARD_NAME}" ] || BOARD_NAME="${CONFIG_NAME}"
#***arch=arm
arch="$2"
#***cpu=arm1176
cpu="$3"
if [ "$4" = "-" ] ; then
board=${BOARD_NAME}
else
# board=mini6410
board="$4"
fi
//同上给vendor和soc赋值
[ $# -gt 4 ] && [ "$5" != "-" ] && vendor="$5"
[ $# -gt 5 ] && [ "$6" != "-" ] && soc="$6"
#***检察ARCH是否定义,是否等于arch
if [ "${ARCH}" -a "${ARCH}" != "${arch}" ]; then
#***输出错误信息
echo "Failed: \$ARCH=${ARCH}, should be '${arch}' for ${BOARD_NAME}" 1>&2
exit 1
fi
echo "Configuring for ${BOARD_NAME} board..."
#
# Create link to architecture specific headers
#
#***检查SRCTREE 和OBJTREE是否都是指向u-boot-xxxx.xx
if [ "$SRCTREE" != "$OBJTREE" ] ; then
#***
mkdir -p ${OBJTREE}/include
mkdir -p ${OBJTREE}/include2
cd ${OBJTREE}/include2
rm -f asm
ln -s ${SRCTREE}/arch/${arch}/include/asm asm
LNPREFIX=${SRCTREE}/arch/${arch}/include/asm/
cd ../include
rm -f asm
ln -s ${SRCTREE}/arch/${arch}/include/asm asm
else
cd ./include
rm -f asm #***删除上次链接文件
#***重新建立链接文件
ln -s ../arch/${arch}/include/asm asm
fi
#***删除/include/asm/arch文件
rm -f asm/arch
#***建立链接/include/asm/arch到arch-arm1176
if [ -z "${soc}" ] ; then
ln -s ${LNPREFIX}arch-${cpu} asm/arch
else
ln -s ${LNPREFIX}arch-${soc} asm/arch
fi
#***建立链接asm/proc到proc-armv
if [ "${arch}" = "arm" ] ; then
rm -f asm/proc
ln -s ${LNPREFIX}proc-armv asm/proc
fi
#
# Create include file for Make
#
echo "ARCH = ${arch}" > config.mk
echo "CPU = ${cpu}" >> config.mk
echo "BOARD = ${board}" >> config.mk
[ "${vendor}" ] && echo "VENDOR = ${vendor}" >> config.mk
[ "${soc}" ] && echo "SOC = ${soc}" >> config.mk
# Assign board directory to BOARDIR variable
if [ -z "${vendor}" ] ; then
BOARDDIR=${board}
else
#***BOARDDIR= samsung/s3c64xx
BOARDDIR=${vendor}/${board}
fi
#
# Create board specific header file
#
#***创建空白文档config.h
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
for i in ${TARGETS} ; do
echo "#define CONFIG_MK_${i} 1" >>config.h ;
done
#***config.h文件中写入以下内容
cat << EOF >> config.h
#define CONFIG_BOARDDIR board/$BOARDDIR
#include <config_defaults.h>
#include <configs/${CONFIG_NAME}.h>
#include <asm/config.h>
EOF
exit 0
注:mkconfig文件创建两个文件config.h 和config.mk
建立两个链接文件arch-arm1176和proc-armv