在 Linux 系统中,存在一类字符设备,它们共享一个主设备号(10),但次设备号不同,我们称这类设备为混杂设备(miscdevice)。所有的混杂设备形成一个链表,对设备访问时内核根据次设备号查找相应的 miscdeivce 设备。
Linux 内核使用 struct miscdevice 来描述一个混杂设备。
struct miscdevice {
int minor; /* 次设备号 */
const char *name; /* 设备名 */
const struct file_operations *fops; /* 文件操作 */
struct list_head list;
struct device *parent;
struct device *this_device;
const char *nodename;
mode_t mode;
};
Linux 内核使用 misc_register() 函数来注册一个混杂设备,其主设备号为10,如果次设备号指定为 MISC_DYNAMIC_MINOR,将由系统去指定一个次设备号,在 misc_register() 函数中会调用 device_create() 为设备创建设备节点。
misc_deregister() 用于注销这个混杂设备,其中调用了 device_destroy() 删除设备节点。
混杂设备的核心是 drivers/char/misc.c 文件,该文件中的 misc_init() 函数调用 class_create() 函数创建了一个名 misc 的类,注册了一个主设备号为10,设备名为 misc 的字符设备。
——忠于梦想 勇于实践 linux_xpj@opencores.org
阅读(1408) | 评论(0) | 转发(0) |