1、uboot的目录分析

来源:互联网 发布:淘宝买东西受骗怎么办 编辑:程序博客网 时间:2024/06/05 00:57

以下内容源于朱有鹏《物联网大讲堂》课程的学习整理,如有侵权,请告知删除。


一、文件分析


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

(1)以九鼎官方的uboot为蓝本来学习,以三星官方版本为对照。

(2)不同版本的uboot或者同一版本不同人移植的uboot,目录结构和文件内容都会有所不同,即可以自己根据需要去添加/删除/更改目录结构。

(3)九鼎在以三星的uboot为原材料进行移植时,删除了很多不必要的文件夹/文件。


2、各文件介绍



(1).gitignore。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。鸣谢,里面记录了对uboot有贡献的人,感谢目录。

(7)image_split。一个脚本,看说明是用来分割uboot.bin到BL1的,暂时用不到,先不管。

(8)MAINTAINERS。维护者,就是当前在参与维护uboot源码的社区工作者。

(9)MAKEALL。一个脚本,应该是帮助编译uboot的。

(10)Makefile

  • 此文件是uboot源代码的主Makefile,用此文件来管理uboot的编译。

(11)mk。快速编译的脚本,其实就是先清理然后配置然后编译而已。

#!/bin/shmake distcleanmake x210_sd_configmake -j4
(12)mkconfig

  • 此文件是uboot配置阶段的主要配置脚本。uboot的可移植性很大程度依靠这个配置脚本。

(13)mkmovi。一个脚本,和iNand/SD卡启动有关。

(14)README。所有的软件都有README,其实就是个简单的使用说明书。

(15)rules.mk。这个文件是uboot的Makefile的使用规则。本身非常重要,但是不用分析。


总结:重要文件有mkconfig和Makefile,一个负责uboot的配置,一个负责编译。




二、目录分析



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

(2)api_examples。 API相关的测试事例代码。

(3)board

  • board文件夹下每一个文件都代表一个开发板,这个文件夹下面放的文件就是用来描述这一个开发板的信息的。
  • board目录下有多少个文件夹,就表示当前的uboot支持多少个开发板。
(4)common

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

(5)cpu

  • 这个目录是SoC相关的,存放与SoC相关初始化和控制的代码(譬如CPU的、中断的、串口等SoC内部外设的,包括起始代码start.S)。
  • 里面很多子文件夹,每一个子文件夹就是一个SoC系列。
  • 这个文件和硬件严格相关,移植时也是要注意的。

(6)disk。与磁盘有关。

(7)doc。文档目录,里面存放了很多uboot相关文档,这些文档可以帮助理解uboot代码。

(8)drivers

  • 存放的是从linux源代码中拷贝过来的linux设备驱动,主要是开发板上必须用到的一些驱动,如网卡驱动、Inand/SD卡、NandFlash等的驱动。
  • uboot中的驱动其实就是linux中的驱动,uboot在一定程度上移植了linux的驱动。

(9)examples。示例代码。

(10)fs

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

(11)include,头文件目录

  • uboot和linux kernel在管理头文件时都采用了同一个思路,即把所有的头文件全部集中存放在include目录下,而不是头文件跟着自己对应的c文件。
  • 因此在uboot中头文件包含时路径结构要在这里去找。

(12)lib_开头的目录,典型的如lib_arm和lib_generic

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

(13)libfdt

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

(14)nand_spl。nand相关的。

(15)net。

  • 网络相关的代码,譬如uboot中的tftp nfs ping都是在这里实现的。

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

(17)post。

(18)sd_fusing

  • 烧录uboot镜像到SD卡的代码。

(19)tools。里面是一些工具类的代码。譬如mkimage。

总结:重要的目录有board、common、cpu、drivers、include、lib_arm、lib_generic、sd_fusing等文件夹。


0 0
原创粉丝点击