2. uboot源码目录分析

本文内容来自对 《朱有鹏嵌入式linux核心课程》学习总结


uboot的源码目录分析

1.九鼎官方uboot和三星原版uboot对比

  • 以九鼎官方的uboot为蓝本来学习的,以三星官方的这份做对照。
  • 不同版本的uboot或者同一版本不同人移植的uboot,可能目录结构和文件内容都有所不同。自己移植时也可以根据需要去添加/删除/更改目录结构。
  • 九鼎在以三星的uboot为原材料进行移植时,把三星版本的uboot中很多不必要的文件夹,文件给删除掉了。这个删除把很多完全用不到的文件清除出去,减少了整体的文件数量,便于工作。

2.各文件介绍

  • .gitgnore:git工具的文件。
  • arm-config.mk:后缀是.mk,是一个Makefile文件。会被其他Makefile文件调用。
  • 三个Changelog文件:修改记录文件,该文件记录了这个uboot项目的版本变迁以及每个版本较上个版本修改的记录。正式的项目都有这些记录。主要给维护 uboot的人用。
  • confog.mkarm_config.mk差不多性质。
  • COPYING:版本声明,uboot本身是GPL许可证的。
  • CREDITS:鸣谢,里面记录了对uboot有贡献的人,感谢目录。
  • image_split:一个脚本,看说明是用来分割uboot.binBL1的。
  • MAINTAINERS:维护者,就是当前参与维护uboot源码的社区工作者。
  • MAKEALL:一个脚本,应该是帮助编译uboot的。
  • Makefile:这个很重要,是uboot源代码的主Makefile,将来整个uboot被编译时就是用这个Makefile管理编译的。
  • mk:快速编译的脚本,其实就是先清理然后配置然后编译。
  • mkmovi:一个脚本,和iNand/SD卡启动有关。
  • README:所有的软件都有README,简单的使用说明书。
  • rules.mk:这个文件是我们ubootMakefile使用的规则。

总结: 以上这些文件中,对我们比较重要,需要认真看的有2个:mkconfigMakefile。一个负责uboot的配置,一个负责编译。

3.各个文件夹介绍

  • api:硬件无关的功能函数的API。uboot移植时不用管,这些函数是uboot本身使用的。

  • api_example:API相关的测试示例代码。

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

    开发板越来越多,board目录下文件夹越来越多不方便管控。于是乎uboot就新增了一种机制,可以在board目录下不直接放开发板目录,而是在board下放厂家目录(vendor目录,以具体芯片厂商名字命名),然后将这个IC厂商的所有芯片开发板都丢到这个vendor目录下面去。所以大家会发现我们X210对应的开发板目录在board/samsung/x210。多了这层目录会影响配置阶段,在uboot的配置阶段要注意配置时的路径深度和实际存放要对应,不然配置后编译时找不到文件编译就会失败。注意一个细节就是历史原因造成的兼容性麻烦。最开始时board目录下就是开发板名字,后来才改成厂商名字的。但是因为要向前兼容,同一个厂商原来还是外面的开发板并没有挪移到厂商目录下面去。这样就造成后来的人不知道原委的感到很奇怪,感觉很混乱。

    注意:uboot的配置阶段(其实就是根目录下面的mkconfig脚本和Makefile中配置有关的部分)主要解决的问题就是在可移植性领域能够帮助我们确定具体的文件夹的路径,然后编译时可以找到应该找到的文件,才能编译成功。因此uboot目录下的不同会造成配置时的不同。如果移植时没注意这里肯定要失败。

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

  • cpu:这个目录是SoC相关的,里面存放的代码都是SoC相关初始化和控制代码(譬如cpu的,中断的,串口等SoC内部外设的,包括起始代码start.s也在这里)。里面有很多子文件夹,每一个子文件夹就是一个SoC系列。
    **注意:**这个文件夹是严格和硬件相关的,因此移植时也是要注意的。但是因为这个文件夹内都是SoC有关的,我们自己开发板和三星的开发板虽然板子设计不同但是SoC都是同一个,因此实际移植时这个目录几乎不用动。

  • disk:磁盘有关的。

  • doc:文档目录,里面存放了很多uboot相关文档,这些文档可以帮助我们理解uboot代码。

  • driver:驱动。从linux源代码中扣出来原封不动的linux设备驱动,主要是开发板上必须用到的一些驱动,如网卡驱动,iNand/SD卡,NandFlash等的驱动。(uboot中的驱动其实就是linux中的驱动,uboot在一定程序上移植了linux的驱动给自己用。但是linux是操作系统而uboot只是裸机程序,因此这种移植会有不同,uboot中的驱动其实是linux中的驱动的一部分)

  • example:示例代码。

  • fs:文件系统也是从linux源代码中移植过来的,用来管理Flash等资源。

  • include:头文件目录。

  • lib开头的一索。(典型的lib_armlib_generic)架构相关的库文件。譬如lib_arm里面就是arm架构使用的一些库文件。lib_generic里是所有架构通用的库文件。这类文件夹中的内容移植时基本不用管。

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

  • nand_splnand相关的。

  • net:网络相关的代码,譬如uboot中的tftp, nfs, ping命令。

  • onenand开头的,是onenand相关的代码,是三星加的,标准uboot中应该没有的。

  • post:不知道。

  • sd_fusing:这里面代码实现了烧录uboot镜像到sd卡的代码。

  • tools:工具类代码,譬如mkimage

总结: 文件夹里比较重要的有:board, common, cpu, drivers, include, lib_arm, lib_generic, sd_fusing

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lzg2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值