一、使用板级配置命令:make smdk6410_config,然后在根目录下面makefile中找到
#########################################################################
## ARM1176 Systems
#########################################################################
smdk6410_noUSB_config \
smdk6410_config : unconfig
@mkdir-p $(obj)include $(obj)board/samsung/smdk6410
@mkdir-p $(obj)nand_spl/board/samsung/smdk6410
@echo"#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h
@if[ -z "$(findstring smdk6410_noUSB_config,$@)" ]; then \
echo"RAM_TEXT = 0x57e00000" >>$(obj)board/samsung/smdk6410/config.tmp;\
$(MKCONFIG)$(@:_config=) arm arm1176 smdk6410 samsung s3c64xx; \
else \
echo"RAM_TEXT = 0xc7e00000" >>$(obj)board/samsung/smdk6410/config.tmp;\
$(MKCONFIG)$(@:_noUSB_config=) arm arm1176 smdk6410 samsung s3c64xx; \
fi
@echo"CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk
#########################################################################
## ARM1176 Systems
#########################################################################
1、 通常,make会把其要执行的命令行在命令执行前输出到屏幕上。当我们用“@”字符在命令行前,那么,这个命令将不被make显示出来。
2、 @mkdir -p $(obj)include$(obj)board/samsung/smdk6410创建目录$(obj)=/,如果目录存在则不创建
3、 @mkdir -p $(obj)nand_spl/board/samsung/smdk6410同理
4、 @echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h
>表示创建创建一个config.h文件,并且将#define CONFIG_NAND_U_BOOT添加到里面。
>>表示在某个文件里面追加内容。
5、 "$(findstringsmdk6410_noUSB_config,$@)"<====>” ”小知识:
$(findstring FIND,IN)
函数名称:查找字符串函数—findstring。
函数功能:搜索字串“IN”,查找“FIND”字串。
返回值:如果在“IN”之中存在“FIND”,则返回“FIND”,否则返回空。
函数说明:字串“IN”之中可以包含空格、[Tab]。搜索需要是严格的文本匹配。
示例:
$(findstring a,a b c)
$(findstring a,b c)
第一个函数结果是字“a”;第二个值为空字符。
6、 if [ -z"$(findstring smdk6410_noUSB_config,$@)" ] -z应该是表示取反的意思,即非空执行后面的句子
echo "RAM_TEXT = 0x57e00000">> $(obj)board/samsung/smdk6410/config.tmp;\
$(MKCONFIG)$(@:_config=) arm arm1176 smdk6410 samsung s3c64xx; \
首先将RAM_TEXT = 0x57e00000追缴到config.tmp里面,然后执行$(MKCONFIG)$(@:_config=)arm arm1176 smdk6410 samsungs3c64xx;
7、$(MKCONFIG) $(@:_config=) arm arm1176 smdk6410 samsung s3c64xx;
MKCONFIG :=$(SRCTREE)/mkconfig <=====>MKCONFIG = mkconfig,
$(@:_config=)意思是 空格替换掉_config,而$(@:_config)<===>smdk6410,补充小知识:
$(@D)
表示目标文件的目录部分(不包括斜杠)。如果“$@”是“dir/foo.o”,那么“$(@D)”
的值为“dir”。如果“$@”不存在斜杠,其值就是“.”(当前目录)。
8、@echo"CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk同样是一个追加信息。
二、我们知道了执行make smdk6410_config就相当于执行
mkconfig smdk6410 arm arm1176 smdk6410 samsung s3c64xx
$ 0 $1 $2 $3 $4 $5 $6
之后执行根目录下面的脚本文件 mkconfig看到首先有这么一段代码
1、while[ $# -gt0 ] ; 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 ;;
esac
done
while [ $# -gt 0 ]意思是当传入的参数个数大于0的时候执行后面的。
这几行代码的意思是,判断传入的第一个参数$1是否出现case下面四种情况,显然没有出现。补充小知识
2、[ "${BOARD_NAME}" ] ||BOARD_NAME="$1" 表示如果没有定义板子名称则给板子名称赋值$1,显然这里没有定义板子名。
3、[$# -lt 4 ] && exit 1 #判断传入参数的个数,如果小于4则退出,
[ $# -gt 6 ] && exit 1 #如果大于6也退出
4、if[ "${ARCH}" -a "${ARCH}" != "$2" ]; then
echo"Failed: \$ARCH=${ARCH}, should be '$2' for ${BOARD_NAME}"1>&2
exit1
意思是如果ARCH已经定义了并且定义为arm那么就打印后面的信息,显然条件不成立,跳过。
5、echo "Configuring for${BOARD_NAME} board..."#打印信息,这个有据可循的,你make smdk6410_config试试。
6、#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="../../include2/asm/"
cd../include
rm-rf asm-$2
rm-f asm
mkdirasm-$2
ln-s asm-$2 asm
else #显然条件不成立转到这里
cd ./include
rm-f asm
ln-s asm-$2 asm
fi
查看makefile源码中可以知道SRCTREE=OBJTREE所以执行else后面的内容
cd ./include
rm-f asm
ln -s asm-$2 asm 意思是建立一个asm临时文件指向asm-arm这个架构,举个例子,
include目录下面有很多asm开头的文件夹,执行这条指令后,我们这个asm就指向唯一的asm-arm了。
7、if[ -z "$6" -o "$6" = "NULL" ] ; then
ln-s ${LNPREFIX}arch-$3 asm-$2/arch
else
ln-s ${LNPREFIX}arch-$6 asm-$2/arch #一样建立一个链接文件
fi
意思是如果第六个参数为空或者null则执行then 否则执行else,显然不为空,同样是建立一个链接文件,LNPREFIX没有定义为空。
目前自己总结出来的(没学shell) -z表示取反;-o或操作;-a与操作。不知道对不对,等有网络了再求证吧!
8、if[ "$2" = "arm" ] ; then
rm-f asm-$2/proc
ln-s ${LNPREFIX}proc-armv asm-$2/proc
fi
同上不再赘述。
9、#
# Create include file for Make
echo "ARCH = $2" > config.mk
echo "CPU = $3" >> config.mk
echo "BOARD = $4" >> config.mk
[ "$5" ] && ["$5" != "NULL" ] && echo "VENDOR = $5">> config.mk
[ "$6" ] && ["$6" != "NULL" ] && echo "SOC = $6" >> config.mk
建立文件,追加。。
10、#Assign board directory to BOARDIR variable
if [ -z "$5" -o "$5" ="NULL" ] ; then
BOARDDIR=$4
else
BOARDDIR=$5/$4
Fi
这里定义了板子目录 Samsung/smdk6410
11、if[ "$APPEND" = "yes" ] #Append to existing config file
then
echo>> config.h
else
>config.h # Create new config file
fi
echo "/* Automatically generated - donot edit */" >>config.h
APPEND=no所以在当前目录 include下面创建config.h
11、fori in ${TARGETS} ; do
echo"#define CONFIG_MK_${i} 1" >>config.h ;
done
猜测应该是说targets里面存在i?显然为空不存在,跳过。
cat << EOF >> config.h
#define CONFIG_BOARDDIR board/$BOARDDIR
#include <config_defaults.h>
#include <configs/$1.h>
#include <asm/config.h>
EOF
打开config.h,输入上面的信息。
exit 0 应该是结束符
至此,整个板级配置分析完毕,有些地方不知道分析的对不对,等到了学校在验证吧!