8. /* arch specific additions */
9. struct pdev_archdata archdata;
10. };
11. struct platform_driver {
12. int (*probe)(struct platform_device *);
13. int (*remove)(struct platform_device *);
14. void (*shutdown)(struct platform_device *);
15. int (*suspend)(struct platform_device *, pm_message_t state);
16. int (*resume)(struct platform_device *);
17. struct device_driver driver;
18. const struct platform_device_id *id_table;
19. };
对于第一个结构体来说,它的作用就是给一个设备进行登记作用,相当于设备的身份证,要有姓名,身份证号,还有你的住址,当然其他一些东西就直接从旧身份证上 copy 过来,这就是其中的 struct device dev,这是传统设备的一个封装,基本就是 copy 的意思了。对于第二个结构体,因为 Linux 源代码都是 C 语言编写的,对于这里它是利用结构体和函数指针,来实现了 C 语言中没有的“类”这一种结构,使得驱动模型成为一个面向对象的结构。对于其中的 struct device_driver driver,它是描述设备驱动的基本数据结构,它是在源代码目录下的 include/linux/device.h 中定义的,内容如下:
[cpp] view plain copy
1. struct device_driver {
2. const char *name;
3. struct bus_type *bus;
4. struct module *owner;
5. const char *mod_name; /* used for built-in modules */
6. bool suppress_bind_attrs; /* disables bind/unbind via sysfs */
7. #if defined(CONFIG_OF)
8. const struct of_device_id *of_match_table;
9. #endif
10. int (*probe) (struct device *dev);
11. int (*remove) (struct device *dev);
12. void (*shutdown) (struct device *dev);
13. int (*suspend) (struct device *dev, pm_message_t state);
14. int (*resume) (struct device *dev);