ARM uboot 的源码目录分析

news2024/9/23 17:14:55

一、uboot的源码目录分析1

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

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

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

(3) 九鼎在以三星的 uboot 为原材料进行移植时,把三星版本的 uboot 中很多不必要的文件夹、文件给删除掉了。这个删除把很多完全用不到的文件清除出去,减少了整体的文件数量,便于工作。


2、各文件介绍

在这里插入图片描述

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

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

在这里插入图片描述

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

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

(10) Makefile。这个很重要,是 uboot 源代码的主 Makefile,将来整个 uboot 被编译时就是用这个 Makefile 管理编译的,所以我们在下个课程中研究 uboot 配置编译过程时就要分析这个 Makefile。

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

在这里插入图片描述

(12) mkconfig。这个很重要,是 uboot 配置阶段的主要配置脚本。uboot 的可移植性很大程度就是靠这个配置脚本在维护的。我们在下个课程中研究 uboot 配置编译过程时就要分析这个配置脚本。

在这里插入图片描述

(13) mkmovi。暂时不去管他,一个脚本,和 iNand/SD 卡启动有关。

(14) README。所有的软件都有 README,一般拿到一个东西要先读 README,这个东西其实就是个简单的使用说明书。

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

总结:以上这些文件中,对我们比较重要,需要认真看的有 2 个:mkconfig 和 Makefile。一个负责 uboot 的配置,一个负责编译。我们在第四部分的课程中会详细讲解分析这两个东西。


二、uboot 的源码目录分析2

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

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

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

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

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


三、uboot 的源码目录分析3

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

在这里插入图片描述

(5) cpu这个目录是 SoC 相关的,里面存放的代码都是 SoC 相关初始化和控制代码(譬如 CPU 的、中断的、串口等 SoC 内部外设的,包括起始代码 start.S 也在这里)。里面很多子文件夹,每一个子文件夹就是一个 SoC 系列。

注意:这个文件是严格和硬件相关的,因此移植时也是要注意的。但是因为这个文件夹内都是 SoC 有关的,我们自己的开发板和三星的开发板虽然板子设计不同,但是 SoC 都是同一个,因此实际移植时这个目录几乎不用动

(6) disk。磁盘有关的,没研究过,没用过。

(7) doc。文档目录,里面存放了很多 uboot 相关文档,这些文档可以帮助我们理解 uboot 代码。但是因为是纯英文的,而且很杂乱,所以几乎没用。

(8) drivers。顾名思义,驱动。这里面放的就是从 linux 源代码中扣出来的原封不动的 linux 设备驱动,主要是开发板上必须用到的一些驱动,如网卡驱动、iNand/SD卡、NandFlash 等的驱动。要知道:uboot 中的驱动其实就是 linux 中的驱动,uboot 在一定程度上移植了 linux 的驱动给自己用。但是 linux 是操作系统而 uboot 只是个裸机程序,因此这种移植会有不同,让我说: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。


源自朱友鹏老师.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/181615.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

剑指 Offer 第8天

目录 剑指 Offer 10- I. 斐波那契数列 剑指 Offer 10- II. 青蛙跳台阶问题 剑指 Offer 63. 股票的最大利润 剑指 Offer 10- I. 斐波那契数列 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N)&#xf…

java并发编程面试题目及答案2(持续更新)

