这两天学习了platform设备驱动程序的框架,现在来总结一下。在linux内核中常见的的总线有I2C总线,PCI总线,串口总线,SPI总线,PCI总线,CAN总线等,所以有些设备和驱动就可以挂在这些总线上,然后通过总线上的match进行设备和驱动的匹配。但是有的设备并不属于这些常见总线,所以引入了一种虚拟总线,也就是platform总线的概念,对应的设备叫做platform设备,对应的驱动叫做platform驱动。platform设备驱动具备“总线—设备—驱动”的模型,完美的体现了Linux驱动开发中设备与驱动分离以及设备驱动分层的思想。Platform驱动模型结构主要如下:
(1)platform核心层:为设备层和驱动层提供注册接口、为设备层和驱动层的匹配提供标准
① 搭建总线框架。定义了总线类结构体struct bus_type,包含关键的回调函数指针match来确定platform_device和platform_driver之间的匹配。以及提供了platform总线初始化函数platform_bus_init(),内部调用了bus_register()函数注册platform总线,初始化了klist_devices和klist_drivers两个链表② 为设备层提供注册API,提供自动匹配接口函数。定义了platform设备结构体struct platform_device,继承于设