深入解析设备树(Device Tree)中的属性(Properties)

ops/2025/3/1 9:12:58/

1. 引言

在嵌入式 Linux 设备开发中,设备树(Device Tree, DT) 是用来描述硬件的关键数据结构。它允许操作系统无需修改内核代码即可适配不同的硬件平台。

设备树采用 层次化结构 组织硬件信息,每个节点(Node) 代表一个设备,每个属性(Property) 记录设备的详细信息。本篇文章将准确、清晰、符合官方定义地介绍设备树中的属性,并提供易于理解的示例。


在这里插入图片描述

2. 什么是设备树属性(Property)?

Device Tree Specification(设备树规范) 中,属性(Properties)键值对(key-value pair),用于存储与设备相关的信息。每个设备树节点都可以包含多个属性。

官方定义
“A property is a name-value pair associated with a node.”
(属性是与节点关联的键值对。)

属性的基本格式

<属性名> = <属性值>;

示例:

model = "NXP i.MX8MM Board";
status = "okay";
reg = <0x30200000 0x10000>;

解析:

  • model 是一个字符串属性,用于描述设备名称。
  • status 是一个设备状态属性okay 表示启用,disabled 表示禁用。
  • reg 是一个数组属性,存储设备的寄存器地址(0x30200000)和大小(0x10000)。

3. 设备树的标准属性(Standard Properties)

标准属性由 Device Tree Specification 定义,适用于所有设备。

3.1 compatible(驱动匹配)

compatible 属性用于设备与驱动的匹配

uart4: serial@30200000 {compatible = "fsl,imx8mm-uart", "ns16550";reg = <0x30200000 0x10000>;status = "okay";
};

解释:

  • compatible = "fsl,imx8mm-uart" 告诉内核,这个设备是 NXP i.MX8MM 的 UART 设备。
  • ns16550 是通用 UART 设备的兼容名称。

3.2 reg(寄存器地址)

reg 定义设备的寄存器映射。

reg = <0x30200000 0x10000>;

解释:

  • 0x30200000 是设备的起始地址。
  • 0x10000 是设备占用的地址范围(64 KB)。

3.3 interrupts(中断配置)

interrupts 指定设备的中断号

interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;

解释:

  • GIC_SPI 代表使用全局中断控制器。
  • 65 是中断号。
  • IRQ_TYPE_LEVEL_HIGH 说明此中断为高电平触发。

3.4 clocks(时钟管理)

clocksclock-names 设定设备的时钟源。

clocks = <&clk IMX8MM_CLK_UART4>;
clock-names = "uart";

解释:

  • clocks 指向外部时钟 IMX8MM_CLK_UART4
  • clock-names 赋予该时钟一个名称 uart

3.5 gpios(GPIO 配置)

设备树中可以使用 gpios 连接外部 GPIO 设备,如 LED。

led0: led {gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>;
};

解析:

  • LED 连接到 GPIO1 的第 10 号引脚
  • GPIO_ACTIVE_HIGH 说明高电平点亮 LED。

4. 设备树的非标准属性(Vendor-Specific Properties)

厂商(Vendor)可以定义自己的属性,必须使用唯一的前缀(如 fsl,qcom,ti,)。

示例:

fsl,channel-fifo-len = <64>;
qcom,pmic-voltage = <3300000>;
ti,am335x-gpio-rising-edge;

解析:

  • fsl,channel-fifo-len → NXP 自定义 FIFO 长度。
  • qcom,pmic-voltage → Qualcomm PMIC 供电电压(单位 µV)。
  • ti,am335x-gpio-rising-edge → TI 定义的 GPIO 触发模式(布尔值,仅存在即为 true)。

5. 布尔类型属性(Boolean Properties)

布尔值属性没有值,仅存在即为 true

cache-coherent;

解释:

  • cache-coherent 存在,表示设备支持缓存一致性
  • 如果该属性缺失,则默认为 false。