22、利用原子类手写 CAS 无锁 /** * 利用 cas 手写 锁 */ public class AtomicTryLock {private AtomicLong atomicLongnew AtomicLong(0);private Thread lockCurrentThread; /** * 1 表示锁已经被获取 0 表示锁没有获取 利用 cas 将 0 改为 1 成功则表示获取锁 * return */…

Linux find 命令

Linux find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。语法find path -option [ -pr…

微服务-高并发-思路

一、为什么选择Go语言 Go 语言相对其它语言具有几点天然的优势: 语法简单,上手快性能高,编译快,开发效率也不低原生支持并发,协程模型是非常优秀的服务端模型,同时也适合网络调用部署方便,编译…

C语言深度解剖-关键字(3)

目录 1.关键字 sizeof C语言基本数据类型 认识 sizeof sizeof 相关扩展: 2. signed 与 unsigned 关键字 整形在内存的存储 如何快速转换二进制 写在最后: 1.关键字 sizeof C语言基本数据类型 以下是C语言基本的数据类型: 定义变量的…

Leetcode:37. 解数独(C++)

目录 问题描述: 实现代码与解析: 回溯: 原理思路: 问题描述: 编写一个程序,通过填充空格来解决数独问题。 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列…

分布式链路追踪SkyWalking进阶实战之RPC上报和WebHook通知(三)

目录 1.自定义SkyWalking链路追踪配置 1.1 什么是TraceId 1.2 使用的背景 1.3 编码 2.SkyWalking-RocketBot性能剖析 3.SkyWalking链路追踪-日志和RPC上报实战 4.源码部署 Apache SkyWalking 5.SkyWalking链路追踪-告警模块和WebHook通知《上》 6.SkyWalking链路追踪-…

对技术类的管理和绩效的一些想法

大家好: 我是烤鸭。看完春晚小品的心情(除了神马组合),就跟下面这哥们一样,尬的抠脚。再加上初一跟家人出去一趟,消费是真的复苏了,哪哪都排队。本来还想去洗温泉,给商家打电话一直占线…就能想象有多少人了…

7. 初步认识线程同步

前言:一旦接触到多线程编程,那么线程之间的同步就显得非常重要了。c/c#/java等高级语言都有自己的线程库,当然也提供了线程同步的API接口。打个比方,在C/QT中,线程的同步有以下几种方式:互斥锁、信号量、条…

2、SPSS的基本知识

目录 一、SPSS软件的安装和启动 二、SPSS的基本操作环境 (1)数据编辑窗口(主程序窗口) (2)SPSS结果输出窗口 三、SPSS软件的退出 四、SPSS软件的三种基本使用方式 五、SPSS数据的结构和定义方法 1.…

单链表——简单的增删查改

前言:上次介绍了顺序表,这次我要分享对单链表的一些简单理解,主要框架与上次大致相同,内容主要是单链表的增删查改,适用于初学者,之后会继续更新一些更深入的内容。同时,这也仅仅是我个人对所学…

不完全微分PID控制算法及仿真

在 PID控制中,微分信号的引入可改善系统的动态特性,但也易引进高频干扰,在误差扰动突变时尤其显出微分项的不足。若在控制算法中加入低通滤波器,则可使系统性能得到改善。克服上述缺点的方法之一是在 PID算法中加入一个一阶惯性环…

pdf如何合并,用这个方法又快又好使

我们在整理文档的时候经常被要求最后提交的得是PDF,所以有时候手头上的文档有多份,但最后还得整合成一份PDF才行。合并PDF后我们才可以进行后续的操作,所以学会如何快速合并PDF很重要。要把多个文档整合到一起,借助下面这些工具就…

一文带你了解学习python的用处及好处,建议收藏

目录 学习Python能做什么? Python的用途有哪些 普通人学习python有什么好处 用处,很重要的呢 今天这一讲很关键,如果你都不知道python的好处,以及python的用处,那你python就算是白学了 学习Python能做什么&#xf…

【目标检测】------rcnn、fastrcnn、fasterrcnn

RCNN流程图 sppnet流程图 fastRcnn fasterrcnn网络 RPN(Region Proposal Network)是Faster-RCNN网络用于提取预选框(也就是RCNN中使用selective search算法进行Region Proposal的部分),我们知道RCNN及Fast-RCNN中一个…

【Maven】属性管理

1. 属性 问题导入 定义属性有什么好处&#xff1f; 1.1 属性配置与使用 ①&#xff1a;定义属性 <!--定义自定义属性--> <properties><spring.version>5.2.10.RELEASE</spring.version><junit.version>4.12</junit.version> </prop…

第二章——CSS基础选择器,标签选择器,类选择器, id 选择器,通配符选择器

文章目录2.1 CSS选择器的作用2.2 CSS选择器分类2.3 CSS 基础选择器分类2.4 标签选择器2.5 类选择器2.5.1 多类名选择2.6 id选择器2.7 id选择器与类选择器的区别‘2.8 通配符选择器2.9 选择器对比2.1 CSS选择器的作用 选择器(选择符)就是根据不同需求把不同的标签选出来这就是选…

python图像处理(直方图增强)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面几篇文章谈到了对图像的处理,但是它们大多数都是对图像像素进行一些时空的转换,本身像素的内容并没有发生转变。比如旋转,镜像、移动、放大、缩小等等,像素还是这些像素,只…

Pytorch基础知识

Pytorch 基础知识 1.1 张量的概念 在PyTorch中&#xff0c;张量&#xff08;Tensor&#xff09;属于一种数据结构&#xff0c;它可以使一个标量、一个向量、一个矩阵&#xff0c;甚至是更维度的数组。类似于numpy中的数组 (ndarray),并且它们是可以相互转化的&#xff0c;在P…

python3:openpyxl解析和生成excel的常用方法

解析 打开已经存在的工作簿 openpyxl.load_workbook()方法 from openpyxl import load_workbookwb2 load_workbook(test.xlsx) print wb2.get_sheet_names() [Sheet2, New Title, Sheet1] 生成 创建一个工作簿 from openpyxl import Workbook# 一个工作簿(workbook)在创建…