uboot文件结构
board:和一些已有开发板有关的文件. 每一个开发板都以一个子目录出现在当前目录中,比如说:SMDK2410,子目录中存放与开发板相关的配置文件
common:实现 u-boot 命令行下支持的命令,每一条命令都对应一个文件。例如 bootm 命令对应就是cmd_bootm.c。
cpu:与特定 CPU 架构相关目录,每一款 U-boot 下支持的 CPU 在该目录下对应一个子目录,比如有子目录arm920t 等。
disk:对磁盘的支持。
doc:文档目录。
drivers:U-boot 支持的设备驱动程序都放在该目录,比如各种网卡、支持 CFI 的 Flash、串口和 USB 等。
fs: 支持的文件系统,U-boot 现在支持 cramfs、fat、fdos、jffs2 和 registerfs
include:U-boot 使用的头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件和对文件系统支持的文件。该目录下 configs 目录有与开发板相关的配置头文件,如 smdk2410.h。该目录下的 asm 目录有与 CPU 体系结构相关的头文件,asm 对应的是 asm-arm.
lib_xxxx: 与体系结构相关的库文件。如与 ARM 相关的库放在 lib_arm 中。
net:与网络协议栈相关的代码,BOOTP 协议、TFTP 协议、RARP 协议和 NFS 文件系统的实现。
tools:生成 U-boot 的工具,如:mkimage, crc 等等
以smdk_2410
板为例,编译的过程分两部:
make smdk2410_config
make
以smdk_2410
为例,顺序分析Makefile
大致的流程及结构如下:
1 定义了源码及生成的目标文件存放的目录:
目标文件存放目录BUILD_DIR
可以通过make O=dir
指定。
如果没有指定,则设定为源码顶层目录。一般编译的时候不指定输出目录,则BUILD_DIR
为空。
其它目录变量定义如下:
#OBJTREE和LNDIR为存放生成文件的目录,TOPDIR与SRCTREE为源码所在目录:
OBJTREE := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
SRCTREE := $(CURDIR)
TOPDIR := $(SRCTREE)
LNDIR := $(OBJTREE)
export TOPDIR SRCTREE OBJTREE
2)定义变量 MKCONFIG
:
这个变量指向一个脚本,即顶层目录的mkconfig
。
MKCONFIG := $(SRCTREE)/mkconfig
export MKCONFIG
在编译U-BOOT
之前,先要执行
make smdk2410_config
smdk2410_config
是Makefile
的一个目标,定义如下:
smdk2410_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
unconfig::
@rm -f $(obj)include/config.h $(obj)include/config.mk \
$(obj)board/*/config.tmp $(obj)board/*/*/config.tmp
显然,执行# make smdk2410_config
时,先执行unconfig
目标,
注意不指定输出目标时,obj
,src
变量均为空,
unconfig
下面的命令清理上一次执行make *_config
时生成的头文件和makefile
的包含文件。
主要是 include/config.h
和 include/config.mk
文件。
然后才执行命令
@$(MKCONFIG) $(@:_config