您的位置:首页 > 其它

u-boot分析之Makefile结构分析----配置

2017-02-17 22:43 477 查看
我用的是 2440的开发板,

配置的命令是 make 100ask24x0_config ,这就要看 源码目录下的Makefile,在Makefile搜索
100ask24x0_config

100ask24x0_config : unconfig

@$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0

经过查 命令中的变量,我们可以把命令替换为

mkconfig 100ask24x0_config arm arm920t 100ask24x0 NULL s3c24x0

所以我们执行 make 100ask24x0_config命令 就相当于执行

mkconfig 100ask24x0_config arm arm920t 100ask24x0 NULL s3c24x0 命令 

然后 打开 mkconfig 脚本文件 分析里面的shell 脚本命令

----------------------------------mkconfig-----------------------------------

APPEND=no # Default: Create new config file

BOARD_NAME="" # Name to print in make output

while [ $# -gt 0 ] ; do

// 我们传入的参数是 100ask24x0_config arm arm920t 100ask24x0 NULL s3c24x0

// $1 $2 $3 $4 $5 $6

// $#(命令行参数的个数) 大于 0,执行do ,但是$1的值不在case 中,所以break

case "$1" in

--) shift ; break ;;

-a) shift ; APPEND=yes ;;

-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;

*) break ;;

esac

done

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

// 由上面知道BOARD_NAME为空,未定义 ,所以执行 || (或) 即给 BOARD_NAME赋值为

// 100ask24x0_config ,如果前面条件成立,后面的就不在判断

[ $# -lt 4 ] && exit 1

[ $# -gt 6 ] && exit 1

// 参数不小于4 也不大于6 所以不会退出,继续往下执行,会打印 “ ”中的语句

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

#

# Create link to architecture specific headers

#

if [ "$SRCTREE" != "$OBJTREE" ] ; then

// 判断 SRCTREE与OBJTREE是否相等,去Makefile 中寻找

// 找到如下的判断语句

// OBJTREE := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))

// 如果定义了BUILD_DIR,那么OBJTREE 就等于BUILD_DIR。如果没定义,那么

//OBJTREE就等于CURDIR ,显然BUILD_DIR := $(O) 属于没有定义,所以if 条件判断为假,

//
不执行then 后面的语句,直接执行else分支

//SRCTREE := $(CURDIR)

mkdir -p ${OBJTREE}/include

mkdir -p ${OBJTREE}/include2

cd ${OBJTREE}/include2

rm -f asm

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

LNPREFIX="../../include2/asm/"

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

// 建立软链接

// ln -s asm-arm asm

fi

rm -f asm-$2/arch

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

// 判断:s3c24x0 不等于0(-z s1 测试s1字符串长度是否为0)

// -o 是或的意思 ,所以前后都不成立,执行else分支

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

else

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

// 创建软链接 LNPREFIX="../../include2/asm/" 虽然,找到了,但是好像没有用

// 就相当于没有 ln -s arch-s3c24x0 asm-arm/arch

fi

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

rm -f asm-$2/proc

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

// 创建软链接 ln -s proc-armv asm-arm/proc

fi

#

# Create include file for Make

# 创建包含文件

echo "ARCH = $2" > config.mk

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

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

// 上面三条命令的结果如下

// ARCH =arm

// CPU =arm920t

// BOARD = 100ask24x0

// 然后创建 config.mk 并将第一条语句写入,后面两条追加进去

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

// 这条命令$5 为空 ,所以不成立

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

// 这条命令$6 为 s3c24x0,所以成立

#

# Create board specific header file

#创建板级特定的头文件

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

// 发现 APPEND=no 所以执行else 分支

then

echo >> config.h

else

> config.h # Create new config file

// 创建一个 config.h 头文件

fi

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

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

// 将以上两条语句写入 config.h 头文件

exit 0

// 然后退出,至此 mkconfig文件分析结束
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: