设备树的理解与运用

设备树:
本质是一个文件,包含很多节点,每个节点里边是对设备属性的描述(包括GPIO,时钟,中断等等),其中节点(node)和属性(property)就是设备树最重要的两个概念。
路径一般在arch/arm/boot/dts、


工作流程:设备树dts文件被编译成dtb二进制文件,在boot loader运行时传递给操作系统。

为什么要整个设备树的概念?

传统的平台总线设备通过platform_device这一个结构体来描述,每个platform_device描述一个特定的外设,通过注册到平台总线上以保证内核和设备之间能通讯。然而,随着时间推移,外设越来越多,导致LinuxARM部分的设备配置代码杂乱重复,造成工作和维护难度加大。
于是设备树孕育而生,它提供了一种统一的硬件描述方式,相较之前的 platform_device更加灵活,轻便。
关键术语解读: DTSDTSIDTB 和 DTC

DTS:设备树源文件,可由我们直接编写,包含设备的结构,属性和连接关系。

DTSI:包含在DTS文件下,主要是用于定义一些可重用的部分,可以被多个DTS文件共享,提高可重用性。

DTB:DTS和DTSI文件编译得到的二进制文件。可被操作系统解析,在系统运行过程被灵活调用。

DTC:设备树的编译器,把DTS和DTSI文件编译成DTB文件的工具。

设备树编译

dtc -I dts -O dtb -o output.dtb input.dts
其中, `input.dts` 是输入的设备树源文件, `output.dtb` 是编译后的二进制设备树文件。

编译前确保在scripts/dtc/路径下有dtc编译器

如果没有生成相应的 dtc 可执行文件, 可以查看在内核默认配置文件中 CONFIG_DTC 是否使能

设备树反编译

dtc -I dtb -O dts -o output.dts input.dtb
input.dtb 是输入的二进制设备树文件, output.dts 是反编译后的设备树源文件。

设备树基本语法

1-根节点(Root Node)

整个设备的起点一般以/开始,后面加花括号

2-子节点

根字节的子项,用于表示具体设备,以下时子节点的数据格式。

1 )节点标签( Label)(可选):用于在设备树中引用该节点,其他节点也可引用。
2 )节点名称( Node Name ):字符串,通常是设备的名字,唯一!
3 )单元地址( Unit Address)(可选):是区分相同类型的设备的不同实例
4 )属性定义(Properties Definitions):是一组键值对,用于描述设备的配置和特性, 例如寄存器地址、中断号、时钟频率等
  (5)   子节点(Child Nodes):是当前节点的子项,进一步描述硬件设备的子组件或配置

3-reg属性

用于指定设备的寄存器地址和大小,提供设备树设备之间的寄存器映射关系。
(1 )单个值格式:
reg = <address size>;
适用于描述单个寄存器的情况,address 是设备的起始寄存器地址,可以是一个整数或十六进制值。size 表示寄存器的大小,即占用的字节数
2 )列表值格式如下所示:
reg = <address1 size1 address2 size2 ...>;
描述多个寄存器区域的地址和大小

4-address-cells 和 size-cells 属性

分别用于指定设备树中地址单元和大小单位的位数
#address-cells 属性它指定了设备树中地址单元的位数。地址单元是设备树中用于表示设备地址的单个单位。解释设备地址时应该使用多少位来表示 一个地址单元
默认情况下,#address-cells 的值为 2,例如,对于一个使用两个 32 位(4 字节)整数表示地址的设备,可以在设备树的根节点 中设置 #address-cells 属性为 <2>

#size-cells 属性指定了设备树中大小单元的位数
默认情况下, #size-cells 的值为 1,表示使用一个单元来表示一个设备的大小。
例如,对于一个使用一个 32 位( 4 字节)整数表示大小的设备,可以在设备树的根节点
中设置 #size-cells 属性为 <1>
示例:
node1 {
#address-cells = <1>;
#size-cells = <1>;
node1-child {
reg = <0x02200000 0x4000>;
// 其他属性和子节点的定义
};
};
#address-cells 的值为 <1> ,表示使用一个单元来表示地址,即2个字节。 #size-cells 的值也为 <1> ,表示 使用一个单元来表示大小。
该设备的地址是:0x02200000 地址的大小是:0x4000
node1 {
#address-cells = <2>;
#size-cells = <0>;
node1-child {
reg = <0x0000 0x0001>;
// 其他属性和子节点的定义
};
};

