platform总线驱动理论学习(如有侵权,联系删除)
1、何谓platform总线?
简而言之,就是linux设备驱动模型针对不能划分到USB、PCI、SPI等物理总线下的设备而创建的虚拟总线(内核2.6版本引入),其目的是为了让所有设备都能挂接在总线上,实现驱动模型的统一。
2、如何识别platform 设备?
这类设备有一个基本的特征:
就是能通过CPU bus直接寻址(例如“寄存器”),例如集成在SOC中的外设控制器、挂接在内存中的外设等。基于此,内核在设备模型的基础上(device和device_driver),对这些设备进行了抽象和封装,得出了platform bus、platform device和platform driver,以便于驱动开发人员可以便捷地开发这类设备的驱动。
3、platform子系统的软件架构
这里引用窝窝科技的一张图,最能直观说明

linux设备驱动模型中,platform子系统有关的代码位于include/linux/platform_device.h和drivers/base/platform.c这两个文件中,从上面的架构图可知,该子系统组要由三部分组成:
platform bus: 基于底层的bus模块进行抽象,得到一个platform bus,用于挂接platform设备
platform device:基于底层device模块,抽象得到platform device,用于表示平台设备
platform driver:基于底层的device_driver模块,抽象得到platform driver,用于驱动平台设备
platform总线负责管理platform device和platform driver,在总线上会维护一个设备链表和一个驱动链表,向总线注册的设备和驱动会分别被加入对应的链表中,同样地,卸载的驱动和设备都会被从对应的链表中删除。
platform device和platform driver模块会向驱动开发人员开发对应的API,以方便开发人员使用平台总线驱动框架开发驱动。开放的内容大致有:
1、结构体,struct platform_driver和struct platform_device,开发人员对结构体进行填充
2、开放设备和驱动的注册、卸载等接口
platform bus、platform device、platform driver都会在内核启动完成必要的初始化后注册进内核,此后便可以履行管理平台设备和驱动的职责。
参考文章:
http://www.wowotech.net/device_model/platform_device.html/platform_device.html