IMX6ULL驱动学习--MISC驱动

MISC杂项驱动

  • MISC驱动
    • MISC简介
    • 程序结构
      • 注册`miscdevice`设备
    • 程序测试

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属性,minorinclude/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(); 			 /* 删除类 */

程序测试

你可能感兴趣的:(IMX6ULL驱动学习--MISC驱动)