美文网首页
字符驱动

字符驱动

作者: 飒风灬 | 来源:发表于2018-04-21 19:22 被阅读0次

    //////////////前边主要是说的是杂项设备驱动的注册,下边是字符驱动/////////////////

    2018.2.26

    申请字符类设备号。

    设备号有好多种,今天学的是字符类设备号的申请,字符类设备号分为主设备号,和从设备号,下边的连接里边的东西可以参考一下。

    http://blog.sina.com.cn/s/blog_707dde150102wp10.html

    设备号申请有两个常用的函数,一个是静态申请register_chrdev_region(),一个是动态申请alloc_chrdev_region(),下边是简单的介绍。

    1.头文件

    #include 设备函数所在的头文件

    #include       MKDEV转义数据设备号类型宏定义

    #include 定义字符类设备

    2.注册函数说明

    静态注册int register_chrdev_region(dev_t from, unsigned count, const char *name)

    Form  :要分配设备编号范围的初始值。

    Count:连续编号范围 。

    *Name:编号关联设备名称

    Form用的是  dev_t类型定义,MKDEV(dev_magor, dev_minior);这个函数获得,这个函数有两个参数,一个是主设备号,一个是从设备号。

    常见的用法

    通过外部传参将参数主从设备号传进去。

    打印主从设备号,或得form这个参数,进行设备注册。

    动态注册int alloc_chrdev_region(dev_t *dev,unsigned int firstminor,unsigned int count,char *name);

    *dev: 返回的设备编号,需要通过MMOR()获取主设备号。

    Firstminor: 请求最小的次编号

    Count:    请求连续设备编号的总和

    *name:    设备名称

    简单用法

    不写了。

    当然还有个行数,设备号卸载函数

    unregister_chrdev_region(MKDEV(dev_magor, dev_minior), dev_minor_num);

    这个是注销静态申请的,第一个主设备号,第二个连续设备号和。

    unregister_chrdev_region(dev_magor,dev_minor_num);

    这个是注销动态申请的,第一个主设备号,第二个连续设备号和。

    2018.3.2

    设备节点已经注册完了,下边写的是字符类设备的注册,在杂项设备中没有涉及到一个class这个类,因为系统已经打包好了,不用我们去管了,但是字符驱动就需要自己去写了。

    上边图片就是杂项设备的设备,但是char的都是自己定义了,下边是介绍。

    这个是class的结构体

    Class类的创建函数   class_create()

    第一个参数是owner,一般是 THIS_MODULE

    第二个参数苏是name,要定义的class的名称。

    下便是使用方式:

    struct class *myclass;

    myclass = class_create(THIS_MODULE, CLASS_NAME);

    开始内存分配void *kmalloc(size_t size, int flags);

    头文件#include

    Size内存大小

    Flags一般常用 GFP_KERNEL

    相关文章

      网友评论

          本文标题:字符驱动

          本文链接:https://www.haomeiwen.com/subject/cxrakftx.html