首页 > 代码库 > 13 Linux驱动之平台设备

13 Linux驱动之平台设备

一 platform子系统

1.对平台设备描述

struct platform_device {
const char * name; //设备名字
int id; // -1
struct device dev; //通用设备描述
u32 num_resources; //资源的个数
struct resource * resource;//资源

//如果是在driver的id_table中匹配成功,id_entry就会记录id_table匹配的项
const struct platform_device_id *id_entry;

/* arch specific additions */
struct pdev_archdata archdata;//平台设备的私有数据
};

2.对平台驱动的描述

struct platform_driver {
int (*probe)(struct platform_device *); //驱动与设备匹配的时候调用
int (*remove)(struct platform_device *);//驱动与设备分离的时候调用
struct device_driver driver;//通用driver描述
const struct platform_device_id *id_table;//支持设备
};

struct device_driver
{
const char *name; //驱动名字
struct module *owner;//THIS_MODULE
...
}

3.注册平台驱动

int platform_driver_register(struct platform_driver *drv);

4.注册平台设

int platform_device_register(struct platform_device *pdev);


5.平台设备与平台驱动匹配过程
[1]通过设备的名字与驱动的id_table + 驱动的名字
[2]匹配成功
[1]在设备记录匹配的驱动
[2]调用驱动提供的probe函数

13 Linux驱动之平台设备