🚀 杂项设备驱动简介
杂项设备是字符设备的一种,它比常规字符设备驱动更加简单。
杂项设备驱动可以自动生成设备节点,而且所有杂项设备的主设备号均为 10,可以有效节约内核资源。
可以用 cat /proc/misc
来查看系统当前的杂项设备。
🚀 miscdevice 结构体
misc 设备用 miscdevice 结构体表示, miscdevice 结构体的定义在内核源码具体定义在 include/linux/miscdevice.h
中, 内容如下:
1 2 3 4 5 6 7 8 9 10 11 12
| struct miscdevice { int minor; const char *name; const struct file_operations *fops; struct list_head list; struct device *parent; struct device *this_device; const struct attribute_group **groups; const char *nodename; umode_t mode; };
|
🚀 杂项设备驱动程序框架
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| #include <linux/init.h> #include <linux/module.h> #include <linux/miscdevice.h> #include <linux/fs.h>
struct file_operations misc_fops = { .owner = THIS_MODULE, };
struct miscdevice misc_dev = { .minor = MISC_DYNAMIC_MINOR, .name = "hello_misc", .fops = &misc_fops, };
static int misc_init(void) { int ret; ret = misc_register(&misc_dev); if (ret < 0) { printk("misc register is error!"); return -1; } printk("misc register is succeed!\n"); return 0; }
static void misc_exit(void) { misc_deregister(&misc_dev); printk("goodbye!\n"); }
module_init(misc_init); module_exit(misc_exit);
MODULE_LICENSE("GPL");
|