03_uboot的源码目录分析

一、文件夹

03_uboot的源码目录分析
(1)api。硬件无关的功能函数的API。 这些函数是uboot本身使用的,uboot移植时基本不用管。

(2)api_examples。API相关的测试事例代码。

(3)board。board是板的意思,就是开发板。
这个文件夹下放的每一个文件都代表一个开发板,描述该开发板的信息。(board目录下有多少文件夹就表示当前这个uboot已经被移植了多少个开发板,当前uboot支持多少个开发板)。

(4)common 。(普通的普遍的)这个文件夹放一些具体硬件无关的普遍的适用的代码。如控制台实现、crc校验。
主要是两类:一类是cmd开头的,是用来实现uboot的命令系统的;另一类是env开头的,是用来实现环境变量的。

(5)cpu 。SoC相关的,存放代码是SOC相关初始化控制代码(cpu、中断、串口等SoC内部外设,初始化start.S)。里面很多子文件夹,每一个子文件夹就是一个SoC系列。这个文件与硬件很相关,移植的时候需要注意的。

(6)disk。 磁盘有关的。

(7)doc。文档目录,存放很多uboot相关文档,这些文档可以帮助我们理解uboot代码。是纯英文的,有点杂乱。

(8)drivers。驱动。放的是从linux源代码中扣出来的原封不动的linux设备驱动,开发板上必须用到的一些驱动,如网卡驱动、INAND/SD卡、NandFlash等的驱动。
(uboot中的驱动其实就是linux中的驱动,uboot在一定程度上移植了linux的驱动给自己用。)

(9)examples。示例代码。

(10)fs。filesystem,文件系统。这个也是从linux源代码中移植过来的,用来管理Flash等资源。

(11)include。头文件目录。

(12)lib_arm和lib_generic 。架构相关的库文件。
lib_arm里面就是arm架构使用的一些库文件。
lib_generic里是所有架构通用的库文件。
这类文件夹中的内容移植时基本不用管。

(13)libfdt。设备树有关的。linux内核在3.4左右的版本的时候更改了启动传参的机制,改用设备树来进行启动传参,进行硬件信息的描述了。

(14)nand_spl。nand相关的。

(15)net。网络相关的代码,uboot中的tftp nfs ping命令都是在这里实现的。

(16)onenand_bl1 和 onenand_ipl。onenand相关的代码,是三星加的,标准uboot中应该是没有的。

(17)post。不知道。

(18)sd_fusing。这里面代码实现了烧录uboot镜像到SD卡的代码。

(19)tools。工具类的代码。譬如mkimage。

文件夹里面比较重要的,分析过程中涉及到的有:board、common、cpu、drivers、include、lib_arm、lib_generic、sd_fusing

二、文件

03_uboot的源码目录分析
(1).gitignore。git工具的文件。

(2)arm_config.mk。后缀是.mk,是一个Makefile文件,将来在某个Makefile中会去调用它。

(3)三个Changelog。修改记录文件,该文件记录了这个uboot项目的版本变迁以及每个版本较上个版本修改的记录。正式的项目都有这些记录的。主要是给维护uboot的人用的。

(4)config.mk。Makefile文件。

(5)COPYING。版权声明,uboot本身是GPL许可证的。

(6)CREDITS。鸣谢。

(7)image_split。脚本,用来分割uboot.bin到BL1的。

(8)MAINTAINERS。维护者,就是当前在参与维护uboot源码的社区工作者。

(9)MAKEALL。脚本,应该是帮助编译uboot的。

(10)Makefile。是uboot源代码的主Makefile,将来整个uboot被编译时就是用这个Makefile管理编译的。

(11)mk。快速编译的脚本,其实就是先清理然后配置然后编译。可以直接./mk 快速编译

(12)mkconfig。uboot配置阶段的主要配置脚本。uboot的可移植性很大程度就是靠这个配置脚本在维护的。

(13)mkmovi。脚本,和iNand/SD卡启动有关

(14)README。所有的软件都有README,简单的使用说明书。

(15)rules.mk。uboot的Makefile使用的规则,本身非常重要。

需要认真看的有2个:mkconfig和Makefile。一个负责uboot的配置,一个负责编译。