u-boot mkconfig文件分析

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

//同上给vendorsoc赋值

[ $# -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/archarch-arm1176 

if [ -z "${soc}" ] ; then

ln -s ${LNPREFIX}arch-${cpu} asm/arch

else

ln -s ${LNPREFIX}arch-${soc} asm/arch

fi

#***建立链接asm/procproc-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-arm1176proc-armv

你可能感兴趣的:(u-boot mkconfig文件分析)