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

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查