#address-cells = <2>表示用两个单位表示地址,#size-cells = <0>表示不用单元表示大小

地址部分: 0x0000 0x0001 被解释为两个地址单元,其中第一个地址单元为 0x0000 ,第二
个地址单元为 0x0001

5- model 属性

描述设备的型号或者名称,通常用于标识和区分不同的设备
my_device {
compatible = "vendor,device";
model = "My Device XYZ";
// 其他属性和子节点的定义
};
设备的型号或名称为 "My Device XYZ"

6-status 属性

描述设备或节点的状态
"okay":表示设备或节点正常工作,可用。
"disabled":表示设备或节点被禁用,不可用。
"reserved":表示设备或节点已被保留,暂时不可用。
"fail":表示设备或节点初始化或操作失败,不可用。
设备树可以动态地控制设备的启用和禁用状态。这对于在系统启动 过程中选择性地启用或禁用设备

7-compatible 属性

描述设备的兼容性信息,用于识别设备节点与驱动程序之间的匹配关系。
1 )单个字符串值:例如 "vendor,device",指定设备节点与特定厂商的特定设备兼容
(2)字符串列表:例如 ["vendor,device1", "vendor,device2"],指定设备节点与多个厂商设备兼容
3 )通配符匹配:例如 "vendor,*" ,用于指定设备节点与特定厂商的所有设备兼容。
my_device {
compatible = "vendor,device";
// 其他属性和子节点的定义
};
my_device 节点具有 compatible 属性,其值为 "vendor,device" 。这个值用于标识设备节点与特定厂商的特定设备兼容。
当设备树被 操作系统或设备管理软件解析时,会根据设备节点的 compatible 属性值来选择适合的驱动程序 进行设备的初始化和配置。

8-aliases 节点

用于定义设备别名,该节点位于设备树的根部,并具有节点路径 /aliases。
aliases {
mmc0 = &sdmmc0;
mmc1 = &sdmmc1;
mmc2 = &sdhci;
serial0 = "/simple@fe000000/seria1@11c500";
};
1 mmc0 别名与设备树中的 sdmmc0 节点相关联。通过使用别名 mmc0 ,其他设备节点
或客户端程序可以更方便地引用 sdmmc0 节点,而不必直接使用其完整路径。
2 mmc1 别名与设备树中的 sdmmc1 节点相关联。通过使用别名 mmc1 ,其他设备节点
或客户端程序可以更方便地引用 sdmmc1 节点,而不必直接使用其完整路径。
        ......
4 serial0 别名与设备树中的路径 /simple@fe000000/seria1@11c500 相关联。通过使用
别名 serial0 ,其他设备节点或客户端程序可以更方便地引用该路径,而不必记住整个路径字符
串。
其中,& 符号用于引用设备树中的节点。
需要注意的是, aliases 节点中定义的别名只在设备树内部可见,不能在设备树之外引用。

9-chosen 节点

传递和存储系统引导和配置的相关信息。它位于设备树的根部,并具有路径/chosen
1 bootargs:用于存储引导内核时传递的命令行参数。在引导过程中,操作系统或引导加载程序可以读取该属性来获取启动参数。
2 stdout-path:用于指定用于标准输出的设备路径。在引导过程中,操作系统可以使用该属性来确定将控制台输出发送到哪个设备,例如串口或显示屏。
3 firmware-name :用于指定系统固件的名称。它可以用于标识所使用的引导加载程序或固件的类型和版本。
4 linux,initrd-start linux,initrd-end :这些属性用于指定 Linux 内核初始化 RAM 磁盘(initrd )的起始地址和结束地址。
5 )其他自定义属性: chosen 节点还可以包含其他自定义属性,用于存储特定于系统引
导和配置的信息。这些属性的具体含义和用法取决于设备树的使用和上下文。
chosen {
bootargs = "root=/dev/nfs rw nfsroot=192.168.1.1 console=ttyS0,115200";
};
chosen 节 点 具 有 一 个 属 性 bootargs , 其 值 为 "root=/dev/nfs rw nfsroot=192.168.1.1 console=ttyS0,115200"。
通过这些命令行参数,操作系统或引导加载程序可以配置内核在引导过程中正确地加载 NFS 根文件系统,并将控制台输出发送到指定的串口设备。

10-device_type 节点

