XuSenfeng

个人站

复读了,更新随缘,有的文件不全或者图片缺失具体看我的笔记库(https://github.com/XuSenfeng/note)


MISC

目录

MISC

混合的, 混杂的, 有一些外设不能进行分类的时候就使用MISC驱动, 其实就是最简单的字符驱动, 嵌套在platform之中

所有的MISC设备驱动的主设备号都为10,不同的设备使用不同的从设备号

MISC设备会自动创建cdev,不需要像我们以前那样手动创建

我们需要向Linux注册一个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 struct attribute_group **groups;
	const char *nodename;
	umode_t mode;
};

驱动编写的核心就是初始化file_operations, name就是此MISC设备名字,当此设备注册成功以后就会在/dev目录下生成一个名为name的设备文件

Linux系统已经预定义了一些MISC设备的子设备号,这些预定义的子设备号定义在include/linux/miscdevice.h文件中, 定义为255===> 动态分配

使用函数向内核注册

int misc_register(struct miscdevice * misc)

misc:要注册的MISC设备。返回值:负数,失败;0,成功。

  1	alloc_chrdev_region();/* 申请设备号*/
  2	cdev_init();/* 初始化cdev  */
  3	cdev_add();/* 添加cdev  */
  4	class_create();/* 创建类*/
  5	device_create();/* 创建设备*/

相当于以上的函数的集合

int misc_deregister(struct miscdevice *misc)

用来卸载, 相当于所有卸载函数的结合