MISC杂项驱动
MISC驱动
MISC简介
MISC驱动,又称杂项驱动。通常嵌套在platform总线驱动中。所有的MISC设备驱动的主设备号都是10,从设备号不同,解决了设备号紧张的情况
。
程序结构
- 注册
miscdevice
设备
注册miscdevice
设备
- 定义
miscdevice
设备
向内核注册miscdevice
设备时,miscdevice
是一个结构体,定义在include/linux/miscdevice.h
中,如下:
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;
};
我们主要设置name,minor,fops
属性,minor
在include/linux/miscdevice.h
有定义,我们可以选择已有定义,也可以自定义。name
是设备名字,注册成功后会在/dev
目录下生成相应设备文件,fops
是操作函数集合,由用户提供。
- 注册
miscdevice
设备
注册miscdevice
设备调用函数如下:
int misc_register(struct miscdevice * misc)
@misc : 要注册的设备
@return : 负数 失败,0 成功。
此函数作用相当于如下函数集合:
alloc_chrdev_region(); /* 申请设备号 */
cdev_init(); /* 初始化 cdev */
cdev_add(); /* 添加 cdev */
class_create(); /* 创建类 */
device_create(); /* 创建设备 */
- 注销
miscdevice
设备
注销函数如下:
int misc_deregistermisc_deregister(struct miscdevice *misc);
@misc : 要注销的设备
@return : 负数 失败,0 成功。
此函数作用相当于如下函数集合:
cdev_del(); /* 删除 cdev */
unregister_chrdev_region(); /* 注销设备号 */
device_destroy(); /* 删除设备 */
class_destroy(); /* 删除类 */