U-boot 编译学习---make TQ2440_config命令执行过程---在 mkconfig 中
来源:互联网 发布:装饰效果图软件 编辑:程序博客网 时间:2024/05/22 10:46
上篇博客讲到 ./mkconfig TQ2440 arm arm920t TQ2440 samsung s3c24x0
# Parameters: Target Architecture CPU Board [VENDOR] [SOC]
TQ2440:Target(目标板型号)arm:Architecture (目标板的CPU架构)arm920t:CPU (具体使用的CPU型号)TQ2440:Boardsamsung:VENDOR(生产厂家名)s3c24x0:SOC
下面再来看看mkconfig脚本到底做了什么。
(1)确定开发板名称BOARD_NAME
在mkconfig脚本中有如下代码:APPEND=no # no表示创建新的配置文件,yes表示追加到配置文件中BOARD_NAME="" # Name to print in make outputTARGETS=""while [ $# -gt 0 ] ; do case "$1" in --) shift ; break ;; -a) shift ; APPEND=yes ;; -n) shift ; BOARD_NAME="${1%%_config}" ; shift ;; -t) shift ; TARGETS="`echo $1 | sed 's:_: :g'` ${TARGETS}" ; shift ;; *) break ;; esacdone[ "${BOARD_NAME}" ] || BOARD_NAME="$1"
环境变量$#表示传递给脚本的参数个数,这里的命令有6个参数,因此$#是6 。shift的作用是使$1=$2,$2=$3,$3=$4….,而原来的$1将丢失。因此while循环的作用是,依次处理传递给mkconfig脚本的选项。由于我们并没有传递给mkconfig任何的选项,因此while循环中的代码不起作用。
最后将BOARD_NAME的值设置为$1的值,在这里就是“TQ2440”。
(2)检查参数合法性
[ $# -lt 4 ] && exit 1[ $# -gt 6 ] && exit 1上面代码的作用是检查参数个数和参数是否正确,参数个数少于4个或多于6个都被认为是错误的。
(3)创建到目标板相关的目录的链接
## Create link to architecture specific headers#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="http://www.cnblogs.com/include2/asm/" cd ../include rm -rf asm-$2 rm -f asm mkdir asm-$2 ln -s asm-$2 asmelse cd ./include rm -f asm ln -s asm-$2 asmfi
若将目标文件设定为输出到源文件所在目录,则以上代码在include目录下建立了到asm-arm目录的符号链接asm。
其中的ln -s asm-$2 asm即ln -s asm-arm asm 。
rm -f asm-$2/archif [ -z "$6" -o "$6" = "NULL" ] ; then ln -s ${LNPREFIX}arch-$3 asm-$2/archelse ln -s ${LNPREFIX}arch-$6 asm-$2/archfi
建立符号链接include/asm-arm/arch ,若$6(SOC)为空,则使其链接到include/asm-arm/arch-arm920t目录,
否则就使其链接到include/asm-arm/arch-s3c24x0目录。
(事实上include/asm-arm/arch-arm920t并不存在,因此$6是不能为空的,否则会编译失败).
if [ "$2" = "arm" ] ; then rm -f asm-$2/proc ln -s ${LNPREFIX}proc-armv asm-$2/procfi
若目标板是arm架构,则上面的代码将建立符号连接include/asm-arm/proc,使其链接到目录proc-armv目录。
建立以上的链接的好处:编译U-Boot时直接进入链接文件指向的目录进行编译,而不必根据不同开发板来选择不同目录。
(4)构建include/config.mk文件
## Create include file for Make#echo "ARCH = $2" > config.mkecho "CPU = $3" >> config.mkecho "BOARD = $4" >> config.mk[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC = $6" >> config.mk上面代码将会把如下内容写入文件inlcude/config.mk文件:
ARCH = armCPU = arm920tBOARD = TQ2440VENDOR = samsungSOC = s3c24x0
(5)指定开发板代码所在目录
# Assign board directory to BOARDIR variableif [ -z "$5" -o "$5" = "NULL" ] ; then BOARDDIR=$4else BOARDDIR=$5/$4fi以上代码指定board目录下的一个目录为当前开发板专有代码的目录。
若$5(VENDOR)为空则BOARDDIR设置为$4(BOARD),否则设置为$5/$4(VENDOR/BOARD)。
在这里由于$5不为空,因此BOARDDIR被设置为samsung/TQ2440 。
(6)构建include/config.h文件
## Create board specific header file#if [ "$APPEND" = "yes" ] # Append to existing config filethen echo >> config.helse > config.h # Create new config filefiecho "/* Automatically generated - do not edit */" >>config.hfor i in ${TARGETS} ; do echo "#define CONFIG_MK_${i} 1" >>config.h ;done cat << EOF >> config.h#define CONFIG_BOARDDIR board/$BOARDDIR#include <config_defaults.h>#include <configs/$1.h>#include <asm/config.h>EOFexit 0
这里的“cat << EOF >> config.h”表示将输入的内容追加到config.h中,直到出现“EOF”这样的标识为止。
若APPEND为no,则创建新的include/config.h文件。
若APPEND为yes,则将新的配置内容追加到include/config.h文件后面。
由于APPEND的值保持“no”,
因此config.h被创建了,并添加了如下的内容:
/* Automatically generated - do not edit */#define CONFIG_BOARDDIR board/samsung/TQ2440#include <config_defaults.h>#include <configs/TQ2440.h>#include <asm/config.h>
总结:
下面总结命令make TQ2440_config执行的结果(仅针对编译目标输出到源代码目录的情况):(1) 创建到目标板相关的文件的链接
ln -s asm-arm asmln -s arch-s3c24x0 asm-arm/archln -s proc-armv asm-arm/proc
(2) 创建include/config.mk文件,内容如下所示:
ARCH = armCPU = arm920tBOARD = TQ2440VENDOR = samsungSOC = s3c24x0
(3) 创建与目标板相关的文件include/config.h,如下所示:
/* Automatically generated - do not edit */#define CONFIG_BOARDDIR board/samsung/TQ2440#include <config_defaults.h>#include <configs/TQ2440.h>#include <asm/config.h>
- U-boot 编译学习---make TQ2440_config命令执行过程---在 mkconfig 中
- U-boot 编译学习---make TQ2440_config命令执行过程---在 Makefile 中
- uboot编译学习----执行完make TQ2440_config后,在mkconfig 中
- uboot编译学习---执行make TQ2440_config后的,操作过程
- U-Boot编译过程完全分析-make ***_config 和mkconfig脚本,include/config.mk,include/config.h
- U-Boot编译过程完全分析-make ***_config 和mkconfig脚本,include/config.mk,include/config.h
- U-boot 编译学习---直接 make all 命令失败
- U-boot 编译学习---直接 make all 命令失败
- U-BOOT中mkconfig详解
- u-boot的编译及配置 mkconfig
- u-boot的编译及配置 mkconfig
- U-BOOT 中MKCONFIG源代码详解
- make: execvp: /xxx/u-boot-xxx/mkconfig: Permission denied .
- U-boot 编译学习--- U-boot 的编译链接过程
- u-boot命令-cmd编译过程
- u-boot-2016.09 make编译过程分析(一)
- u-boot-2016.09 make编译过程分析(二)
- u-boot-2016.09 make编译过程分析(一)
- 一张图让你知道全世界数据库领域的所有产品
- hdu1280简单hash
- 不稳定的autorelease
- linux下python学习笔记(七)函数1
- C/C++编译过程
- U-boot 编译学习---make TQ2440_config命令执行过程---在 mkconfig 中
- Ubuntu下ssh服务器文件操作命令
- 程序员的自我修养——库与链接的原理
- 自己看的(没什么技术含量)
- 汇编学习笔记--数据处理的两个基本问题
- 第七周—1.静态成员应用
- it巨头的组织架构图
- 整型 & unsigned vs signed & printf
- HDU 1999 不可摸数