• Linux杂项设备与字符设备


    .1 杂项设备驱动的引入

    字符设备指那些必须以串行顺序依次进行访问,且没有经过系统快速缓冲的设备,了解了Linux内核中驱动的框架和组成,以及编写的步骤等。但是,当我们写的驱动程序多了之后,就会发现:部分硬件并不符合预先定义的字符设备的范畴,而且普通字符设备的主设备号不管是静态分配还是动态分配,都会消耗一个主设备号(目前一个系统最多只能有255个字符设备),比较浪费主设备号资源。因此,而引入了杂项设备驱动。

    杂项设备是一个典型的字符设备(与接下来要介绍的输入子系统一样,呵呵),其主设备号固定为10。其内部实现就是用主设备号10来调用register_chrdev()实现的;并且在内部还调用了class_create()和device_create ()为每个杂项设备创建设备节点,从而避免了我们通过mknod命令或自行调用该两个函数来创建设备节点的麻烦。

    从以上这点来说,杂项设备就是将我们平常编写字符设备的驱动进行了再次封装,降低了我们编写字符设备驱动的难度,同时节约了主设备号资源。

    .3 杂项设备与字符设备实现比较

    在进行字符设备驱动程序开发的过程中,我们的实现步骤如下:

     申请一个字符设备号:可以自己指定,也可系统自动分配;

     构造一个file_operations结构体,其包含对硬件的所有操作;

     实现file_operations结构体中的成员函数;

     将字符设备注册进系统中:register_chrdev();

     创建设备类和设备节点:class_create()、device_create();

     告诉内核入口与出口函数:module_init()、module_exit();

    杂项设备驱动也是字符设备驱动,那么其注册的过程与字符设备驱动一样,也必须经过上面的这些步骤,只是杂项设备驱动中的对申请字符设备号、注册字符设备到系统、创建设备类和设备节点进行了封装,我们只需要完成如下几步开发即可:

     构造一个file_operations结构体,其中包含对硬件的所有操作;

    实现file_operations结构体中的成员函数;

     构造一个杂项设备驱动(struct miscdevice)实体,并赋值前面定义的file_operations实体;

     在入口函数处调用misc_register()向系统注册杂项设备;

     在出口函数处调用misc_deregister()从系统注销杂项设备;

     告诉内核入口与出口函数:module_init()、module_exit();

    从中也可以得出一个结论:无论Linux内核对驱动框架设计的如何好,内核实现了多少的代码,与硬件相关部分的代码还是需要我们去实现。

  • 相关阅读:
    使用postMan调用web services wsdl接口
    Python的入门基础(Linux、python、git)
    CrossoverQA文档
    Linux_磁盘分区、挂载、查看
    Linux为什么要挂载
    图解Windows10+优麒麟双系统安装
    Linux 软件安装与卸载
    ventroy 制作多系统启动盘
    字节跳动面试官:请你实现一个大文件上传和断点续传
    关于本博客和博主
  • 原文地址:https://www.cnblogs.com/hkyst/p/7603120.html
Copyright © 2020-2023  润新知