概述
#!/bin/sh -e
# Script to create header files and linksto configure
# U-Boot for a specific board.
#
# Parameters: Target Architecture CPU Board [VENDOR] [SOC]
#
# (C) 2002-2006 DENX Software Engineering,Wolfgang Denk <wd@denx.de>
#
APPEND=no # Default: Create new config file
BOARD_NAME="" # Name to print in make output
//shell中的case语句不需要break,在shell中可以用shift使传进去的argc,argv[]的值改变,所以这里while循环并不会是死循环
while [ $# -gt 0 ] ; do
case "$1" in
--) shift ; break ;;
-a) shift ; APPEND=yes ;;
-n) shift ;BOARD_NAME="${1%%_config}" ; shift ;;
*) break ;;
esac
done
//
[ "${BOARD_NAME}" ] ||BOARD_NAME="$1" //简略的if语句,使用或,先执行["${BOARD_NAME}" ] 判断,是否再执行BOARD_NAME="$1"
//这行就是说判断BOARD_NAME变量是否有值,有就不变,没有就赋为$1,实际确实赋为$1,即BOARD_NAME=x210_sd,
[ $# -lt 4 ] && exit 1 // 判断传进的参数是否为4到6个,不是就退出,即exit 1
[ $# -gt 6 ] && exit 1
echo "Configuring for ${BOARD_NAME}board..."
#
# Create link to architecture specific headers
#//以下语句到118行之间都是创建符号链接(一下代码创建了4个),为什么要创建符号链接,这是因为这些符号链接的存在就是整个UBOOT的
//配置过程的核心,这些符号链接文件(文件夹)的主要作用是给头文件包含等过程提供指向性链接。根本目的就是让Uboot
//具有可移植性。
//Uboot可移植性的实现原理:在uboot中有很多批次平行的代码,各自属于各自不同架构/cpu/开发板,我们在具体到一个开发板的
//编译时用符号链接的方式提供一个具体的名字的文件夹共编译时使用,这样就可以在配置的过程中通过不同的配置使用
//不同的文件,就可以正确的包含正确的文件,ln指令就是创建符号链接
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 //在这里进入了include目录下
rm -f asm
ln -s asm-$2 asm //创建符号链接,第一个:在include目录下创建asm文件,指向asm-arm(因为$2就是arm)
fi
rm -f asm-$2/arch
if [ -z "$6" -o "$6" ="NULL" ] ; then //-o表示两个只要一个成立就行,-z判断变量($6)是否为空,
ln -s ${LNPREFIX}arch-$3 asm-$2/arch //在include/asm-arm下创建一个arch文件,
//指向include/asm-arm/arch-s5pv11x($3是s5pv11x)
else
ln -s ${LNPREFIX}arch-$6 asm-$2/arch // 第二个由于if语句不成立,执行这条。生成asm-arm/arch,指向asm-arm/arch下的arch-arch-s5pv110
fi
# create link for s3c24xx SoC
if [ "$3" = "s3c24xx" ]; then
rm -f regs.h
ln -s $6.h regs.h
rm -f asm-$2/arch
ln -s arch-$3 asm-$2/arch
fi
# create link for s3c64xx SoC
if [ "$3" = "s3c64xx" ]; then
rm -f regs.h
ln -s $6.h regs.h
rm -f asm-$2/arch
ln -s arch-$3 asm-$2/arch
fi
# create link for s5pc1xx SoC
if [ "$3" = "s5pc1xx" ]; then
rm -f regs.h
ln -s $6.h regs.h
rm -f asm-$2/arch
ln -s arch-$3 asm-$2/arch
fi
# create link for s5pc11x SoC 当前目录是include目录
if [ "$3" = "s5pc11x" ]; then
rm -f regs.h //删除include 目录下的regs.h
ln -s $6.h regs.h //第三个:在include 目录下创建regs.h指向include下的s5pv110.h(表示为regs.h->s5pv110.h)
rm -f asm-$2/arch //然后在这里将上面61行else语句生成的asm-arm目录下的arch删除(第二个).
ln -s arch-$3 asm-$2/arch //第四个:再在这里创建所需要的asm-arm目录下的arch文件,指向include/asm-arm/arch-s5pv11x
fi
# create link for s5p64xx SoC
if [ "$3" = "s5p64xx" ]; then
rm -f regs.h
ln -s $6.h regs.h
rm -f asm-$2/arch
ln -s arch-$3 asm-$2/arch
fi
# create link for s5p644x SoC
if [ "$3" = "s5p644x" ]; then
rm -f regs.h
ln -s $6.h regs.h
rm -f asm-$2/arch
ln -s arch-$3 asm-$2/arch
fi
if [ "$2" = "arm" ] ;then
rm -f asm-$2/proc
ln -s ${LNPREFIX}proc-armv asm-$2/proc //第五个:在include/asm-arm下创建一个proc文件,指向include/asm-arm/proc-armv
fi
# create link for s3c64xx-mp SoC
if [ "$3" ="s3c64xx-mp" ] ; then
rm -f regs.h
ln -s $6.h regs.h
rm -f asm-$2/arch
ln -s arch-$3 asm-$2/arch
fi
#
# Create include file for Make
#
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
#
# Create board specific header file
#
if [ "$APPEND" = "yes"] # Append to existing config file
then
echo >> config.h //如果if成立就追加config.h文件,
else
> config.h # Create newconfig file //所知if并不成立,所以生成一个config.h,里面内容为以下两行
fi
echo "/* Automatically generated - donot edit */" >>config.h
echo "#include <configs/$1.h>">>config.h //生成的 config.h里面有"#include<configs/$1.h>"
//config.h这个头文件是我们移植x210开发板时,对开发板的宏定义配置文件,这个文件是我们移植x210最主要的文件
//x210_sd.h 文件会被用来生成一个autoconfig.mk文件,这个文件会被主Makefile引入,指导整个编译过程,这里面的这些宏定义会
//影响我们对uboot中大部分.c文件中一些条件编译的选择,从而实现最终的可移植性。
exit 0
最后
以上就是痴情老师为你收集整理的mkconfig文件讲解的全部内容,希望文章能够帮你解决mkconfig文件讲解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复