**fsc100开发板uboot2010.03配置流程分析
时间:2016-12-14作者:华清远见
make fscc100_config 执行makefile中的fsc100_config 目标,我们在makefile中去找一下。 fsc100_config的依赖是unconfig ### @是不在屏幕上回显 ### 删除以前的配置文件 ### 这里有一个$(obj)变量,这个变量是在指定了输出目录时会有的,否则为空值。 fsc100_config: unconfig @$(MKCONFIG) $(@:_config=) arm arm_cortexa8 fsc100 samsung s5pc1xx ### @是不回显 ### $(MKCONFIG) 是 mkconfig是一个shell脚本,也就是说我执行这个目标的时候,这个脚本mkconfig这 个脚本会执行。脚本也是一个应用程序,也是可以传参的,后面就是给脚本传的从参数. ### CURDIR是makefile中的隐式变量,而变量CURDIR是没有定义的,没有定义的话,也就是空,即指当前目录。 @是目标 $(@:_config=)的作用:字符串替换功能。 $(A:patternA=patternB)意思就是将 A中 patternA格式的字符用patternB来代替。 在$(@:_config)中,@是make目标, 即:fsc100_config ,patternA是_config,patternB是空的。就是将fsc100_config的 _config去掉。 我们来先下mkconfig 脚本,在mkconfig脚本抬头的时候,对参数进行了说明。 @$(MKCONFIG) $(@:_config=) arm arm_cortexa8 fsc100 samsung s5pc1xx ./mkconfig fsc100 arm arm_cortexa8 fsc100 samsumg s5pc1xx =============================================================================== $0 $1 $2 $3 $4 $5 $6 ###这段话是在检验传参的值,有没有-- -a -n –t *这些参数 ### "$#" 将扩展成传递给脚本的参数的数目 ###[ $# -gt 0 ]的意思是参数的个数大于0 ### shift 将$*中的剩余的参数向左移动一个位置并减少$#的值1。 ### "$*"将扩展成传递给脚本的所有参数 ### BOARD_NAME行的${1%%_config}是截断字符串 ### TARGETS行,sed将$1中的_替换为空格。 ### 我们的输入中没有-- -a –n –t *这些参数 ### 定义变量BOARD_NAME =fsc100 ### 当参数数量小于4或大于6的时候出错,退出 ### 当ARCH变量是我们make的时候可以定义的(make ARCH=arm),判断其值与参数与$2 ### 是否相等,如果不相等则报错退出。 ### 命令的-a,即当它左右两 ### 边的表达式同时为真时返回真 在makefile中包含了config.mk 文件,里面有ARCH的定义必须要先配置。 在中断上打印提示语句 ### [ "$SRCTREE" != "$OBJTREE" ] 如果原文件目录和工程目录不相同 SRCTREE 是源码目录,在makefile中定义了是当前目录 OBJTREE 是工程目录 有时候为了不破坏源码目录的结构,保持完整性,建立自己的工程目录。 在自己的工程目录下,配置和编译,相关的文件也输出到工程目录。 uboot提供了对于不在源码目录里构建目标文件的支持。 ### else分支提供了原文件目录和工程目录相同的情况处理。 主要是创建符号链接asm以指向平台的头文件目录,配置这个软链接就实现了相关平台匹配。我们是匹配到了arm平台上。 cd ./include //进入include目录 rm -f asm //删除asm文件 ln -s asm-$2 asm //创建连接文件asm 指向asm-arm ### 先删除符号链接asm-arm/arch ###[ -z STRING ] “STRING” 的长度为零则为真。 ### -o 是或 ### [ -z "$6" -o "$6" = "NULL" ] “$6” 为空是真 ### 结果执行 else分支 ### 本例中在asm-arm下创建符号链接arch指向include目录下的arch-s5pcxx asm-asm --->/include/asm-arm/arch-s5pc100 我们的配置指向了具体的芯片s5pc100 ### arm平台下还要在目录arm-arm下创建创建符号链接以 ### 指向include/asm-arm/proc-armv ### >是重定向 > 是新建一个文件 >> 是在文件里追加 ### 命令之间使用 && 连接,实现逻辑与的功能。 只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行 ### 创建make使用的文件config.mk,还是在include目录下 在include目录下产生make的配置文件config.mk,其内容为定义几个变量:ARCH、CPU、 BOARD、VENDOR、SOC ARCH=arm CPU=arm_cortexa8 BOARD=fsc100 VENDOR=samsung SOC=s5pc1xx 53行进入了 include目录 ### $5 判断字符串为空或者为NULL为真 执行else分支 #### BOARDDIR = samsumg/fsc100 ### 在include目录下创建头文件config.h ### $APPEND = no 不执行,创建config.h 文件 ### ### 此处TARGETS为空,不执行 ###写config.h文件,EOF是分隔符,前后两个EOF中间的内容被写入了config.h文件 ### #defineCONFIG_BOARDDIRboard/$BOARDDIR ### #include<config_defaults.h> ### #include<configs/$1.h> 这是唯一跟板级相关的fsc100.h 是个五星级重要的文件。 ### #include<asm/config.h> 配置过程总结: 1、定义了变量BOARD_NAME = s5pc100 (25行) 2、在include目录中创建软连接,指向特点的架构 asm指向asm-arm(55行) 3、在include/asm-arm,也就是include/asm目录下创建软连接,指向特定的芯片 arch以指向同目录中的arch-s5pc100(63行) 4、在include/asm-arm(include/asm)下创建软连接 proc指向同目录的proc-armv 5、在include目录下产生make的配置文件config.mk,其内容为: ARCH=arm CPU=arm_cortexa8 BOARD=fsc100 VENDOR=samsung SOC=s5pc1xx 6、在include目录下,产生c文件用的头文件config.h,其内容为 #define CONFIG_BOARDDIR board/fsc100 #include<config_defaults.h> #include <configs/fsc100.h> #include <asm/config.h>
相关资讯
发表评论
|