一、混杂设备
Linux驱动中把无法归类的五花八门的设备定义为混杂设备(用miscdevice结构体表述)。miscdevice共享一个主设备号MISC_MAJOR(即10),但次设备号不同。 所有的miscdevice设备形成了一个链表,对设备访问时内核根据次设备号查找对应的miscdevice设备,然后调用其file_operations结构中注册的文件操作接口进行操作。 在内核中用struct miscdevice表示miscdevice设备,然后调用其file_operations结构中注册的文件操作接口进行操作。
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; };
二、初始化驱动描述结构
初始化时仅初始化minor、name、fops这几个成员,其他的成员内核会自动进行初始化。minor为次设备号,name为设备名,fops为应用程序与驱动程序函数接口。
1 struct miscdevice key_miscdev = 2 { 3 .minor = 200, 4 .name = "key", 5 .fops = &key_fops, 6 };
三、注册设备
注册设备函数:misc_register
函数原型:int misc_register(struct miscdevice * misc)
参数:设备描述结构体指针
/*注册设备*/ misc_register(&key_miscdev);
该函数通常在模块初始化函数中被调用。
四、注销设备
注销设备函数:misc_deregister
函数原型:int demisc_register(struct miscdevice * misc)
参数:设备描述结构体指针
1 /*注销设备*/ 2 misc_deregister(&key_miscdev);