news 2026/4/28 17:01:20

设备树详解之概览

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
设备树详解之概览

文章目录

  • 一、设备树的整体样子
  • 二、一个**标准节点**长什么样?
    • 逐段解释
      • 1. 节点名格式
      • 2. compatible(驱动匹配)
      • 3. reg(硬件地址)
      • 4. status(是否启用)
      • 5. 引用其他节点(时钟、中断、引脚)
  • 三、最简单可运行的完整示例
  • 四、设备树的核心规则(记住就会写)
  • 五、一句话总结设备树到底是啥

一、设备树的整体样子

/dts-v1/; /* 版本声明,必须写在第一行 */ / { /* 根节点:整棵树的起点 */ model = "我的开发板"; compatible = "vendor,board", "vendor,chip"; /* 子节点:CPU、内存、时钟、串口、GPIO、I2C…… */ cpus { ... }; memory@80000000 { ... }; uart0: uart@fe001000 { ... }; i2c0: i2c@fe010000 { ... }; };

一句话概括:
设备树 = 一棵由节点组成的树,描述板子上有哪些硬件、地址是多少、用什么驱动。


二、一个标准节点长什么样?

这是你 99% 会用到的格式:

标签: 设备名@地址 { /* 必选/常用属性 */ compatible = "厂商,型号"; /* 驱动匹配用 */ reg = <地址 长度>; /* 寄存器地址 */ status = "okay"; /* 启用设备 */ /* 可选引用 */ clocks = <&时钟节点>; interrupts = <中断类型 编号 触发方式>; pinctrl-names = "default"; pinctrl-0 = <&引脚配置节点>; };

逐段解释

1. 节点名格式

uart0: uart@fe001000
  • uart0:标签(label),用于被别人引用:&uart0
  • uart→ 设备类型
  • @fe001000寄存器基地址,必须和 reg 第一个地址一致

设备类型和地址都不是必须的。

2. compatible(驱动匹配)

compatible = "ns16550";
  • 设备的“身份证”
  • 内核靠它找到对应的驱动

双引号表示字符串。

3. reg(硬件地址)

reg = <0xfe001000 0x100>;
  • 物理地址 + 长度
  • 驱动通过它映射寄存器、操作硬件

<>表示单元格数组(cell array) ,也就是一系列 32 位整数值

4. status(是否启用)

status = "okay"; /* 启用 */ status = "disabled"; /* 禁用 */

5. 引用其他节点(时钟、中断、引脚)

clocks = <&clk_uart0>; interrupt-parent = <&gic>; interrupts = <0 32 4>; pinctrl-0 = <&uart0_pins>;

<&xxx>就是指向另一个节点的指针


三、最简单可运行的完整示例

/dts-v1/; / { model = "demo-board"; compatible = "demo,board"; /* 内存 */ memory@80000000 { device_type = "memory"; reg = <0x80000000 0x20000000>; /* 512MB */ }; /* 串口 */ uart0: uart@fe001000 { compatible = "ns16550"; reg = <0xfe001000 0x100>; clocks = <&clk_uart0>; status = "okay"; }; /* 时钟 */ clk_uart0: clock { #clock-cells = <0>; compatible = "fixed-clock"; clock-frequency = <24000000>; }; };

四、设备树的核心规则(记住就会写)

  1. 整个文件只有一个根节点/
  2. 所有硬件都写在根节点内部,作为子节点
  3. 带地址的节点必须命名为xxx@addr
  4. @addr必须等于reg的第一个地址
  5. compatible是驱动匹配的关键
  6. <&xxx>是引用另一个节点
  7. reg描述硬件地址
  8. status = "okay"表示启用设备

五、一句话总结设备树到底是啥

设备树就是一个结构化的硬件说明书,
告诉 Linux:
板子上有什么设备、地址在哪、用什么驱动、时钟/中断从哪来。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/28 16:53:56

Ultimate Minecraft启动器:离线畅玩的终极解决方案

Ultimate Minecraft启动器&#xff1a;离线畅玩的终极解决方案 【免费下载链接】Launcher Offline Minecraft launcher. 项目地址: https://gitcode.com/gh_mirrors/lau/Launcher 想要摆脱官方Minecraft启动器的限制&#xff0c;享受完全自由的游戏体验吗&#xff1f;Ul…

作者头像 李华
网站建设 2026/4/28 16:49:21

2026年最新B站视频下载教程:3分钟掌握BiliTools跨平台下载神器

2026年最新B站视频下载教程&#xff1a;3分钟掌握BiliTools跨平台下载神器 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTool…

作者头像 李华
网站建设 2026/4/28 16:43:45

CrewAI实战指南:构建多智能体协作系统的完整教程

CrewAI实战指南:构建多智能体协作系统的完整教程 一、什么是CrewAI? CrewAI是一个开源的多智能体协作框架,专为构建复杂的AI工作流而设计。它允许开发者创建多个具有不同角色和技能的AI Agent,并通过精心设计的任务分配机制,让它们协同工作完成复杂目标。 核心优势 角色…

作者头像 李华
网站建设 2026/4/28 16:43:27

别再写SQL了!用Vanna+Python让ChatGPT直接查数据库(保姆级配置教程)

用自然语言对话数据库&#xff1a;VannaPython实战指南 每次面对复杂的数据查询需求时&#xff0c;你是否厌倦了反复翻阅SQL手册、调试语法错误&#xff1f;想象一下&#xff0c;只需用日常语言提问"上季度华东区哪些产品退货率高于5%"&#xff0c;就能自动获得准确的…

作者头像 李华
网站建设 2026/4/28 16:43:26

3步构建Python自动化仿真工作流:告别手动点击的工程革命

3步构建Python自动化仿真工作流&#xff1a;告别手动点击的工程革命 【免费下载链接】pyaedt AEDT Python Client Package 项目地址: https://gitcode.com/gh_mirrors/py/pyaedt 在当今快速迭代的工程研发环境中&#xff0c;CAE自动化已成为提升效率的关键。PyAEDT作为A…

作者头像 李华