0K6410学习之make_smdk6410_config


一、使用板级配置命令: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

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  应该是结束符

至此,整个板级配置分析完毕,有些地方不知道分析的对不对,等到了学校在验证吧!

                                       

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值