uboot的源码目录分析1
九鼎在移植三星uboot时候把用不到的都删除了,减少文件数量,工作时候方便。
各文件介绍:
(1).gitignore git工具的文件,git是一个版本管理工具(类似的还有svn)这个文件与git有关与uboot本身是无关的,不用去管。
(2)arm_config.mk 后缀是mk是一个makefile文件,将来在某个makefile中会去调用它。
(3)changelog这类的文件,是修改记录文件,该文件记录了这个uboot的版本变迁以及修改的记录,正式的项目都有这种版本记录。主要给维护uboot的人用的。
(4)config.mk和arm_config.mk性质差不多
(5)COPYING 版权声明,uboot本身是GPL许可证的。
(6)CREDITS 鸣谢,里面记录了感谢
(7)image_split是一个把uboot进行分割的脚本
从uboot分出来BL1的,8K-128K,做一个secure boot
(8)MAINTAINERS 维护者,当前参与维护uboot源码的大牛,建议什么可以给他们写邮件
(9)makeall 帮助编译uboot的一个脚本
(10)Makefile 这个很重要,是uboot源代码的主Makefile,编译时就是用这个Makefile管理编译的,所以要具体分析
(11)mk 写出来的一个快捷编译的脚本
(12)mkconfig 这个很重要,是uboot配置阶段的主要配置脚本。uboot可移植性很大程度就是靠这个配置脚本在维护的。
(13)mkmovi. 暂时不管也是个脚本,和SD卡启动有关
(14)READMED 所有的软件都有一个README,是个简单的说明书。
(15)rule.mk 是我们uboot的makefile的规则,本身非常重要但是我们不去看它。
总结:以上这些文件重要的是mkconfig和makefile
uboot的源码目录分析2
(1)api. 硬件无关的功能函数API。uboot移植时候不用管它。控制台相关的getc,putc…..详细见readme
(2)api_examples API相关的测试事例代码
(3)board 放的好多的文件夹,是最庞大的文件夹。是开发板的开发的。一个文件夹就是一个开发板。当前uboot被移植到多少个开发板上了(支持多少个开发板)。一般是board下放厂家目录(芯片厂商),然后再放board;
多了这层目录会影响配置阶段,在uboot的配置节点要注意配置时的路径深度和实际存放要对应,不然配置后编译时找不到文件编译就会失败。注意一个细节就是历史原因造成的兼容性麻烦。
(4)common: 放的一些与具体硬件无关的普世代码,如控制台实现、CRC校验等。但更多是两类:一类的CMD开头的用来实现uboot的命令;另一类是env开头的,用来实现环境变量的。
(5)CPU 这个目录是SoC相关的,里面存放的代码是SoC相关的初始化代码和控制代码(譬如CPU的、中断的、串口等SoC内部外设的,包括起始代码start.S 是与具体的CPU硬件有关的)。里面很多子文件夹,每一个子文件夹就是一个SoC系列SoC相关的,
注意:这个文件夹是严格和硬件相关的,因此移植时候也是要注意的。这个文件夹内都是SoC相关,我们自己的开发板虽然板子不同但CPU都是同一个的话可以在实际移植的时候不用动。(补充:里面会有cpu的初始化,当进入一个uboot来goto 引导另一个uboot启动的时候需要禁掉初始化并修改串口相关的函数)
(6)disk 磁盘相关的,没用过
(7)doc 文档目录,里面存放了很多uboot相关的文档,因为是纯英文所以看的慢。
(8)drivers 驱动,linux源代码上扣出来的驱动,原封不动的。注意是开发板上必须用到的一些驱动,如网卡驱动,Nand/sd卡、nandflash等的驱动。uboot的驱动是linux种的驱动的一部分。
(9)example 示例代码
(10) fs filesystem 文件系统,这个也是从linux源代码中移植过来的,用来管理Flash等资源。
(11)include 头文件,uboot和kernel在管理头文件时候采用一个思路,把所有头文件全部放在include目录下,而不是头文件跟着自己对应的c文件。所以找头文件时候要在这里去找。
(12)lib_ 开头的: 典型的lib_arm等,架构相关的库文件。譬如lib_arm是架构使用的一些库文件。lib_generic里是所有架构通用的库文件。这类文件夹中的内容移植时基本不用管。
(13)libfdt 设备树有关的。 linux内核在3.4左右的版本时候更改了启动传参的机制,改用设备树来进行启动传参,进行硬件信息的描述。
(14)nand_spl nand相关的不讲
(15)net 网络相关的代码,譬如uboot中国的tftp nfs等等都在这里实现的
(16)onenand 三星的nand相关的,一般没有的
(17)sd_fusing 刷写sd卡的,烧录uboot镜像到sd卡的代码(分区等等等,要仔细研究的)
(18) tools 工具类的代码,如mkimage等等
文件夹里重要的:board\cpu\common\drivers\include\lib_arm\sd_fusing