Device Tree、ACPI 与硬件描述

这页讲的是:驱动想接管设备,前提不是“设备天然就会自己介绍自己”,而是系统得先知道这块硬件是什么、挂在哪、有哪些寄存器、中断和依赖。学这页的重点,是理解硬件描述不是文书工作,而是设备进入内核秩序前的基础信息层。

这块是什么

Device Tree、ACPI 与硬件描述,讲的是内核怎样在驱动真正 probe 之前,先拿到一份关于硬件拓扑、资源和依赖关系的“说明书”。有的平台更常靠 Device Tree 描述板级连线和资源,有的平台更常靠 ACPI 提供固件级枚举与配置信息,但它们共同解决的问题都是:让内核先知道自己面前到底是什么硬件。

可以把它理解成:驱动不是走进一间空屋子现猜哪里有电源插座、门铃和水管,而是先看建筑图纸,知道每根线、每个房间和每种设备的大致位置与关系。

它负责什么

描述硬件拓扑与资源

  • 告诉内核设备挂在哪条总线或哪片板级结构上
  • 描述寄存器范围、中断号、时钟、GPIO、电源域等资源
  • 表达父子关系、依赖关系和兼容信息
  • 让驱动接手前已有一份基本地图

帮助设备发现与匹配

  • 让内核知道有哪些设备应该被实例化出来
  • 把硬件信息转成设备对象供总线和驱动框架使用
  • 帮助驱动根据兼容串或固件描述找到自己要接手的对象
  • 让“匹配”不只是靠拍脑袋猜设备类型

衔接平台差异

  • 不同硬件平台描述方式不一样
  • 同一套驱动往往要学会从不同固件接口里取信息
  • 把板级连线差异和驱动逻辑尽量拆开
  • 让平台差异不至于全都硬编码进驱动里

为什么它不是“多一层配置而已”

如果想得太简单会怎样真正关键在哪
觉得驱动知道设备型号就够了驱动可能不知道寄存器、中断、时钟和依赖从哪来。驱动接手的不只是名字,还要接手一整套资源关系。
觉得硬件描述只是启动前静态文本你会忽略它如何影响设备对象创建和 probe 条件。它直接决定系统里会出现哪些设备、带什么资源。
觉得 Device Tree 和 ACPI 只是语法差异容易错过它们背后的平台传统和枚举方式差别。它们共同解决描述问题,但接入方式和生态习惯并不完全一样。
觉得这只是嵌入式领域的事会低估很多平台固件接口对驱动行为的影响。桌面、服务器、嵌入式都需要某种形式的硬件描述和枚举信息。

关键概念

概念现在怎么理解
Device Tree常见于许多 SoC/嵌入式平台的一种硬件描述思路,用来表达板级设备和资源关系。
ACPI常见于 PC/服务器等平台的固件描述与配置接口,帮助系统枚举和管理硬件。
兼容信息驱动判断“这是不是我该接手的设备”时常会看的识别线索。
资源描述寄存器、中断、DMA、时钟、电源域等设备运行所需条件。
固件接口内核从固件或描述数据中理解硬件世界的入口。

为什么重要

常见误解

它不负责什么

和其他模块的关系

相关模块关系
总线、设备发现与驱动匹配硬件描述常常决定设备如何被枚举、实例化并进入匹配路径。
probe、remove 与资源清理probe 阶段拿到的很多资源,本源上就是从固件描述里取出来的。
DMA / 中断 / 电源管理这些能力常常依赖正确的资源与依赖描述,否则后面路径都立不住。
sysfs / 用户可见接口很多设备信息最终会通过系统对象模型暴露出来,方便观察和管理。

读完这页后,你应该能回答

后面适合继续问:为什么同一驱动常要同时兼容 Device Tree 和 ACPI?硬件描述里的“兼容信息”究竟在匹配时起什么作用?哪些资源最容易在平台描述里写错后拖累整个驱动路径?