TQ2440之U-Boot-1.1.6之顶层目录下的mkconfig

来源:互联网 发布:淘宝客导购位线下推广 编辑:程序博客网 时间:2024/05/01 07:38

      U-Boot-1.1.6根目录下的mkconfig同样也具有如同makefile的重要地位。进入mkconfig可以看到它的源代码并不多。

      下面红色部分,均为我自己添加的注释,源文件里没有这些注释。

________________________________________________________________

#!/bin/sh -e             //指定执行该脚本所使用的解释器,-e相当于/bin/bash

# Script to create header files and links to 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       //缺省创建一个新的配置文件,config.h
BOARD_NAME="" # Name to print in make output

while [ $# -gt 0 ] ; do              //$# 是传递给脚本的参数个数
 case "$1" in                           //$1是上文Makefile分析结果里面六个参数的第二个参数,$1=EmbedSky
 --) shift ; break ;;                   //脚本case里面的每个模式行都是以双分号;;结束
 -a) shift ; APPEND=yes ;;

/*$(1%%_config)原形为$(string%%substring),从string的右侧删除掉最后匹配substring的字符串*/
 -n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;
 *)  break ;;
 esac                                 //$1不满足以上条件,跳到done下面语句
done

/*如果BOARD_NAME非空,则不执行后面语句,否则将参数1赋值给BOARD_NAME*/

[ "${BOARD_NAME}" ] || BOARD_NAME="$1"   //执行完后,BOARD_NAME=EmbedSky

[ $# -lt 4 ] && exit 1         //$#=6,即不小于4也不大于6,故不满足,跳过,然后打印
[ $# -gt 6 ] && exit 1

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

#
# Create link to architecture specific headers
#

/*下面一句判断源代码目录和目标目录是否一样,如果不一样则执行else分支语句,我们一般选择在源代码目录下编译,故判断语句不满足,将执行else分支*/
if [ "$SRCTREE" != "$OBJTREE" ] ; then
 mkdir -p ${OBJTREE}/include        //在目标目录下创建include文件夹
 mkdir -p ${OBJTREE}/include2
 cd ${OBJTREE}/include2       //进入目标目录下的include2
 rm -f asm                                //删除asm链接
 ln -s ${SRCTREE}/include/asm-$2 asm   //创建asm链接,指向根目录下include/asm-arm
 LNPREFIX="../../include2/asm/"         //赋值给变量LNPREFIX

/*下面五句是,进入根目录的include目录,删除asm-arm链接,删除asm,创建asm-arm,重新让asm指向asm-arm*/
 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

rm -f asm-$2/arch       //删除include目录asm-arm目录下的arch

/*-z表示如果 $6 为空则为真,-o表示或运算,$6=s3c24x0,故执行else后面语句*/

if [ -z "$6" -o "$6" = "NULL" ] ; then
 ln -s ${LNPREFIX}arch-$3 asm-$2/arch
else                                                         
 ln -s ${LNPREFIX}arch-$6 asm-$2/arch   //asm-arm/arch链接指向asm/arch-s3c24x0
fi

/*$2=arm,满足条件,删除asm-arm/proc,asm-arm/proc链接指向asm/proc-armv*/

if [ "$2" = "arm" ] ; then
 rm -f asm-$2/proc
 ln -s ${LNPREFIX}proc-armv asm-$2/proc
fi

#
# Create include file for Make
#

/*下面五句是创建顶层Makefile包含的文件  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  //$5=NULL,所以此句不满足

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

#
# Create board specific header file
#
if [ "$APPEND" = "yes" ] # Append to existing config file    //APPEND缺省为no,故创建一个新的config.h文件
then
 echo >> config.h
else
 > config.h  # Create new config file
fi

/*config.h文件里面的内容包含以下二句*/

/*  Automatically generated - do not edit

    #include <configs/$EmbedSky.h>       */
echo "/* Automatically generated - do not edit */" >>config.h
echo "#include <configs/$1.h>" >>config.h

exit 0  //结束,退出

———————————————————————————————————

总结:

 配置命令“make EmbedSky_config”实际的作用就是执行

./mkconfig EmbedSky arm arm920t EmbedSky NULL  s3c24x0 这个命令,将产生以下结果

(1)、开发板名称BOARD_NAME=$1;

(2)、创建到平台/开发板相关的头文件的链接,如下:

            ln -s  asm-arm   asm

            ln -s   arch-s3c24x0   asm-arm/arch

            ln -s  proc-armv   asm-arm/proc

(3)创建顶层Makefile 包含的文件 include/config.mk,config.mk内容如下:

           ARCH = arm

           CPU = arm920t

           BOARD = EmbedSky

           SOC = s3c24x0

(4)、创建开发板相关的头文件 include/config.h

       从以上4个结果可以知道,如果要在board目录下新建一个开发板<board_name>的目录,则在 include/configs 目录下面也要新建一个文件 <board_name>.h,里面存放的就是开发板<board_name>的配置信息,里面包含二种宏定义类一种是CFG类另一种是CONFIG类。

 

 

这节就讲到这里吧,祝大家学习愉快。 ^_^大笑

 

原创粉丝点击