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

我用的是 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文件分析结束



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值