015 JZ2440之U_boot(二)---配置
上一篇我们讲解了如何打补丁,编译,下载和运行。
https://mp.csdn.net/postedit/103271216
本章开始我们要细分讲解u-boot的启动流程和具体结构分析。
本章我们主要讲解在编译之前的配置:
首先我们拿到u-boot源码后,解压得到如下图结构:
这里我们先不考虑补丁文件。只看源码中的内容。
拿到后再README文件中我们可以看到。
要编译u_boot先配置 make <board_name>_conifg,然后再 make。
要看一个工程先看这个工程的Makefile, u_boot也不例外。
我们先从顶层的Makefile来分析。
具体分析一下:
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这个选项:
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的文件
第一部分:
由于我们参数中没有case的所有情况($1没有-- -a -n *),所以执行下面这句话。
[ "${BOARD_NAME}" ] || BOARD_NAME="$1" 又因为BOARD_NAME为空,
所以BOARD_NAME="$1" 即 BOARD_NAME= 100ask24x0
紧接着$#是表示参数总数。我们的参数是6个,不小于4也不大于6所以接着往下走。
由上面分析得知,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目录
接着第三部分
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文件中。
到这里我们的配置文件就完成了。
这里我们总结一下: