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文件分析结束
配置的命令是 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文件分析结束
相关文章推荐
- 09课02节 u-boot-1.1.6分析之Makefile结构分析
- u-boot分析之Makefile结构分析---编译
- 伟东山视频自学笔记——第9课第2节 u-boot分析之Makefile结构分析
- u-boot分析之Makefile结构分析
- “第09课第2节 u-boot分析之Makefile结构分析”之学习笔记
- 04-S3C2440u-boot学习之u-boot分析(2)之Makefile结构分析
- itop4412 uboot 学习详细记录四丶Exynos4412 编译Makefile的配置文件config.mk分析)
- u-boot分析之顶层Makefile、mkconfig结构分析
- u-boot 2014-10 Makefile 配置过程分析
- U-boot分析第1章------------------Makefile(配置过程)
- u-boot源码配置原理分析
- U-boot工程的结构分析
- u-boot的Makefile分析
- u-boot-1.1.6 源码分析(1)--总体结构
- “本命年计划”001—U-boot顶层Makefile的详细分析总结(结合众多网上高手资料)
- u-boot的Makefile分析
- U-Boot顶层Makefile分析
- U-Boot的Makefile分析
- u-boot的Makefile分析