uboot配置文件mkconfig详解

2.uboot配置分析:

 

通过Makefile文件在最后的传参,然后再通过mkconfig脚本文件来完成配置。

 

mkconfig脚本分析:

 

Makefile传参:

@$(MKCONFIG) $(@:_config=) arms5pc11x x210 samsung s5pc110

 

这行代码成功的将六个参数传递进了mkconfig文件中。

首先,第一个参数$(@:_config=) ,这里的@:表示将对冒号后面的内容进行操作,具体操作就是:将等号前面的内容替换成等号后面的内容,也就是将x210_sd_config 中的_config 替换为 空,得到 x210_sd ,这就是第一个参数了,所以这六个参数为:

 

$1:        x210_sd

$2:        arm

$3:        s5pc11x

$4:        x210

$5:        samsumg

$6:        s5pc110

所以,  $# = 6

 

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

 

这里通过while$#进行判断,然后通过case语句对 $1 进行匹配,到*)(万能匹配符,相当于defried)然后再break跳出while循环。

 

[ "${BOARD_NAME}" ] ||BOARD_NAME="$1"

 

[ $# -lt 4 ] && exit 1

[ $# -gt 6 ] && exit 1

 

echo "Configuring for${BOARD_NAME} board..."

 

这里通过 || 符号来对BOARD_NAME进行判断,如果为空就执行 || 后面的,也就是为BOARD_NAME进行赋值为 $1的值也就是x210_sd

[ $# -lt 4 ] && exit 1

[ $# -gt 6 ] && exit 1

这两句是对$# 进行判断,如果小于4则会返回1,也就是退出,如果大于6,也会退出。因此这里可以知道,我们在传参的时候只能传5个或6个参数,其他的都是不行的。

 

接下来的代码就会创建很多的符号链接文件,而这些符号链接的存在就是整个配置过程的核心,这些符号链接的文件夹就是主要给头文件包含的。通过这些链接,就可以使uboot具有可移植性了。

其实我们的uboot可移植性的根本原理就是在整个uboot中存在很多的平行代码,当我们在使用不同的开发板的时候就会通过符号链接来创建不同的文件,然后在调用他们,因此实现了一套代码可以匹配很多套不同的开发板。

 

创建符号链接:

 

第一个创建的符号链接:

 

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 -f asm

mkdir asm-$2

ln -s asm-$2 asm

else

cd ./include

rm -f asm

ln -s asm-$2 asm

fi

 

这里先对我们的编译方式进行了判断,如果使用文件夹输出编译,那么他就会在我们的指定的文件夹下面创建各种所需要的文件夹,如果是使用默认编译输出,则它会在当前文件夹下创建include文件夹,然后在里面进行删除和创建asm的符号链接。

符号链接位置include/asm ,指向asm-arm

 

第二个创建符号链接:

 

rm -f asm-$2/arch

 

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

 

这里是先删除了asm-$2/arch

然后通过对$6 的判断,决定在include文件夹下创建arch-arm/arch将它与 arch-s5pc110做软连接。

 

第三个创建的符号链接:

 

# create link for s5pc11x SoC

if [ "$3" ="s5pc11x" ] ; then

        rm -f regs.h

        ln -s $6.h regs.h

        rm -f asm-$2/arch

        ln -s arch-$3 asm-$2/arch

fi

 

这里通过对$3的判断,然后 又通过操作,篡创建了符号链接。

删除 regs.h

创建regs.h 并将其与 s5pc110.h 建立链接(这里是第三个创建的符号链接)

删除 asm-arm/arch  (这里删除的是第二个符号链接)

创建asm-arm/arch 并将其链接到arch-s5pc11x(这里是第四个创建的符号链接)

 

第五个创建的符号链接

 

if [ "$2" ="arm" ] ; then

rm -f asm-$2/proc

ln -s${LNPREFIX}proc-armv asm-$2/proc

fi

 

这里通过对 $2 的判断,然后:

删除include下的asm-arm/proc

创建asm-arm/proc 并将其与proc-armv 建立符号链接

 

include/创建config.mk

 

echo "ARCH   = $2" >  config.mk

echo "CPU    = $3" >> config.mk

echo "BOARD  = $4" >> config.mk

 

[ "$5" ] && ["$5" != "NULL" ] && echo "VENDOR = $5">> config.mk

 

[ "$6" ] && ["$6" != "NULL" ] && echo "SOC    = $6" >> config.mk

 

在这里,我们创建了config.mk并将参数追加进去,以便主Makefileinclude中的config进行调用。

 

 

if [ "$APPEND" ="yes" ]        # Append toexisting config file

then

echo >>config.h

else

>config.h                #Create new config file

fi

echo "/* Automaticallygenerated - do not edit */" >>config.h

echo "#include<configs/$1.h>" >>config.h

 

exit 0

 

这里的APPEND = no 表示当前没有config.h文件,因此,创建config.h文件,并且将下面的注释和 include <configs/x210_sd.h> 追加进config.h中。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_25827755/article/details/53672095