我手里拿到的(未经过编译配置的)uboot的根目录下面一共有21个文件夹,17个文件。这22个文件夹分别是:api、api_examples、board、common、cpu、disk、doc、drivers、examples、fs、include、lib_arm、lib_generic、libfdt、nand_spl、net、onenand_bl1、onenand_ipl、post、sd_fusing、tools。17个文件分别是:.gitignore、arm_config.mk、CHANGELOG、Changelog_Samsung、CHANGELOG-before-U-Boot-1.1.5、config.mk、COPYING、CREDITS、image_split、MAINTAINERS、MAKEALL、Makefile、mk、mkconfig、mkmovi、README、rules.mk。
下面我们先来看看每个文件夹的作用及每个文件的功能:
(1)api文件夹:硬件无关的功能函数的API。uboot移植使基本不管,这些函数是uboot本身使用的。
(2)api_examples文件夹:API相关的测试示例代码。
(3)board文件夹:这个文件夹下本来有许多个文件夹,每个文件夹都代表一个开发板,有多少个文件夹就表示当前的uboot已经移植到了多少个开发版上面,我们的这里只有一个文件夹:samsung。考虑是九鼎科技移植的时候把其他的给删除了。
扩展:board下面如果有这么多文件夹,那我们怎么知道具体使用哪一个呢?
其实在uboot编译之前需要先配置的,配置的过程就是帮助我们来区分具体使用哪一个。
在原生的uboot下的board文件夹下那么多的文件夹,他们是怎样管控的呢?
一开始board下面就是各个开发板的目录,这样也挺好,但是到了后期,开发板越来越多,为了方便管控就增加了另一种机制,不再在board文件夹下面放开发板文件夹,而是增加一级芯片厂家目录,芯片厂家目录下面再放具体开发板文件夹。
(4)common文件夹:与具体硬件无关的普遍适用的一些代码。譬如:控制台实现、crc校验。其实主要是2类:一类是cmd开头的,用来实现uboot的命令系统的;一类是env开头的,用来实现环境变量的。
(5)cpu文件夹:这个文件夹是和具体soc相关的,里面存放的都是soc相关初始化和控制代码。(比如CPU的、中断的、串口的等soc的内部外设,包括start.S也在里面)。本来原生的uboot的cpu文件夹下面也有很多个文件夹,但是九鼎的移植把其他家的soc相关的文件夹给删除了。
注意:这个文件夹是和具体硬件相关的,因此移植时也要特别注意。但是因为九鼎的开发板和三星的原厂的开发板基本相似,所以具体移植时这里基本也不做改动。
(6)disk文件夹:磁盘相关的,不动。
(7)doc文件夹:介绍uboot的一些文档,可以帮助我们理解uboot,但是时全英文的而且比较杂乱,所以基本没用。
(8)drivers文件夹:里面存放的都是从linux源代码中抠出来的一些驱动,比如:网卡驱动、iNand/SD卡的驱动、NandFlash等的驱动。但是因为这里时裸机还没有跑操作系统,所以会有不同。起始uboot就是移植了一些linux中的驱动给自己用。
(9)examples文件夹:一些示例代码,没用。
(10)fs文件夹:文件系统,这个也是从linux中移植过来的,用来管理flash等资源。
(11)include文件夹:头文件目录。uboot和linux kernel在管理头文件时都采用了同一种方式,就是把所有的头文件全都放在这个目录下,而不是头文件跟着自己对应的c文件。所以在uboot中头文件包含时要在这里去找。
(12)lib_arm、lib_generic文件夹:一些和架构相关的文件。典型的如:lib_arm、lib_generic,lib_arm时和arm架构相关的文件,lib_generic是所有架构通用的库文件,这类文件夹中的内容移植时基本不用管。
(13)libfdt文件夹:设备树相关。linux在差不多3.4版本的时候改用了采用设备树来进行启动传参的机制和硬件信息的描述。
(14)nand_spl文件夹:因为是采用nand的和九鼎开发板(inand)不符,所以不涉及。
(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。
阅读(2179) | 评论(0) | 转发(0) |