概述
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并将参数追加进去,以便主Makefile对include中的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中。
最后
以上就是害羞草丛为你收集整理的uboot配置文件mkconfig详解的全部内容,希望文章能够帮你解决uboot配置文件mkconfig详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复