015 JZ2440之U_boot(二)---配置

上一篇我们讲解了如何打补丁,编译,下载和运行。

https://mp.csdn.net/postedit/103271216

本章开始我们要细分讲解u-boot的启动流程和具体结构分析。

本章我们主要讲解在编译之前的配置:

首先我们拿到u-boot源码后,解压得到如下图结构:

015 JZ2440之U_boot(二)---配置

这里我们先不考虑补丁文件。只看源码中的内容。

拿到后再README文件中我们可以看到。

要编译u_boot先配置 make <board_name>_conifg,然后再 make。

要看一个工程先看这个工程的Makefile, u_boot也不例外。

我们先从顶层的Makefile来分析。

015 JZ2440之U_boot(二)---配置

具体分析一下:

OBJTREE        := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))  

就是 $(BUILD_DIR) 不存在的时候 OBJTREE=$(CURDIR),

如果$(BUILD_DIR)存在, 那么OBJTREE=$(BUILD_DIR)

这里由前面可以知道$(BUILD_DIR)=null,所以OBJTREE=$(CURDIR)

87行 SRCTREE        := $(CURDIR) , 所以  SRCTREE=OBJTREE

92行 MKCONFIG    := $(SRCTREE)/mkconfig, SRCTREE是当前目录所以 MKCONFIG = mkconfig

这个mkconfig也就是当前目录下面的mkconfig文件

在Makefile的前面我们看到OBJTREE、SRCTREE、MKCONIFG都定好了。

再往下看

打完补丁的u_boot会有100ask24x0_config这个选项:

015 JZ2440之U_boot(二)---配置

100ask24x0_config    :    unconfig
    @$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0

我们分析一下这句话。(功能主要是用来确定配置参数)。

@$(MKCONFIG) = mkconfig

$(@:_config=) = (100ask24x0_config = ) 即是把_config = 空 所以就是100ask24x0

那么最后就变成

mkconfig   100ask24x0    arm    arm920t    100ask24x0    NULL   s3c24x0

他们的参数编号分别是:

mkconfig   100ask24x0    arm    arm920t    100ask24x0    NULL   s3c24x0

$0               $1                   $2          $3              $4                  $5           $6

 

然后我们再分析一下上面找到的mkconfig的文件

第一部分:

015 JZ2440之U_boot(二)---配置

由于我们参数中没有case的所有情况($1没有--  -a   -n   *),所以执行下面这句话。

[ "${BOARD_NAME}" ] || BOARD_NAME="$1"    又因为BOARD_NAME为空,

所以BOARD_NAME="$1"  即  BOARD_NAME= 100ask24x0   

紧接着$#是表示参数总数。我们的参数是6个,不小于4也不大于6所以接着往下走。

015 JZ2440之U_boot(二)---配置

由上面分析得知,SRCTREE=OBJTREE,所以执行else部分:

程序进入到当前目录的include的子目录下,

47行  然后删除asm文件,

48行  创建asm-arm的连接脚本

51行  删除asm-arm目录下的arch文件夹

53行  $6 不等于 null所以执行56行

56行  LNPREFIX为空实际上就是创建arch-s3c24x0目录下的asm-arm/proc连接脚本

59行  条件成立

60行  删除asm-arm/proc的连接脚本

61行  重新创建asm-arm/proc指向proc-armv目录

接着第三部分

015 JZ2440之U_boot(二)---配置

67~73行  ARCH   =  ARM

               CPU      =  arm920t

               BOARD = 100ask24x0

               SOC      = s3c24x0

78行  APPEND = no所以执行82行

82行  创建config.h文件(config.h位于include目录下)

85行  把#include <configs/$1.h>添加到config.h文件中。

到这里我们的配置文件就完成了。

 

这里我们总结一下:

(1) 确定开发板名称BOARD_NAME = $1 (100ask24x0)

(2) 创建开发板的相关头文件链接:

     48行   ln -s asm-$2 asm

     56行  ln -s ${LNPREFIX}arch-$6 asm-$2/arch

     62行  ln -s ${LNPREFIX}proc-armv asm-$2/proc

(3) 创建顶层Makefile包含的文件include/config.mk

     ARCH   =  ARM

     CPU      =  arm920t

     BOARD = 100ask24x0

     SOC      = s3c24x0

(4) 创建开发板的相关头文件include/config.h