Linux驱动开发之Platform_device和Platform_driver

Platform_device和Platform_driver

从 Linux 2.6 起引入了一套新的驱动管理和注册机制 :Platform_device 和 Platform_driver 。

Linux 中大部分的设备驱动,都可以使用这套机制 , 设备用 Platform_device 表示,驱动用 Platform_driver 进行注册。

Linux platform driver 机制和传统的 device driver 机制 ( 通过 driver_register 函数进行注册 ) 相比,一个十分明显的优势在于 platform 机制将设备本身的资源注册进内核,由内核统一管理,在驱动程序中使用这些资源时通过 platform device 提供的标准接口进行申请并使用。这样提高了驱动和资源管理的独立性,并且拥有较好的可移植性和安全性 ( 这些标准接口是安全的 ) 。

Platform 机制的本身使用并不复杂,由两部分组成: platform_device 和 platfrom_driver 。

通过 Platform 机制开发发底层驱动的大致流程为 :  定义 platform_device à 注册 platform_device à 定义 platform_driver à 注册 platform_driver 。

首先要确认的就是设备的资源信息,例如设备的地址,中断号等。

在 2.6 内核中 platform 设备用结构体 platform_device 来描述,该结构体定义在 kernel\include\linux\platform_device.h 中,

struct platform_device {

  const char * name;

  u32  id;

  struct device dev;

  u32  num_resources;

  struct resource * resource;

};

该结构一个重要的元素是 resource ,该元素存入了最为重要的设备资源信息,定义在 kernel\include\linux\ioport.h 中,

struct resource {