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);