一、platform 设备驱动
1.1 platform 总线、设备与驱动
在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。
Linux发明了一种虚拟的总线,称为platform总线, 相应的设备成为platform_device, 而驱动成为platform_driver。
platform_device结构体
struct platform_device {
const char *name; //设备名
u32id;
struct device dev;
u32num_resource; //设备所使用的各类资源数量
struct resource * resource; //资源
};
platform_driver结构体
struct platform_driver {
int (*probe) (struct platform_device *);
int (*remove) (struct platform_device *);
void (*shutdown) (struct platform_device *);
int (*suspend) (struct platform_device *, pm_message_t state);
int (*suspend_late) (struct platform_device *, pm_message_t state);
int (*resume_early) (struct plartform_device *);
int (*resume) (struct platform_device *);
struct pm_ext_ops *pm;
struct device_driver driver;
};
系统中为platform总线定义了一个bus_type的实例platform_bus_type,其定义如代码清单:
struct bus_type platform_bus_type = {
.name= "platform",
.dev_attrs= platform_dev_attrs,
.match = platform_match,
.uevent= platform_uevent,
.pm= PLATFORM_PM_OPS_PTR,
};
EXPORT_SYMBOL_GPL(platform_bus_type);