U-BOOT中mkconfig详解

在u-boot的顶层makefile中,对不同开发板可以进行不同的配置。以s3c2400为例,在makefile中我们可以找到这样几行代码:

smdk2400_config :   unconfig
    @$(MKCONFIG) $(@:_config=) arm arm920t smdk2400 NULL s3c24x0

其中第二行的命令就是mkconfig的用法,下面详细解析mkconfig的作用原理。

#!/bin/sh -e # 声明脚本使用的是bash语法

# Script to create header files and links to configure
# U-Boot for a specific board.
#
# Parameters: Target Architecture CPU Board [VENDOR] [SOC]
# 用法:对应于makefile中的命令,其中从arm开始是脚本参数
# (C) 2002-2006 DENX Software Engineering, Wolfgang Denk <[email protected]>
#

APPEND=no   # 默认创建新的config文件
BOARD_NAME=""   # Name to print in make output 单板的名字

while [ $# -gt 0 ] ; do  # 如果参数的个数大于0
        case "$1" in     # 对于第一个参数判断
    --) shift ; break ;;           # 若是--,移除第一个参数并退出循环
    -a) shift ; APPEND=yes ;;      # 若是-a,移除第一个参数且变量APPEND赋值为yes
    -n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;  # 若是-n,移除第一个参数,并将第二个参数的_config去掉后赋值给变量BOARD_NAME,再将第二个参数移除
    *)  break ;;                   # 若非上述情况,退出循环
    esac                           # case结束
done                               # while结束

[ "${BOARD_NAME}" ] || BOARD_NAME="$1"  # 若变量BOARD_NAME为空字符串,则赋值为第一个参数

[ $# -lt 4 ] && exit 1     # 若参数个数少于4个,退出
[ $# -gt 6 ] && exit 1     # 若参数个数多于6个,退出

echo "Configuring for ${BOARD_NAME} board..."    # 打印信息

#
# Create link to architecture specific headers
# 创建连接文件,连接相应架构的具体头文件,名为asm
if [ "$SRCTREE" != "$OBJTREE" ] ; then  # 若源代码顶层目录和输出目录不同
    mkdir -p ${OBJTREE}/include     # 则在输出目录中创建目录include
    mkdir -p ${OBJTREE}/include2    # 同时创建目录include2
    cd ${OBJTREE}/include2          # 进入include2目录
    rm -f asm                       # 移除asm文件
    ln -s ${SRCTREE}/include/asm-$2 asm   # 创建与源代码目录中asm-arm的连接,名字是asm
    LNPREFIX="../../include2/asm/" # 变量LNPREFIX赋值为连接asm的路径
    cd ../include  # 进去include目录
    rm -rf asm-$2  # 移除asm-arm目录
    rm -f asm      # 移除asm
    mkdir asm-$2   # 创建asm-arm目录
    ln -s asm-$2 asm # 创建与asm-arm的连接,名为asm
else                 # 若源代码顶层目录和输出目录相同
    cd ./include # 进入include目录
    rm -f asm    # 移除asm
    ln -s asm-$2 asm  # 创建与asm-arm的连接,名为asm
fi

rm -f asm-$2/arch  # 移除asm-arm/arch文件

if [ -z "$6" -o "$6" = "NULL" ] ; then  # 若第六个参数为空或为NULL
    ln -s ${LNPREFIX}arch-$3 asm-$2/arch # 创建asm/arch-arm920t的链接文件,名字为asm-arm/arch
else
    ln -s ${LNPREFIX}arch-$6 asm-$2/arch # 创建asm/arch-s3c24x0的连接文件,名字为asm-arm/arch
fi

if [ "$2" = "arm" ] ; then     # 若第二个参数为arm
    rm -f asm-$2/proc      # 移除asm-arm/proc
    ln -s ${LNPREFIX}proc-armv asm-$2/proc # 创建asm/proc-armv的连接文件,名为asm-arm/proc
fi

#
# Create include file for Make
# 创建make包含的文件
echo "ARCH = $2" >  config.mk # 创建config.mk文件,输入ARCH = arm
echo "CPU = $3" >> config.mk # 继续输入cpu = arm920t
echo "BOARD = $4" >> config.mk # 继续输入BOARD = smdk2400

[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk # 若第五个参数非空且非NULL,则继续输入VENDOR = ***

[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC = $6" >> config.mk # 若第六个参数非空且非NULL,则继续输入SOC = s3c24x0

#
# Create board specific header file
# 创建单板的特殊头文件
if [ "$APPEND" = "yes" ]   # 若APPEND为yes
then
    echo >> config.h        # 则在config.h中另起一行追加内容
else
    > config.h      # 创建新的config.h文件
fi
echo "/* Automatically generated - do not edit */" >>config.h
echo "#include <configs/$1.h>" >>config.h # 输入#include<configs/smdk2400.h>

exit 0

你可能感兴趣的:(配置,makefile,u-boot,mkconfig)