2019-12-09 driver model

Linux设备驱动模型概述(Linux device driver model overview)

https://www.linuxidc.com/Linux/2016-10/136247.htm

https://linux-kernel-labs.github.io/master/labs/device_model.html

原創[图片上传中...(image-166116-1575861306521-2)]

loongembedded[图片上传中...(image-e58e8c-1575861306521-1)]

2018-12-25 21:30

平台(platform)设备和平台驱动是连接到平台总线(bus)的linux驱动模型接口,总线将设备和驱动绑定,这个伪总线(platform bus)以最小的基础结构被用来连接设备到总线上。在系统每注册一个设备时,会寻找与之匹配的驱动;相反,在系统每注册一个驱动时,会寻找与之匹配的设备,而匹配由总线来完成。

[图片上传中...(image-ad48b5-1575861306520-0)]

平台设备通常作为系统中自治实体(autonomous entities)出现,平台设备给出驱动绑定使用的名字和资源列表,如地址和IRQ。

struct platform_device {//平台设备

   const char      *name;//驱动使用此name和设备树中的对比来进行绑定

   int          id;//设备实例号,-1表示此设备只有一个实例

   bool       id_auto;

   struct device  dev;

   u32         num_resources;

   struct resource      *resource;

   const struct platform_device_id   *id_entry;

   char *driver_override; /* Driver name to force a match */

   /* MFD cell pointer */

   struct mfd_cell *mfd_cell;

   /* arch specific additions */

   struct pdev_archdata    archdata;

};

平台驱动遵循提供比如probe()和remove()方法的标准驱动模型约定。驱动绑定由驱动core自动执行,驱动和设备之间匹配后会调用驱动的probe(),如果Prebe()成功,驱动和设备将会被成功绑定。

当注册设备时,将检查总线上的驱动是否匹配,由下面三种不同的方式去匹配:

  1. 当注册设备时,将检查该总线的驱动是否匹配,平台设备应该在系统引起期间尽早注册。
  2. 当驱动使用platform_driver_register()注册时,将检查总线上所有未绑定的。驱动通常在引导过程中稍后注册,或通过加装模块时注册。
  3. 像使用platform_driver_register()注册一样用platform_driver_probe()来注册,除非另一设备注册时不会调用驱动的platform_driver_probe()。

多个平台驱动实例使用相同的平台驱动实现。可参阅Documentation\driver-model\platform.txt和include\linux\platform_device.h获得更多的信息

你可能感兴趣的:(2019-12-09 driver model)