Linux 设备树: 了解设备树 dtb 文件的构成

news/2024/11/13 4:10:27/

自己不倒,别人推不倒。自己不想站起来,别人扶也扶不起来。

前言

  • 当前新版本的 Linux 内核 设备驱动框架,与设备树(Device Tree)结合密切,整体 设备树的设备驱动框架,比较的庞大,但又非常的经典。

  • 一个个的 设备树解析函数,都是前人【智慧】的结晶,了解 设备树的实现,了解设备树的解析,对Linux 设备驱动开发非常有利,并且可以大大提高开发编码能力

  • 虽然Linux 内核庞大、开源,但是Linux 内核各个模块的实现都是经典,非常适合学习深造

设备树 dtb 文件

  • 设备树 dtb 文件,由 设备树 源文件 (dts) 与 设备树头文件(dtsi,其实还有 dt-bindings 中的类似于 C 语言的设备树头文件 .h)通过 dtc 工具 生成的。

  • 设备树相关的规范:设备树并不是Linux 专用的,因为这是一个规范,只要符合规范,其他的系统,依旧可以使用 设备树。Linux 上设备树是当前比较完整的,并且开源、免费使用。

  • 设备树规范可以通过 https://github.com/devicetree-org/devicetree-specification 获取到,当前版本是 devicetree-specification-v0.4.pdf

  • 设备树 dtb 的文件组织构成

在这里插入图片描述

  • 一个生成好的设备树 dtb,文件的头部内容,就是 struct fdt_header,定义如下

  • Linux 内核 scripts\dtc\libfdt\fdt.h -> struct fdt_header

在这里插入图片描述

  • 这里可以知道, dtb 文件 的头部,前四个字节,应该是 FDT_MAGIC 0xd00dfeed

  • 通过二进制查看或者编辑 软件,查看一个设备树 dtb 文件,当前使用 EmEditor

在这里插入图片描述

  • 这里还有设备树 dtb 文件的总大小,也就是 设备树 dtb 文件 第二个 32位(5-8字节)

在这里插入图片描述

  • 设备树的其他信息,可以通过代码与 设备树规范、具体设备树 dtb 文件、设备树 源文件,查看对于,发现是一致的。这里就不再深入的分析

小结

  • 本篇主要是需要了解一下 设备树 dtb 文件,因为这个文件有 bootloader u-boot 载入了内存,当然可以有系统直接读取 设备树 dtb 文件并解析,也就是操作系统的设备树,需要载入 设备树 dtb 文件

  • 设备树 dtb 文件可以认为是 【扁平的】flat,如果需要方便的解析,需要【反扁平化】unflatten 操作,这个在 Linux 内核中,通过 unflatten_device_tree 进行设备树的展开操作,也就是把扁平的生成一个树形结构的设备树组织(内存中)

在这里插入图片描述

  • 了解设备树 dtb (扁平设备树)的构成,可以对了解设备树加载、反扁平化 unflatten、解析等操作有利。

http://www.ppmy.cn/news/1394593.html

相关文章

使用阿里CICD流水线打包Java项目到阿里的docker镜像私仓,并自动部署到服务器启动服务

文章目录 使用阿里CICD流水线打包Java项目到阿里的docker镜像私仓,并自动部署到服务器启动服务1、功能原理实现2、将自己的Java项目通过Git上传到阿里的代码仓库中,也可以通过绑定Gitee或者GitHub账号进行导入3、创建自己的阿里云镜像私仓3、进入阿里的C…

11 获取表中全部数据并打印

while(resultSet.next())循环获取每条记录 每个循环中循环获取每列 通过getMetaData获取列信息, resultSet.getXXX(第几列) XXX为java类型,对应数据库类型,列信息中可以获取到 所以判断第几行第几列的列数据库类型,转成java类型 从…

全新的分布式锁,功能简单且强大

分布式锁是分布式系统中一个极为重要的工具。 目前有多种分布式锁的设计方案,比如借助 redis,mq,数据库,zookeeper 等第三方服务系统来设计分布式锁。 tldb 提供的分布式锁,主要是要简化这个设计的过程,提…

动态规划16 | ● 583. 两个字符串的删除操作 ● *72. 编辑距离

583. 两个字符串的删除操作 https://programmercarl.com/0583.%E4%B8%A4%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E5%88%A0%E9%99%A4%E6%93%8D%E4%BD%9C.html 考点 子序列问题 我的思路 dp[i][j]的含义是,当两个字符串分别取前i和j个元素时,对应…

详解JavaScript中this指向

this 原理 this 是一个指针型变量,它指向当前函数的运行环境。 1.内存的数据结构 var obj { foo: 5 };2.函数 var obj { foo: function () {} };引擎会将函数单独保存在内存中,然后再将函数的地址赋值给foo属性的value属性。 由于函数是一个单独的…

一些规律、现象

图文部分由COPILOT生成。 规律详情 墨菲定律 墨菲定律(Murphys Law) 一件事可能出错时就一定会出错。 图:AI生成 破窗效应 破窗效应(Broken windows theory)是犯罪心理学理论。以一幢有少许破窗的建筑为例,如果那些窗没修理好&#xff0…

如何学好Python语言

学习Python:一场充满探索与实践的编程之旅 Python,作为一种解释型、交互式和面向对象的编程语言,近年来在数据科学、人工智能、Web开发等多个领域得到了广泛的应用。掌握Python,不仅可以提升个人的编程技能,还能够为未…

C语言动态内存的管理

前言 本篇博客就来探讨一下动态内存,说到内存,我们以前开辟空间大小都是固定的,不能调整这个空间大小,于是就有动态内存,可以让我们自己选择开辟多少空间,更加方便,让我们一起来看看动态内存的有…