MISC设备驱动分析及实现

    xiaoxiao2021-03-26  19

    什么是MISC设备

    misc的意思是各式各样。

    MISC设备属于字符设备,是因为字符设备多种多样,很多无法归类的字符设备都归在misc设备中MISC设备共享了同一个主设备号 MISC_MAJOR = 10 ,根据不同的次设备号区分不同的设备MISC由于共享了同一主设备号,所以它是自动生成设备节点的它的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设备驱动就完成了。在实际工作中,我们还需要编写操作硬件的函数和提供用户层的函数,对应相应的设备有着相应的驱动方案。

    转载请注明原文地址: https://ju.6miu.com/read-658824.html

    最新回复(0)