描述设备类型的节点,有助于操作系统或其他软件识别和处理设备
常见的设备类型包括但不限于:
1 cpu :表示中央处理器。
2 memory :表示内存设备。
3 display :表示显示设备,如液晶显示屏。
4 serial :表示串行通信设备,如串口。
5 ethernet :表示以太网设备。
6 usb :表示通用串行总线设备。
7 i2c :表示使用 I2C (Inter-Integrated Circuit) 总线通信的设备。
8 spi :表示使用 SPI (Serial Peripheral Interface) 总线通信的设备。
9 gpio :表示通用输入 / 输出设备。
10 pwm :表示脉宽调制设备。

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

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

相关文章

kubernetes集群yaml文件与kubectl工具

k8s集群中对资源管理和资源对象编排部署都可以通过声明样式(yaml)文件来解决&#xff0c;也就是可以把需要对资源对象操作编辑到yaml格式文件中&#xff0c;我们把文件叫做资源清单文件&#xff0c;通过kubectl命令直接使用资源清单文件就可以实现对大量的资源对象进行编排部署…

Linux中使用Docker安装ElasticSearch7.10.x集群

使用Docker安装ElasticSearch7.10.x单节点请访问这里 一、集群环境说明 服务器IP地址192.168.137.1&#xff0c;192.168.137.2&#xff0c;192.168.137.3 二、前期准备 1. 拉取镜像 docker pull elasticsearch:7.10.12. 首先需要创建一个用于生成秘钥的初始容器&#xff0…

【SpringMVC】自定义注解与AOP结合使用

目录 一、SpringMVC之自定义注解 1.1 Java注解简介 1.2 为什么要用注解 1.3 注解的分类 ⭐ 1.3.1 JDK基本注解 1.3.2 JDK元注解 1.3.3 自定义注解 1.4 自定义注解三种使用案例 1.4.1 案例一&#xff08;获取类与方法上的注解值&#xff09; 1.4.2 案例二&#xff0…

【STL容器】vector

文章目录 前言vector1.1 vector的定义1.2 vector的迭代器1.3 vector的元素操作1.3.1 Member function1.3.2 capacity1.3.3 modify 1.4 vector的优缺点 前言 vector是STL的容器&#xff0c;它提供了动态数组的功能。 注&#xff1a;文章出现的代码并非STL库里的源码&#xff0c…

包管理工具--》发布一个自己的npm包

包管理工具系列文章目录 一、包管理工具--》npm的配置及使用&#xff08;一&#xff09; 二、包管理工具--》npm的配置及使用&#xff08;二&#xff09; 三、包管理工具--》发布一个自己的npm包 四、包管理工具--》yarn的配置及使用 五、包管理工具--》其他包管理器之cnpm…

花见Live Wallpaper Themes 4K Pro for mac(4k视频壁纸)

如果你希望让自己的Mac桌面焕发活力&#xff0c;那么Live Wallpaper & Themes 4K Pro正是一款值得尝试的软件。它提供了丰富的超高清4K动态壁纸和主题&#xff0c;可以让你轻松打造出个性化的桌面环境。 这款软件拥有众多令人惊叹的功能。其中最值得一提的是&#xff0c;它…

视频监控/安防监控/AI视频分析/边缘计算EasyCVR平台如何调取登录接口获取token?

安防视频监控管理平台/视频汇聚/视频云存储平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;实现视频资源的鉴权管理、按需调阅、全网分发、云存储、AI智能分析等&#xff0c;视频监控智能分析平台EasyCVR融合性强、…

DataGrip 2023 年下载、安装教程、亲测可用

文章目录 前言1. 下载2. 安装3、DataGrip 常用操作4 推荐阅读 前言 DataGrip 是 JetBrains 发布的多引擎数据库环境&#xff0c;支持 MySQL 和 PostgreSQL&#xff0c;Microsoft SQL Server 和 Oracle&#xff0c;Sybase&#xff0c;DB2&#xff0c;SQLite&#xff0c;还有 Hy…

使用dockerfile文件部署Python+PyWebIO项目

1、安装docker 教程详见之前的内容。https://blog.csdn.net/weixin_44691253/category_12101661.html 2、打包好Python项目 之前的文章中有提到我编写测试工具使用的框架&#xff1a;PythonRequestsPyWebIO框架详解&#xff0c;编写测试工具提高团队测试效率 打包项目时&am…

