zoukankan      html  css  js  c++  java
  • 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内核对驱动框架设计的如何好,内核实现了多少的代码,与硬件相关部分的代码还是需要我们去实现。

  • 相关阅读:
    springboot整合mybatis 异常 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
    报时助手
    Huffman树费用
    动画效果
    工具和其他操作
    使用筛选器获取元素
    DOM操作
    属性和样式操作
    jQuery基础
    选择器
  • 原文地址:https://www.cnblogs.com/hkyst/p/7603120.html
Copyright © 2011-2022 走看看