SPI 总线驱动匹配机制分析SPI 总线匹配流程图SPI 总线结构定义spi_match_device 函数分析各种匹配方式详解1. 设备树匹配2. ACPI 匹配3. SPI ID 表匹配匹配时机和调用流程匹配成功后的处理总结
参考资料
- Linux 内核文档:
Documentation/spi/spi-summary.rstDocumentation/devicetree/bindings/spi/spi-controller.yaml
- Linux 内核源码:
drivers/spi/spi.cdrivers/base/dd.c
SPI 总线驱动匹配机制分析
SPI 总线通过 Linux 设备模型把
spi_device 与 spi_driver 绑定。控制器注册后,SPI 核心根据固件节点创建从设备;设备或驱动任一方注册时,设备模型都会触发匹配。SPI 总线匹配流程图
SPI 总线结构定义
在
drivers/spi/spi.c 中,SPI 总线类型的核心结构可概括为:其中
.match 决定设备与驱动能否绑定,.probe 则在匹配成功后转调具体 spi_driver 的 probe。spi_match_device 函数分析
不同内核版本细节略有调整,但匹配原则稳定:
匹配顺序的意义:
- 设备树匹配:嵌入式平台最常见,通过设备节点的
compatible对比驱动of_match_table
- ACPI 匹配:适用于使用 ACPI 描述硬件的平台
- SPI ID 表匹配:用
spi_device_id的 name 对比设备 modalias
- 驱动名回退:设备 modalias 与
driver.name相同则匹配
各种匹配方式详解
1. 设备树匹配
设备树节点:
驱动匹配表:
reg 在 SPI 子节点中通常表示片选号,不是 I2C 那种总线地址。2. ACPI 匹配
3. SPI ID 表匹配
匹配时机和调用流程
SPI 匹配主要发生在两条路径:
- 控制器和设备创建路径:
spi_register_controller注册控制器,SPI 核心枚举固件子节点,创建并注册spi_device
- 协议驱动注册路径:
spi_register_driver把spi_driver注册到spi_bus_type
匹配成功后的处理
进入设备驱动 probe 前,核心层已完成对象绑定;具体驱动应在 probe 中校验 SPI mode、调用
spi_setup、申请 IRQ/GPIO/regulator,并注册到 IIO、MTD、input 等所属子系统。总结
SPI 总线匹配本质上仍是 Linux 设备模型的“设备注册 + 驱动注册 + bus match + probe”机制。SPI 特有部分主要是
spi_device 的 modalias、片选、mode、频率和控制器能力约束。不要把“匹配成功”误解为“通信一定成功”——匹配只证明身份字符串对上了,时序、电气和协议是否正确仍要由 spi_setup 与实际传输验证。

