platform平台驱动模型
# 什么是platform平台驱动模型?
**Platform 平台驱动模型**:在 Linux 内核驱动开发中,platform 驱动模型 (platform Driver Model) 是专门为了管理那些“非热插拔”的硬总线和硬设备而设计的一种虚拟总线驱动框架。
像 USB、PCI 这种物理总线,硬件连接后系统能自动感知并获取设备信息。但是板卡上很多外设都是直接通过引线连在芯片上的,系统没法自动感知。为了统一管理这些硬件,Linux 虚拟出了一条总线,叫做 **platform 总线**。它的核心思想是:**驱动分离,匹配分工**。
Platform 把一个完整的驱动拆分成两部分,以实现软件代码与硬件控制逻辑的分离:
- **设备 (device)** :通常通过设备树 (DTS) 来描述具体的硬件资源。
- **驱动 (Driver)** :负责具体的软件控制逻辑。
# Q1:结合项目聊聊对 platform 总线和设备的理解?
## 在我的温度感知系统中,我采用了 Linux 经典的 platform 平台驱动模型来实现硬件和驱动的分离解耦。
1. **设备端**:我利用设备树配置了硬件资源,在节点中定义了硬件所需的 GPIO 引脚属性,并指定了 `compatible` 属性字符串。
1. **驱动端**:我编写了符合 platform 框架的驱动程序,并在结构体的 `of_match_table` 中填入相同的 `compatible` 字符串。
1. **匹配与探测**:当系统加载并解析设备树时,platform 总线会自动通过这个兼容性字符串进行动态匹配。匹配成功后,便会触发我编写的 `probe` 函数。
1. **初始化**:在 `probe` 函数内部,我通过内核 API 获取到了设备树中配置的 GPIO 资源,随后进行字符设备注册和硬件的初始化。
这种设计保证了软件代码和硬件资源的彻底分离,极大提高了驱动的可维护性和可移植性。
# Q2. 驱动卸载时,platform 模型怎么处理?
当执行 `rmmod` 卸载驱动时,内核会自动调用驱动里对应的 `remove` 函数。在 `remove` 里我们要把 `probe` 里申请的资源,**倒序释放掉**。比如:注销字符设备 (`cdev_del`)、释放 GPIO (`gpio_free`)、销毁设备节点等,防止内存泄漏。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)