6. 设备树属性总结

类别示例说明
标准属性compatible, reg, status适用于所有设备
电源管理power-supply, voltage-min-microvolt适用于电源管理
时钟管理clocks, clock-names适用于需要时钟的设备
GPIO 配置gpios, gpio-controller适用于 GPIO 设备
厂商属性fsl,channel-fifo-len适用于特定厂商
布尔值属性cache-coherent仅存在即为 true

7. 结论

  • 标准属性 适用于所有设备,由设备树规范定义。
  • 非标准属性 需使用 厂商前缀,避免冲突。
  • 布尔类型属性 没有值,仅存在即为 true。

这样组织的设备树属性清晰、符合官方规范,并且易于理解。希望这篇文章能帮助你更好地掌握设备树属性的使用!


http://www.ppmy.cn/ops/162191.html

相关文章

React+Antd-Mobile遇到的问题记录

1、Input的Maxlength在手机上用拼音键盘输入字母时无效&#xff0c;onChange时截取字符 slice(0, 30) 2、遇到输入变化请求接口的情况时&#xff0c;一定要增加防抖&#xff0c;防止下个接口请完了&#xff0c;上个接口还没请求完&#xff0c;导致setState赋值无效&#xff0c;…

Android 端侧运行 LLM 框架 MNN 及其应用

MNN Chat Android App - 基于 MNN 引擎的智能聊天应用 一、MNN 框架简介与工作原理1.1 什么是 MNN&#xff1f;1.2 MNN 的工作原理 二、MNN Chat Android App2.1 MNN Chat 的功能2.2 MNN Chat 的优势2.3 MNN Chat Android App 的使用 三、总结 随着移动端人工智能需求的日益增长…

js的数据代理机制

通过访问 代理对象的属性 来间接访问 目标对象的属性。数据代理机制的实现需要依靠&#xff1a;Object.defineProperty()方法。 注意&#xff1a;代理对象新增的这个属性的名字 和 目标对象的属性名要一致&#xff0c;这样我们访问代理对象属性&#xff0c;就像在访问目标对象…

Python 创建一个能够筛选文件的PDF合并工具

合并多个 PDF 文件。这款 PDF 合并工具允许用户浏览文件夹、选择 PDF 文件&#xff0c;并将其合并为一个新的 PDF 文件。我们将详细分析代码结构和如何一步步实现每个功能。 C:\pythoncode\new\PDFFileInFolderMergeToNewPDFFile.py 全部代码 import os import wx import PyP…

python量化交易——金融数据管理最佳实践——qteasy创建本地数据源

文章目录 qteasy金融历史数据管理总体介绍本地数据源——DataSource对象默认数据源查看数据表查看数据源的整体信息最重要的数据表其他的数据表 从数据表中获取数据向数据表中添加数据删除数据表 —— 请尽量小心&#xff0c;删除后无法恢复&#xff01;&#xff01;总结 qteas…

Java实现斗地主-做牌以及对牌排序

卡牌类 public class Card {private String size;//大小private String color;//花色private int value;//权值public Card() {}public Card(String size, String color, int value) {this.size size;this.color color;this.value value;}public String toString(){return …

51单片机-串口通信编程

串行口工作之前&#xff0c;应对其进行初始化&#xff0c;主要是设置产生波特率的定时器1、串行口控制盒中断控制。具体步骤如下&#xff1a; 确定T1的工作方式&#xff08;编程TMOD寄存器&#xff09;计算T1的初值&#xff0c;装载TH1\TL1启动T1&#xff08;编程TCON中的TR1位…

【FL0087】基于SSM和微信小程序的民宿短租系统

&#x1f9d1;‍&#x1f4bb;博主介绍&#x1f9d1;‍&#x1f4bb; 全网粉丝10W,CSDN全栈领域优质创作者&#xff0c;博客之星、掘金/知乎/b站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战&#xff0c;以及程序定制化开发…