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)

浙公网安备 33010602011771号