linux——misc杂项设备

发布时间 2023-04-18 15:00:28作者: 爱喝拿铁

简介

Linux里面的misc杂项设备是主设备号为10的驱动设备,它的注册跟使用比较的简单,所以比较适用于功能简单的设备。正因为简单,所以它通常嵌套在platform 总线驱动中,配合总线驱动达到更复杂,多功能的效果。

源码

[[05.miscdevice 源码]]
![[Pasted image 79.png]]

parent

这个指针决定了在/sys文件系统里面,它是创建在哪个目录下。如果为空就在/sys/class根目录下创建,如果不为空都是在/sys/class/misc 文件下面创建的一些属性文件。
![[Pasted image 81.png]]

this_device

这个就代表当前设备的设备结构体,这个在查找扩充数据结构时,非常有用。

minor

次设备号,如果是MISC_DYNAMIC_MINOR,则会动态分配。

fops

设备文件操作结构体[[02.file_operations]]

注册过程

  1. 初始化miscdevice结构体
  2. 调用misc_register

misc_register()函数在misc.c中,最主要的功能是基于misc_class构造一个设备,将miscdevice结构挂载到misc_list列表上,并初始化与linux设备模型相关的结构,它的参数是miscdevice结构体。

miscdevice 源码

struct miscdevice  {
	int minor; //次设备号,主设备号已经敲定是10了,后面我们跟进代码看一下。
	const char *name;  //驱动名字,最终会反映在设备节点名字上。
	const struct file_operations *fops; //设备操作方法集合
	struct list_head list; //链接到所有杂项设备链表当中。
	struct device *parent; //父设备,这个一般为NULL
	struct device *this_device;//当前设备的devices结构。
	const char *nodename;
	umode_t mode;
};