当前位置: > 华清远见教育科技集团 > 嵌入式学习 > 讲师博文 > **fsc100开发板uboot2010.03配置流程分析
**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>

发表评论
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)