platform平台驱动

platform将设备本身资源注册进内核,方便内核统一管理,驱动程序使用这些资源时使用统一接口,提高了程序的可移植性。S3C6410处理器中,把内部集成的I2 C、RTC、SPI、LCD、看门狗等控制器都归纳为platform_device,而它们本身就是字符设备。

设备开发流程

platform平台驱动_第1张图片

// 平台设备
 struct platform_device {
     const char * name;/* 设备名 */
     u32 id;  //设备编号
     struct device dev; //设备
     u32 num_resources;/* 设备所使用各类资源数量 */
     struct resource * resource;/* 资源 中断号 基地址等 */
 };

设备平台资源

platform平台驱动_第2张图片

例子

platform平台驱动_第3张图片

第一个资源记录地址 属于地址性的资源

第二个资源记录中断号 属于中断性的资源

获取设备资源的函数

platform平台驱动_第4张图片

例如 platform_get_resource(pdev,IORESOURCE_IPQ,0) 获取pdev的中断号资源 第0个资源

设备驱动

platform平台驱动_第5张图片

probe函数:platform设备与驱动匹配后会调用此函数,我们对字符设备的注册的工作可以在这里完成

remove函数:对字符设备的注销工作在这里完成

driver:包含两个字段

.name:需要与前面的platform_device中的name一致才能完成匹配,匹 配成功就会调用 probe函数

例子 创建平台设备并注册 会在 sys/bus/platform/devices/my_dev

platform平台驱动_第6张图片

添加设备驱动注册 注册成功了在 /sys/bus/platform/drivers/my_dev

platform平台驱动_第7张图片

驱动添加成功匹配成功,会调用my_probe。platform主负责设备匹配的作用具体的驱动my_probe里有。


你可能感兴趣的:(platform平台驱动)