平台设备驱动机制分析:
华清远见版权所有,
平台设备驱动机制采用的是分离的思想,将设备资源与设备驱动分离开来,
整个机制总共采用了三个结构体:
=======================================================================
总线:采用对象的思想,struct bus_type 总线结构体,struct bus_type platform_bus_type/*平台总线*/
/*总线结构体原型,这个结构体只列出了其中比较重要的成员*/
struct bus_type {
const char * name;
struct module * owner;
…………..
int (*match)(struct device * dev, struct device_driver * drv); /*非常重要,在驱动与设备资源匹配的时候调用*/
int (*probe)(struct device * dev); /*这个也比较重要,但是一定要注意,与平台驱动结构体中的 probe 区别开来*/
int (*remove)(struct device * dev); /*做 probe 函数相反的事情*/
……..
};
/*定义一个平台总线结构体,用来让控制器设备驱动与设备资源匹配时提供某些能力*/
struct bus_type platform_bus_type = {
.name = "platform",
.dev_attrs = platform_dev_attrs,
.match = platform_match, /*这个函数非常关键,在匹配的时候就会调用这个函数来进行匹配,*/
.uevent = platform_uevent,
.suspend = platform_suspend,
.suspend_late = platform_suspend_late,
.resume_early = platform_resume_early,
.resume = platform_resume,
};
平台驱动:struct platform_drvier 描述平台驱动
/*结构体原型如下*/
struct platform_driver {
int (*probe)(struct platform_device *); /*探测函数,非常关键,这个函数需要我们自己去实现,并赋值给它*/
int (*remove)(struct platform_device *); /*这个函数给上面那个 probe 函数做相反的事情就可以了*/
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 platform_device *);
int (*resume)(struct platform_device *);
struct device_driver driver; /*具体的某个设备驱动结构体*/
};
/*定义一个平台结构体,方法如下所示*/