15. const struct attribute_group **groups;

16. const struct dev_pm_ops *pm;

17. struct driver_private *p;

18. };

依然全部都是以指针的形式定义的所有元素,对于驱动这一块来说,每一项肯定都是需要一个函数来实现的,如果不把它们集合起来,是很难管理的,而且很容易找不到,而且对于不同的驱动设备,它的每一个功能的函数名必定是不一样的,那么我们在开发的时候,需要用到这些函数的时候,就会很不方便,不可能在使用的时候去查找对应的源代码吧,所以就要进行一个封装,对于函数的封装,在 C 语言中一个对好的办法就是在结构体中使用指向函数的指针,这种方法其实我们在平时的程序开发中也可以使用,原则就是体现出一个“类”的感觉,就是面向对象的思想。

在 Linux 系统中,设备可以大致分为 3 类:字符设备、块设备和网络设备,而每种设备中又分为不同的子系统,由于具有自身的一些特殊性质,所以有不能归到某个已经存在的子类中,所以可以说是便于管理,也可以说是为了达到同一种定义模式,所以 linux 系统把这些子系统归为一个新类:misc ,以结构体 miscdevice 描述,在源代码目录下的 include/linux/miscdevice.h 中定义,内容如下:

[cpp] view plain copy

1. struct miscdevice {

2. int minor;

3. const char *name;

4. const struct file_operations *fops;

5. struct list_head list;

6. struct device *parent;

7. struct device *this_device;

8. const char *nodename;

9. mode_t mode;

10. };

对于这些设备,它们都拥有一个共同主设备号 10,所以它们是以次设备号来区分的,对于它里面的元素,大应该很眼熟吧,而且还有一个我们更熟悉的 list_head 的元素,这里也可以应证我之前说的 list_head 就是一个桥梁的说法了。

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