当前位置: 首页 > news >正文

Linux驱动学习(八)设备树

什么是设备树?

平台总线内容的学习中, 我们使用 platform_device 结构体来对硬件设备进行描述, 这是一种传统的平台总线设备描述方式。 每个 platform_device 结构表示一个特定的硬件设备, 并通过注册到平台总线上来使得内核能够与该设备进行通信和交互。 该结构包含设备的名称、 资源(如内存地址、 中断号等) 、 设备驱动程序等信息。

然而, 随着时间的推移, Linux 内核中的 ARM 部分存在着大量的平台相关配置代码, 这些代码通常是杂乱而重复的, 导致了维护的困难和工作量的增加。

为了应对这一挑战, ARM 社区开始探索新的硬件描述机制, 并逐渐形成了设备树的概念。设备树提供了一种更加灵活和可移植的描述硬件的机制, 将设备的描述信息转移到设备树中。设备树使用一种结构化的数据格式, 通过描述设备节点、 属性和连接关系等信息, 使得硬件的描述与具体的平台无关, 同时允许多个平台共享相同的设备树描述。

设备树逐渐成为了嵌入式系统和 Linux 内核中描述硬件的标准方式。 它
不仅在 ARM 架构上得到了广泛应用, 也被扩展到其他架构和平台上。

关于设备树的名词

DTS

DTS 是设备树的源文件, 采用一种类似于文本的语法来描述硬件设备的结构、 属性和连接关系。DTS 文件以.dts 为扩展名, 通常由开发人员编写。 它是人类可读的形式, 用于描述设备树的层次结构和属性信息。

DTSI

DTSI 文件是设备树源文件的包含文件。 它扩展了 DTS文件的功能, 用于定义可重用的设备树片段。 DTSI 文件以.dtsi 为扩展名, 可以在多个 DTS 文件中包含和共享。 通过使用 DTSI, 可以提高设备树的可重用性和可维护( 和 C 语言中头文件的作用相同)

DTB

DTB 是设备树的二进制表示形式。 DTB 文件是通过将 DTS 或 DTSI
文件编译而成的二进制文件, 以.dtb 为扩展名。

DTC

DTC 是设备树的编译器。 它是一个命令行工具, 用于将 DTS和 DTSI 文件编译成 DTB 文件。

设备树语法结构

以ft5x06 触摸中断设备树为例讲解设备树的的语法

/dts-v1/; //版本信息#include "dt-bindings/pinctrl/rockchip.h"
#include "dt-bindings/interrupt-controller/irq.h"
/{	// '/'根节点开头标识符model = "This is my devicetree!";ft5x06@38 {compatible = "edt,edt-ft5206";interrupt-parent = <&gpio0>;interrupts = <RK_PB5 IRQ_TYPE_EDGE_RISING>;};
};

准备:

ft5x06 的中断引脚号芯片引脚图:触摸引脚网络标TP_INT_L_GPIO0_B5, 对应的 SOC管脚为 GPIO0_B5
在这里插入图片描述
在内核源码目录下的“include/dt-bindings/pinctrl/rockchip.h” 头文件中, 定义了 RK 引脚名和 gpio 编号的宏定义
在这里插入图片描述
选择edt,edt-ft5206
1、/dts-v1/:版本信息(可选)

2、#include “dt-bindings/pinctrl/rockchip.h”
用于定义 Rockchip 平台的引脚控制器相关的绑定。定义在内核源码目录下:include/dt-bindings/pinctrl/rockchip.h

3、#include “dt-bindings/interrupt-controller/irq.h”
用于定义中断控制器相关的绑定,同样也在内核源码目录下(头文件目录)

4、model = “This is my devicetree!”
指定了设备树的模型名称, 描述为 “This is my devicetree!”

5、compatible = “edt,edt-ft5206”
指定了设备节点的兼容性字符串,表示该设备与 “edt,edt-ft5206” 兼容。

6、interrupt-parent = <&gpio3>
指定了中断的父节点,即中断控制器所在的节点。这里使用了一个引用(&gpio0)来表示父节点

7、interrupts = <RK_PA5 IRQ_TYPE_EDGE_RISING>
指定了中断信号的配置。RK_PB5 表示中断信号的引脚编号,IRQ_TYPE _EDGE_RISING 表示中断类型为上升沿触发

http://www.dtcms.com/a/315999.html

相关文章:

  • 无人机 × 巡检 × AI识别:一套可复制的超低延迟低空视频感知系统搭建实践
  • BloodHound 8.0 首次亮相,在攻击路径管理方面进行了重大升级
  • 03-顺序表
  • Spring之【详解FactoryBean】
  • 小程序实时保存优化
  • WWDC 25 极地冰原撸码危机:InlineArray 与 Span 的绝地反击
  • Dell电脑Windows系统更新后声卡驱动无法识别插线耳机问题
  • WebRTC音视频编码模块深度解析:从编解码器到自适应码率控制(2025技术实践)
  • 【安卓][Mac/Windows】永久理论免费 无限ip代理池 - 适合临时快速作战
  • Java+Redis+SpringBoot定时器-定时发布商品
  • 使用vscode编写markdown文档(使用Markdown Preview Enhanced和markdownlint两个插件)以及若干配置
  • Patsy的dmatrix() 函数
  • Docker概述
  • MySQL主从复制部署
  • leetcode700:二叉搜索树中的搜索(递归与迭代双解法)
  • 高可用微服务架构实战:Nacos集群+Nginx负载均衡,Spring Cloud无缝对接
  • qt窗口--01
  • 2025金九银十Java后端面试攻略
  • MoonBit 月兔 - 云和边缘计算 AI云原生编程语言及开发平台
  • 【51单片机 用定时器计时,按键控制LED灯亮(按键按下多少秒,亮几个LED灯,按键松开,LED保持)】2022-10-18
  • Linux驱动24 --- RkMedia 视频 API 使用
  • 基于 Spring Boot 的小区人脸识别与出入记录管理系统实现
  • Bean 标签有哪些属性
  • CPU内存管理:MMU SMMU
  • 【arXiv2025】计算机视觉|即插即用|LWGA:即插即用!LWGA模块,视觉性能炸裂!
  • 深圳AI大会前瞻:千企集结,“模驱具身”加速AI硬件革命
  • PAT 1039 Course List for Student
  • 注意点:Git 从安装到分支协作、冲突解决的完整步骤 ---待修改,没看这个步骤,需要重新整理步骤
  • Orange的运维学习日记--28.Linux逻辑卷详解
  • MATLAB实现的基于压缩感知的图像处理