U-BOOT mkconfig文件详细解析

U-BOOT mkconfig文件详细解析

 

#!/bin/sh -e

 

# 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 <[email protected]>

#

 

****$#表示输入进来的参数个数,-gtgreat than)表示左边大于右边则返回真
SHELL
常用内部参数:  
 $# ----
传递给程序的总的参数数目
   $? ----上一个代码或者shell程序在shell中退出的情况,如果正常退出则返回0,反之为非0值。
   $* ----传递给程序的所有参数组成的字符串。
      $n ----
表示第几个参数,$1表示第一个参数,$2 表示第二个参数 ... 
      $0 ----
当前程序的名称

      $@----
"参数1" "参数2" ... 形式保存所有参数
      $$ ----
本程序的(进程ID
)PID
      $!  ----
上一个命令的PID
 

 

##################################################################

# ./mkconfig smdk2410 arm arm920t smdk2410 NULL s3c24x0

# 本脚本执行后会创建头文件和软链接,用来配置对应开发板生成对应U-boot

#

 

APPEND=no         # 默认: 创建一个新的配置文件

BOARD_NAME=""   # 目标配置文件名

 

# 根据参数设置APPEND,BOARD_NAME

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 = 第一个参数【smdk2410】

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

 

# 如果参数个数不对,退出

[ $# -lt 4 ] && exit 1

[ $# -gt 6 ] && exit 1

 

# 输出信息

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

 

#

# 创建链接向对应目标开发板的头文件

#

if [ "$SRCTREE" != "$OBJTREE" ] ; then           # 如果源文件目录和目标目录不相等

        mkdir -p ${OBJTREE}/include           # 创建include目录

        mkdir -p ${OBJTREE}/include2          # 创建include2目录

        cd ${OBJTREE}/include2            # 进入include2目录

        rm -f asm                         # 删除include2/asm

# 创建软链接${SRCTREE}/include/asm-arm  ->  asm

        ln -s ${SRCTREE}/include/asm-$2 asm

        LNPREFIX="../../include2/asm/"    # 将新创建的软链接文件名存入LNPREFIX

        cd ../include              # 进入include目录

        rm -rf asm-$2              # 删除include/asm-arm目录

        rm -f asm               # 删除include/asm文件

        mkdir asm-$2            # 创建include/asm-arm目录

# 创建软链接include/asm-arm ->  asm

       ln -s asm-$2 asm

else                        # 如果源文件目录和目标目录相等

        cd ./include        # 进入include目录

        rm -f asm           # 删除include/asm文件

        ln -s asm-$2 asm    # 创建软链接include/asm-arm  ->  asm

fi

 

# 删除include/asm-arm/arch目录

rm -f asm-$2/arch

 

# 如果第六个参数s3c24x0为空或者为NULL

if [ -z "$6" -o "$6" = "NULL" ] ; then

       # 创建链接./include/asm/arch-arm920t -> asm-arm/arch

        ln -s ${LNPREFIX}arch-$3 asm-$2/arch 

else   # 如果第六个参数为s3c24x0

       # 创建链接./include/asm/arch-s3c24x0 -> asm-arm/arch

        ln -s ${LNPREFIX}arch-$6 asm-$2/arch

fi

 

# 如果第二个参数为arm

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

        rm -f asm-$2/proc                        # 删除asm-arm/proc

       # 创建链接../../include2/asm/proc-armv -> asm-arm/proc

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

fi

 

****创建顶层包含的include/config.mk文件。其内容很简单。此处>是重定向,>>也是重定向只是追加在文件尾部。往config.mk里面写入:

ARCH = arm,CPU = arm920t,BOARD = smdk2410,SOC = s3c24x0
你可以在顶层目录输入make smdk2410_config,在include目录里面多了一个config.mk文 件,里面内容就是刚刚写入的内容

 

# 为Make创建包含的头文件

# 将ARCH,CPU,BOARD变量写入config.mk

echo "ARCH   = $2" >  config.mk

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

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

 

# 如果第五个参数为真,且不为NULL将“VENDOR=第五个参数”写入config.mk

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

# 如果第六个参数为真,且不为NULL将“SOC=第六个参数”写入config.mk

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

#

# 创建开发板对应的头文件

#

# 如果APPEND为yes

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

then

        echo >> config.h        # 什么都不做

else          # 如果APPEND不为yes

        > config.h                 # 创建一个新的config.h头文件

Fi

# 将下面的两行内容追加到config.h

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

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

 

exit 0

 

 

总结mkconfig做的工作:


 
1)获取 BOARD_NAME = smdk2410。($1 – >> 即第一个参数)

 

2include目录下建立链接

         asm --> asm-arm(源文件),

         include/asm-arm目录下arch --> arch-s3c24x0, proc --> proc-armv

 

3include目录下建立config.mk文件往里面写入
          ARCH  = arm
          CPU   = arm920t
          BOARD = smdk2410
          SOC   = s3c24x0
 

4include目录下建立头文件config.h.往里面写入
      
/* Automatically generated - do not edit */

       #include <configs/smdk2410.h>

 

你可能感兴趣的:(shell,脚本,header,null,Parameters,include)