60 秒回答模板

platform 和设备树不是同一层东西。platform bus 是 Linux 设备模型里的一个总线类型,用来管理很多不能像 PCI/USB 那样自枚举的片上外设和板级设备;它有 platform_device、platform_driver、match、probe/remove 这些机制。设备树是一种硬件描述数据,描述某块板上有哪些设备、寄存器地址、中断、时钟、GPIO、pinctrl、供电等资源。启动时内核解析设备树,把匹配条件合适的节点创建成 platform_device 或其他总线设备,platform driver 再通过 compatible 或 name 匹配并 probe。区别是:platform 是运行时设备/驱动模型,设备树是板级硬件描述。没有设备树也可以通过板级代码或 ACPI 创建 platform_device;有设备树的节点也不一定都是 platform 设备,比如总线子节点可能生成 I2C client、SPI device。

考点 层次区分
难度 真实面经题
回答目标 说明自己能分清硬件描述、设备对象和驱动绑定这三层关系。

深入解析

01

platform 是内核总线抽象

很多 SoC 内部外设没有自描述枚举能力,内核需要预先知道它存在。platform bus 提供设备、驱动、资源和 probe 绑定机制。

02

设备树是硬件数据

设备树描述板级事实:地址、中断、时钟、复位、GPIO、供电、引脚状态和子设备关系。它本身不是驱动,也不是总线操作代码。

03

解析后才进入设备模型

内核启动时扫描设备树节点,根据 bus 类型创建不同设备对象。根下或 simple-bus 下的外设常变成 platform_device,挂在控制器下的从设备会变成对应子系统设备。

04

驱动通过资源接口读取

platform driver 在 probe 中用 platform_get_resource、platform_get_irq、devm_clk_get、gpiod_get 等接口拿到设备树描述的资源,而不是自己解析所有属性。

易错点

  • 把 platform 说成设备树的另一种名字。
  • 认为有设备树就不需要 platform driver。
  • 认为所有设备树节点都会直接调用 platform probe。
  • 驱动硬解析板级属性,不使用内核资源接口。

面试官追问

platform_device 的 resource 从哪里来?

常见来源是设备树 reg、interrupts 等属性解析后的 resource,也可以来自板级代码或 ACPI。

设备树里的所有节点都会变成 platform_device 吗?

不会。总线控制器、子节点类型、compatible 和内核解析规则不同,可能生成平台设备、I2C 设备、SPI 设备或只作为配置节点。

如果面试官让你现场排查,你会先看哪些证据?

我会先看 dmesg 和返回码,再查 /sys 下设备、驱动和资源状态,必要时加 trace/ftrace 或最小日志,先证明问题出在设备生成、匹配、资源获取、回调路径还是用户态交互。