什么样的设备会挂到platform总线下

1.platform 总线不是硬件总线,而是软件抽象

I2C、SPI、PCI、USB 都可以对应真实硬件总线。

但 platform bus 不是一根真实的硬件线。

它更像是 Linux 设备模型里的一个软件分类:

platform bus 用来管理那些“固定存在、无法自动枚举、通常由设备树/ACPI/板级代码描述”的设备

典型 platform device 包括:

UART 控制器 GPIO 控制器 I2C 控制器本身 SPI 控制器本身 PWM 控制器 看门狗 RTC 控制器 自定义 FPGA/寄存器设备 自定义内存映射 IP

注意这里有个容易混淆的地方:

I2C 控制器本身:通常是 platform_device I2C 控制器下面的传感器:通常是 i2c_client

2.设备树中的位置决定了设备怎么被创建

可以这样记:

顶层普通节点 /simple-bus 下面的普通节点 SoC 内存映射外设节点 ↓ 通常创建成 platform_device

而:

I2C 控制器节点下面的子节点 ↓ 通常创建成 i2c_client
SPI 控制器节点下面的子节点 ↓ 通常创建成 spi_device
MDIO 总线下面的 PHY 节点 ↓通常创建成 phy_device / mdio_device
PCI/USB 设备 ↓ 通常由硬件枚举或专用框架管理

所以不是 Linux 看到 compatible 就一定创建成 platform_device,而是要看这个节点处于什么父总线下面。

设备树普通节点 + 非可枚举硬件 + 不属于专用子总线=> platform_device

再压缩一点:

不知道挂哪条真实总线,但又是板上固定存在的设备=> platform 总线