淘宝双11数据分析与预测课程案例中(林子雨)错误点总结

问题一&#xff1a;可视化代码中男女买家各个年龄段对比散点图中数值不显示以及坐标不正确问题如下图 解决方法&#xff1a; 1修改坐标 2修改数值 修改后散点图 问题二&#xff1a;各省份的总成交量对比中地图显示不出来&#xff0c;因为该部分代码源码中没有需要自己编写…

排序算法-----插入排序

目录 前言&#xff1a; 插入排序 原理图 代码实现 分析总结 二分法插入排序 代码实现 前言&#xff1a; 嗨嗨^_^&#xff0c;米娜桑&#xff0c;今天我们继续学习排序算法中的插入排序&#xff0c;激不激动&#xff0c;兴不兴奋呢&#xff01;好了废话不多说&#xff0c;…

RFID服装管理系统改善零售供应链

随着时尚零售业的竞争日益激烈&#xff0c;RFID技术正快速地改变着服装管理的方式。我们将探讨RFID服装管理系统的核心优点&#xff0c;以及如何在零售供应链中充分利用它。 首先&#xff0c;让我们了解一下RFID技术是什么。RFID是一种无线通信技术&#xff0c;通过使用RFID标…

国家网络安全周 | 金融日,一起 get金融行业数据安全

2023国家网络安全宣传周 热度一直在持续&#xff01; 9月15日是国家网络安全宣传金融日。 目前随着国际形势愈发严峻&#xff0c;金融机构基础设施的全面数字化升级&#xff0c;带来了全新的安全问题。数据安全不单是技术问题&#xff0c;更是已经成为一个关系社会稳定发展的…

【算法专题突破】滑动窗口 - 水果成篮(13)

目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后&#xff1a; 1. 题目解析 题目链接&#xff1a;904. 水果成篮 - 力扣&#xff08;Leetcode&#xff09; 题目有很长一段话&#xff0c;但是我们读一遍题目可以提炼转化出题目的要求 &#xff1a; 其实就是找出一个最长…

数字IC验证23915--寄存器方法

文章目录 镜像值与期望值predication的分类自动预测显示预测 uvm_reg的访问方法寄存器健康检查![在这里插入图片描述](https://img-blog.csdnimg.cn/8b1832ab43854068970bb5a66d851d06.png) 镜像值与期望值 寄存器模型中的每一个寄存器&#xff0c;都应该有两个值&#xff0c;…

我的C#基础

using System; namespace HelloWorldApplication }TOC 欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。 为帮助您在CSDN创作的文章获得更多曝光和关注&#xff0c;我们为您提供了专属福利&#xff1a; 已注册且未在CSDN平台发布过…

ESIM实战文本匹配

引言 今天我们来实现ESIM文本匹配&#xff0c;这是一个典型的交互型文本匹配方式&#xff0c;也是近期第一个测试集准确率超过80%的模型。 我们来看下是如何实现的。 模型架构 我们主要实现左边的ESIM网络。 从下往上看&#xff0c;分别是 输入编码层(Input Ecoding) 对前…

网工内推 | 网络安全工程师,上市公司,13薪,食宿有补贴

01 苏州奖多多科技有限公司 招聘岗位&#xff1a;网络安全工程师&#xff08;安服渗透&#xff09; 职责描述&#xff1a; 1、负责客户网络安全攻击入侵事件溯源分析、处置等工作&#xff1b; 2、根据攻击告警/入侵事件&#xff0c;进行取证调查&#xff0c;攻击溯源反制&…

Jmeter系列-环境部署、详细介绍、安装目录介绍(1)

环境部署 官网下载Jmeter http://jmeter.apache.org/下载最新版本的 JMeter&#xff0c;解压文件到任意目录 安装JDK&#xff0c;配置Java环境 1、下载&#xff08;注意选择操作系统对应的位数32/64&#xff09; 官网 &#xff1a;http://www.oracle.com 2、安装&#xff0…

程序与保持健康的六个秘诀

虽然编程并不被视为是一个高危职业,但我们发现一大批数量惊人的开发人员正遭受健康问题的折磨。坐在办公桌很舒适,但有研究表明,它并不像你想象的那样健康。幸运的是,有很多非常容易做到的方法可以改善你的健康。 1.锻炼 尽管这可能是最明显的方法,但很多开发人员常常会…