U-BOOT中mkconfig详解

来源:互联网 发布:冬天男鞋推荐知乎 编辑:程序博客网 时间:2024/05/16 14:10

在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 <wd@denx.de>#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# 创建连接文件,连接相应架构的具体头文件,名为asmif [ "$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的连接,名为asmelse                 # 若源代码顶层目录和输出目录相同    cd ./include # 进入include目录    rm -f asm    # 移除asm    ln -s asm-$2 asm  # 创建与asm-arm的连接,名为asmfirm -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/archelse    ln -s ${LNPREFIX}arch-$6 asm-$2/arch # 创建asm/arch-s3c24x0的连接文件,名字为asm-arm/archfiif [ "$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/procfi## Create include file for Make# 创建make包含的文件echo "ARCH   = $2" >  config.mk # 创建config.mk文件,输入ARCH = armecho "CPU    = $3" >> config.mk # 继续输入cpu = arm920techo "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为yesthen    echo >> config.h        # 则在config.h中另起一行追加内容else    > config.h      # 创建新的config.h文件fiecho "/* Automatically generated - do not edit */" >>config.hecho "#include <configs/$1.h>" >>config.h # 输入#include<configs/smdk2400.h>exit 0
0 0
原创粉丝点击