宋宝华《linux设备驱动开发详解》——platform设备驱动(12.2)

以下读书笔记,整理于宋宝华《linux设备驱动开发详解》一书。


1、piatform总线出现的原因

  • 在SOC集成的独立外设控制器、挂接在soc内存空间的外设不依附与此类总线(PCI、USB、I2C、SPI等),因此linux发明了一种虚拟的总线,成为platform总线。
  • 相应的设备称为platform_device,驱动称为platform_driver。

2、结构体定义

  • 见博文http://blog.csdn.net/oqqhutu12345678/article/details/72851807

3、填写platform_device和注册

  • 对于linux2.6而言,对platform_device的定义通常在BSP的板文件中实现,即把platform_device归纳为一个数组,由platform_add_devices()函数统一注册;
  • 对于linux3.x之后,人们舍弃以编码的方式去填写platform_device和注册,而倾向于根据设备树中的内容自动展开platform_device。

4、将globalfifo作为platform设备步骤

(1)将globalfifo移植为platform驱动;

  • 给驱动套一层platform_driver的外壳。

(2)在板文件中添加globalfifo这个platform设备。

  • 需要在板文件arch/arm/mach-/mach-<板名>.c中添加相应的代码。
  • 最终通过类似于platform_add_devices函数将此platform_device注册进系统。

5、platform设备资源和数据

(1)结构体定义

宋宝华《linux设备驱动开发详解》——platform设备驱动(12.2)_第1张图片

(2)对resource的定义一般在BSP的板文件中进行,而具体的设备驱动中通过platform_get_resourcr()来获取。

(3)除了可以在BSP中定义资源外,还可以附加一些数据信息,放在platform_data中。

  • platform_data的形式由每个结构体自定义。可以是结构体,也可以是其他。
  • http://blog.csdn.net/oqqhutu12345678/article/details/78507455中可知,它是void* 类型的。

6、在设备驱动中引入platform概念的好处

(1)符合linux2.6以后内核的设备模型,使得配套的sysfs节点、设备电源管理成为可能;

(2)隔离BSP和驱动。

(3)使得一个驱动支持多个设备实例。


你可能感兴趣的:(读书笔记)