文件分析:
1、.gitignore。是git工具的文件,git是一个版本管理工具。
2、arm_config.mk是Makefile文件,在将来的某个Makefile会调用该文件。
3、changlog相关的三个文件,修改记录文件,这些文件记录了这个uboot项目版本变迁以及每个版本的改变。
4、config.mk也是Makefile文件,是很重要的一个文件。
5、copying,版权申明,GPL许可的开源代码。
6、CREDITS,鸣谢。
7、image_split,脚本文件,用于分割uboot的,由于uboot的启动分为两节阶段,这里将uboot代码,分成BL1。
8、MAINTAINNESS,维护uboot的社区工作者。
9、MakeAll,bash脚本文件,帮助编译uboot的。
10、mk,脚本文件,快速编译的脚本文件。就是编译uboot的几个指令的集合。
11、Makefile,uboot源代码的主Makefile文件,整个uboot编译的纲领。
12、mkconfig,很重要的一个文件,是uboot的主要配置脚本,uboot的可移植性很大程度上是这个脚本维护的。
13、mkmovi,一个脚本文件,和iNand,SD卡的启动有关。
14、readMe
15、rule.mk,这个文件是uboot的Makefile使用的规则,本身很重要,不过不分析。
文件夹分析:
1、api,硬件无关的功能函数的API,这些函数是uboot本身所使用的。
2、api_examples,API相关的测试示例的代码。
3、board,board是板的意思,也就是我们这里的开发板,所以这个文件下的每个文件都代表一款开发板,这个文件夹下存放的文件都是用来描述这个开发的信息的。
配置的目的,就是选择哪个文件夹,选择哪个开发板。所以开发板越多,相应的board文件中的文件就越多,于是乎uboot新增一种机制,board目录下不直接放开发板的代码,而是在board目录下放各个厂商的文件夹,然后在各个厂商的文件夹下再放,这个厂商所生产的开发板,但是先前的思路不是这样的,所以为了兼容性,board文件夹下的文件很乱,既有开发板的文件,也有各个厂商的目录,不是对应厂商的开发板,都放在了对应厂商的文件夹下,而是根据时间的不同,为了兼容性,放置在正确的位置上。
所以这里就造成了麻烦,不同的开发板,配置的路径可能是不同的,所以需要修改。
4、common,普通的,架构无关的,与硬件无关的,普遍适用的一些代码,例如,控制台的实现,crc校验,但是更多的是cmd开头的,uboot的命令系统,和env开头的,环境变量相关的。
5、cpu,这个目录都是和soc相关的,里面存放的代码都是soc相关初始化和控制代码(譬如cpu,中断,串口与soc内部外设的,包括起始代码start.S也在这里)。里面有很多子文件夹,一个子文件夹就是一个soc系列。严格和硬件相关的,但是我们虽然开发板不同,但是soc都是相同的,所以不同改动这里的代码。
6、disk,磁盘相关的。
7、doc,文档目录,uboot的相关文档。
8、drivers,驱动相关的代码,这里面存放的都是从Linux源代码中移植过来的原封不动的Linux驱动,网卡驱动,iNand/SD卡、NandFlash等驱动。uboot实际的驱动就是Linux的驱动,但是由于uboot是裸机程序,所以移植会有不同。
9、examples,示例代码,没有用过。
10、fs,filessystem,文件系统,从Linux源码移植过来的,用来管理Flash等资源。
11、include,头文件目录,uboot和Linux在管理头文件上都采用同一种思路,把所有有关头文件全部集中存在include目录下,而不是放在对应的.c文件目录中。
12、lib_xxx开头的文件,具体架构有关的库文件
例如:lib_arm:arm架构使用的一些库文件
lib_generic:所有架构通用的。
13、licfd,设备树相关的,Linux内核在3.4左右版本的时候,更改了启动传参的机制,改用设备树进行启动参数的传递,进行硬件信息的描述,后面会介绍。
14、nand_spl,Nand相关的,我们这里使用的是iNand。
15、net,网络相关的,例如uboot中的tffp,nfs,ping命令等。
16、oneNand开头的,是oneNand相关的,是三星加的。
17、post,不知道啥东西。
18、sd_fusing,实现了烧录uboot镜像到SD卡的代码
19、tools,工具类的代码,mkimage等。