驱动——Platform
1. 核心定义
Linux Platform(Linux 平台驱动框架)是 Linux 内核为了解决 **“相同功能的硬件,因不同厂商 / 硬件布局导致驱动重复开发”** 问题而设计的设备 - 驱动匹配框架。
本质是:将 “硬件的共性功能” 抽象为 “平台驱动”,将 “硬件的个性化参数”(如寄存器地址、中断号)抽象为 “平台设备”,通过内核的匹配机制让二者关联,实现驱动的复用。
因为不同厂商的开发板(如树莓派、Orange Pi)都可能使用 “LED 灯” 硬件,但 LED 的寄存器基地址、控制引脚、中断号可能不同;若没有 Platform 框架,每个开发板都要写一套 LED 驱动(重复);有了 Platform 框架:只需写 1 套 “LED 平台驱动”(处理开灯、关灯的共性逻辑),再为每个开发板定义 1 个 “LED 平台设备”(配置该板的 LED 参数),内核自动匹配二者,驱动即可复用。
Linux Platform 框架由 “平台设备(Platform Device) ”“平台驱动(Platform Driver) ”“内核匹配机制” 三部分组成,三者的关系如下:
平台设备(硬件参数)
←内核匹配→ 平台驱动(功能逻辑)
平台设备(Platform Device):描述 “硬件是什么”
核心数据结构:struct platform_device
(定义在include/linux/platform_device.h
)
动态注册:内核推荐通过设备树 ,定义平台设备,内核启动时自动解析设备树并注册为平台设备
平台驱动(Platform Driver):实现 “硬件能做什么”
核心数据结构:struct platform_driver
(定义在include/linux/platform_device.h
)
内核匹配机制:实现 “设备与驱动的关联”
- 内核维护两个链表:
platform_devices
(平台设备链表)和platform_drivers
(平台驱动链表); - 当注册平台设备或平台驱动时,内核遍历另一个链表,尝试匹配;
- 匹配成功后,调用平台驱动的
probe()
函数,完成硬件初始化。
Linux Platform 框架通过 “设备与驱动分离” 实现了驱动复用,
platform_device
和platform_driver
的数据结构、probe()
函数的实现、设备树与驱动的匹配机制,以及资源申请与管理。