platform_driver

platform设备驱动(内核版本4.1.15)

platform设备

/*	设备结构体	*/
struct platform_device {
   const char  *name;
   int     id; 
   bool        id_auto;
   struct device   dev;			//			linux/device.h:723
   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;
};

/*	设备对象	*/
struct platform_object {
   struct platform_device pdev;
   char name[];
};


/*	在dev中有一个 of_node	是该设备树节点的device_node结构体
		可以通过一系列of函数得到想要的资源*/

platform驱动

在platform_driver_register的时候,会遍历platform总线上挂载的platform_device。通过name以及of_match_table的compatible属性进行匹配。匹配成功会执行probe函数,退出会执行remove函数。

platform接口

/*	platform_get_resource:	获取resources中 num个和type匹配的 资源指针*/
struct resource *platform_get_resource(struct platform_device *dev,unsigned int type, unsigned int num)
   

     /*platform_get_resource_byname:	获取type种类的资源中  名为name的资源指针	*/
struct resource *platform_get_resource_byname(struct platform_device *dev,
                         unsigned int type,
                         const char *name)

    
  /* platform_add_devices:通过传入的设备二级指针	一次注册多个设备*/
int platform_add_devices(struct platform_device **devs, int num)
    
    
    /*	platform_device_add_resources:Add a copy of the resources to the platform device	*/
int platform_device_add_resources(struct platform_device *pdev,
                 const struct resource *res, unsigned int num)
    
    
    /*platform_device_add_data:为pdev->dev.platform_data添加一个data的副本数据	*/
    int platform_device_add_data(struct platform_device *pdev, const void *data,
                size_t size)
posted @ 2021-05-30 20:27  blog-morui  阅读(101)  评论(0)    收藏  举报