Mkconfig文件分析
#!/bin/sh-e
#Scripttocreateheaderfilesandlinkstoconfigure
#U-Bootforaspecificboard.
#
#Parameters:TargetArchitectureCPUBoard[VENDOR][SOC]
#@$(MKCONFIG)mini6410armarm1176mini6410samsungs3c64xx
#(C)2002-2006DENXSoftwareEngineering,WolfgangDenk<[email protected]>
#
#***定义变量
APPEND=no #Default:Createnewconfigfile
BOARD_NAME="" #Nametoprintinmakeoutput
TARGETS=""
arch=""
cpu=""
board=""
vendor=""
soc=""
#***make-Axxx$#为2,且$1为-A时条件成立
if[\($#-eq2\)-a\("$1"="-A"\)];then
#Automaticmode
#***搜索boards.cfg文件,把包含有xxx的行,赋值给line变量
#假如为:mini6410armarm1176mini6410samsungs3c64xx
line=`egrep-i"^[[:space:]]*${2}[[:space:]]"boards.cfg`||{
echo"make:***Noruletomaketarget\`$2_config'.Stop.">&2
exit1
}
#***把line的内容分别赋值给$1--$6
set${line}
#adddefaultboardnameifneeded
[$#=3]&&set${line}${1}
fi
while[$#-gt0];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个就退出
[$#-lt4]&&exit1
[$#-gt6]&&exit1
#***此处的$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赋值
[$#-gt4]&&["$5"!="-"]&&vendor="$5"
[$#-gt5]&&["$6"!="-"]&&soc="$6"
#***检察ARCH是否定义,是否等于arch
if["${ARCH}"-a"${ARCH}"!="${arch}"];then
#***输出错误信息
echo"Failed:\$ARCH=${ARCH},shouldbe'${arch}'for${BOARD_NAME}"1>&2
exit1
fi
echo"Configuringfor${BOARD_NAME}board..."
#
#Createlinktoarchitecturespecificheaders
#
#***检查SRCTREE和OBJTREE是否都是指向u-boot-xxxx.xx
if["$SRCTREE"!="$OBJTREE"];then
#***
mkdir-p${OBJTREE}/include
mkdir-p${OBJTREE}/include2
cd${OBJTREE}/include2
rm-fasm
ln-s${SRCTREE}/arch/${arch}/include/asmasm
LNPREFIX=${SRCTREE}/arch/${arch}/include/asm/
cd../include
rm-fasm
ln-s${SRCTREE}/arch/${arch}/include/asmasm
else
cd./include
rm-fasm#***删除上次链接文件
#***重新建立链接文件
ln-s../arch/${arch}/include/asmasm
fi
#***删除/include/asm/arch文件
rm-fasm/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-fasm/proc
ln-s${LNPREFIX}proc-armvasm/proc
fi
#
#CreateincludefileforMake
#
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
#AssignboarddirectorytoBOARDIRvariable
if[-z"${vendor}"];then
BOARDDIR=${board}
else
#***BOARDDIR=samsung/s3c64xx
BOARDDIR=${vendor}/${board}
fi
#
#Createboardspecificheaderfile
#
#***创建空白文档config.h
if["$APPEND"="yes"] #Appendtoexistingconfigfile
then
echo>>config.h
else
>config.h #Createnewconfigfile
fi
echo"/*Automaticallygenerated-donotedit*/">>config.h
foriin${TARGETS};do
echo"#defineCONFIG_MK_${i}1">>config.h;
done
#***config.h文件中写入以下内容
cat<<EOF>>config.h
#defineCONFIG_BOARDDIRboard/$BOARDDIR
#include<config_defaults.h>
#include<configs/${CONFIG_NAME}.h>
#include<asm/config.h>
EOF
exit0
注:mkconfig文件创建两个文件config.h和config.mk
建立两个链接文件arch-arm1176和proc-armv