mkconfig文件讲解

#!/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

阅读更多
想对作者说点什么?
相关热词

博主推荐

换一批

没有更多推荐了,返回首页