文件夹分析
(1)api:提供了uboot在执行时用到的一些函数,这些函数都是硬件无关的,所以和我们的移植没多大关系
(2)api_examples:api的示例代码
(3)board:开发板相关的文件夹,这个文件夹里面存放的一个文件夹对应一款开发板或者是一个芯片厂商。我们在config配置的时候就是根据这个文件夹下面的子文件夹来选择开发板信息。需要注意一点,由于历史原因,一开始开发板种类比较少,所以board存放的子文件夹就是对应的开发板,但是随着电子信息的发展,开发板越来越多,所以就在uboot文件夹下的子文件改成了芯片厂商的名字,然后在芯片厂商的文件夹下面再存放它们的开发板信息。我们在从移植的角度来讲,uboot的配置阶段就是确定这些文件夹的路径,寻找这些信息,从而来确定我们所使用的的开发板,所以当board文件夹的目录改变时,将会改变文件的路径,如果不修改mkconfig和Makefile相关部分,编译的时候就会提示一些文件找不到,其根本原因就是文件的存放路径和实际的路径不同。
(4)common:这个文件夹下放的是一些与具体硬件无关的普遍适用的一些代码。譬如控制台实现crc校验的。但是更多的主要是两类:一类是cmd开头的,是用来实现uboot的命令系统的;另一类是env开头的,是用来实现环境变量的。
(5)cpu:这个文件夹存放的是SoC相关的初始化和控制代码(比如 串口、中断等SoC内部外设,其中启动文件start.S也在这个文件夹中)
(6)disk:磁盘相关的代码。
(7)doc:文档目录。里面存放的是uboot相关的说明明档。
(8)drivers:驱动。里面存放的是从linux中扣出来的一些必要的驱动,例如网卡 Inand/SD卡等,不同之处是uboot是一个裸机程序,而linux是一个操作系统,所以在驱动的移植时会有所不同。
(9)examples:示例代码
(10)fs:filesystem文件系统。uboot虽然是裸机程序,但是它里面的文件管理和linux一样,使用了文件系统来进行管理,文件系统在一些单片机上面也有,它并不是操作系统所特有的。
(11)include:头文件目录。uboot中所有的头文件都是存放在这个文件下面的,所以在uboot中头文件包含时路径结构要在这里去找。
(12)lib_开头的一些文件夹。(典型的lib_arm和lib_generic)架构相关的库文件。譬如lib_arm里面就是arm架构使用的一些库文件。lib_generic里是所有架构通用的库文件。这类文件夹中的内容移植时基本不用管。
(13)libfdt。设备树有关的。linux内核在3.4左右的版本的时候更改了启动传参的机制,改用设备树来进行启动传参,进行硬件信息的描述。
(14)nand_spl。nand相关的代码。
(15)net。网络相关的代码,例如ping tftp nfs命令都是在这个文件夹下面实现的。
(16)onenand开头的,是onenand相关的代码,是三星加的,标准uboot中没有。
(17)post。
(18)sd_fusing。这里面代码实现了烧录uboot镜像到SD卡的代码。
(19)tools。工具,里面是一些工具类的代码。譬如mkimage。