什么样的设备会挂到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 总线