这里我看的U-boot版本是2010.6版以后的版本,和之前的版本目录有些不同。学习过程主要是参考《深入理解BootLoader》这本书和看朱友鹏老师的嵌入式视频学的。
主目录
Uboot | 介绍 |
---|
├── api | 存放uboot提供的接口函数 |
├── arch | 和体系结构相关的代码 |
├── board | 目标板相关文件 |
├── common | 通用的代码,涵盖各个方面,已命令行处理为主 |
├── disk | 磁盘分区相关代码 |
├── doc | 文档,一堆README开头的文件 |
├── drivers | 驱动,很丰富,每种类型的设备驱动占用一个子目录 |
├── examples | 示例程序 |
├── fs | 文件系统,支持嵌入式开发板常见的文件系统 |
├── include | 头文件,已通用的头文件为主 |
├── lib | 通用库文件 |
├── nand_spl | NAND存储器相关代码 |
├── net | 网络相关代码,小型的协议栈 |
├── post | 上电自检程序 |
└── tools | 辅助程序,用于编译和检查uboot目标文件 |
U-boot的目录大致分为三大部分
第一部分主要是和处理器体系结构(arch),硬件开发板(board)有关。
ARCH目录
-
按照体系结构进行划分的,对ARM体系的CPU,则分析ARM目录下的结构。
arch/arm | 介绍 |
---|
├──cpu | 根据arm版本号进行划分,如arm11、armv7等。 |
├──include | 处理器用到的头文件 |
└──lib | 通用的汇编代码、C代码。包含了旧版的Lib_arm、Lib_ppc、Lib_i386 |
-
ps:从u-boot-2010.06版本开始把体系结构相关的内容合并,原先的cpu与lib_arch内容全部纳入arch中,并且其中增加inlcude文件夹;分离出通用库文件lib。
BOARD目录
-
里面主要放置不同开发板的相关代码。
INCLUDE目录
-
Uboot头文件等公用头文件,其中configs字目录下放置了与目标板相关的头文件,头文件里面包含了一些板级配置相关的宏定义。
第二部分主要是通用的函数和驱动相关的程序
COMMON目录
-
独立于处理器体系结构的通用代码,通常与硬件无关的普通适用代码。如:控制台代码(uboot的命令语句cmd)、CRC校验代码等。
DRIVER目录
-
通用的设备驱动,比如各种网卡、支持CFI的flash、串口和usb总线等。
FS目录
-
包含系统文件的代码,u-boot现在支持cramfs、fat、fdos、jffs2、yaffs和registerfs等文件系统。
LIB目录
-
通用多功能函数的实现。
NET目录
-
与网络相关的文件目录,BOOTP协议、TFTP协议、RARP协议和NFS文件系统的实现。
POST目录
-
上电自检文件目录。
第三部分主要是Uboot的应用程序、工具、测试程序或文档。
API目录
-
为其他应用程序提供过的硬件无关的功能函数的API。
DOC目录
-
开发使用文档。
EXAMPLES目录
-
示例代码,以helloworld为例,该示例是一个独立的程序。
tools目录
-
里面是一些工具类的代码。创建bin镜像文件等的工具。
各文件介绍
uboot | 介绍 |
---|
├── boards.cfg | 用于目标板配置参数文件。 |
├── config.mk | 定义交叉编译器、调试、优化、预处理、C编译器、链接选项、指定编译规则。 |
├── COPYING | 条款声明。 |
├── CREDITS | 鸣谢,里面记录了对uboot有贡献的人 |
├── helper.mk | 生成U-Boot.list文件,文件包含程序编译对象信息等。 |
├── MAINTAINERS | 维护者,就是当前在参与维护uboot源码的社区工作者。 |
├── MAKEALL | 一个脚本,应该是帮助编译uboot的。 |
├── Makefile | U-Boot的makefile,主要用来编译链接并生成U-Boot镜像。 |
├── mkconfig | 建立工程需要的一些软链接并创建配置文件config.h。 |
├── README | U-Boot的介绍信息。 |
├── rules.mk | U-Boot的Makefile使用的规则 |
└── snapshot.commit | U-Boot序列号和发布时间的快照。 |