MISC设备驱动分析及实现

来源:互联网 发布:wacom绘画软件 编辑:程序博客网 时间:2024/05/21 10:25

什么是MISC设备

misc的意思是各式各样。

  1. MISC设备属于字符设备,是因为字符设备多种多样,很多无法归类的字符设备都归在misc设备中
  2. MISC设备共享了同一个主设备号 MISC_MAJOR = 10 ,根据不同的次设备号区分不同的设备
  3. MISC由于共享了同一主设备号,所以它是自动生成设备节点的
  4. 它的open函数由内核实现好了

MISC子系统编写驱动的步骤

一般设备驱动都离不开几个步骤,misc设备驱动也是如此。

定义 —-> 初始化 —> 注册 –> 释放
小建议:如果我们要编写什么设备的驱动,最好是打开相应设备的.h源码,这样对应的操作函数一目了然,如本例中,可以打开Miscdevice.h 头文件来查看内核提供的函数和结构体。

定义

miscdevice结构体表征了miscdevice设备,所以第一步先定义一个miscdevice设备。

 struct miscdevice misc_demo;

结构体内容为

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;};

初始化

初始化即初始化miscdevice结构体

  misc.minor = MISC_DYNAMIC_MINOR(系统动态分配一个次设备号)  misc.name = "misc_demo"

同时我们也应编写操作方法集来填充成员const struct file_operations *fops

 struct file_operations misc_fops = {               .owner = THIS_MODULE,          }misc.fops = &misc_fops;

注册

注册和释放就直接使用了内核提供的函数接口

  int misc_register(struct miscdevice *misc);/*********************************************          功能:注册miscdevice          输入参数:miscdevice结构体          返回值:成功返回0,失败返回负的错误码 *********************************************/

释放

  int misc_deregister(struct miscdevice *misc); /*********************************************          功能:释放miscdevice          输入参数:miscdevice结构体          返回值:成功返回0,失败返回负的错误码 *********************************************/

这样,最简单的一个MISC设备驱动就完成了。在实际工作中,我们还需要编写操作硬件的函数和提供用户层的函数,对应相应的设备有着相应的驱动方案。

0 0