zoukankan      html  css  js  c++  java
  • misc设备

    一、步骤:

    1.定义miscdevice结构体:

    struct miscdevice misc;
    

    2.初始化miscdevice结构体

    misc.minor = MISC_DYNAMIC_MINOR;//动态分配
    misc.name = "xxxx";   //设备名
    misc.fops = &myfops;  //操作方法集(myfops要预先准备好)
    
    struct file_operations myfops = {
        .owner = THIS_MODULE,
        .open = myopen,
        .release = myrelease,
        .read = myread,
        .write = mywrite,
    } 

    3.注册

    /*
    * 功能: 注册
    * 输入参数: struct miscdevice
    * 输出参数:
    * 返回值: 成功:0    失败:负数
    * 注意:这个注册函数会自动创建设备文件,不用我们管,misc设备的主设备号恒为10,它靠次设备号区分不同的misc
    */
    int misc_register(struct miscdevice * misc)

    4.释放

    /*
    * 功能: 注销
    * 输入参数: struct miscdevice
    * 输出参数:
    * 返回值: none
    * 注意:
    */
    void misc_deregister(struct miscdevice *misc)

    二、向上提供接口:

    1.open:

    /*
    * 功能: 给运用层的接口---打开
    * 输入参数: @struct inode  --inod节点
    * 输入参数: @struct file   --file指针
    * 输出参数:
    * 返回值: 成功:0    失败:负数
    * 注意:
    */
    int myopen(struct inode *, struct file *) 
    {
        //1.使用计数
        //2.识别子设备(将私有的设备结构体赋值给pfile->pravite_data)
        //3.必要的设备初始化
    }

    2.close:

    /*
    * 功能: 给运用层的接口---关闭
    * 输入参数: @struct inode  --inod节点
    * 输入参数: @struct file   --file指针
    * 输出参数:
    * 返回值: 成功:0    失败:负数
    * 注意:
    */
    int myrelease(struct inode *, struct file *)

    3.read:

    /*
    * 功能: 给运用层的接口---读
    * 输入参数: @struct file   --file指针
    * 输入参数: @__user        --运用层传进来的bufer
    * 输入参数: @size          --大小
    * 输入参数: @loff_t        --偏移
    * 输出参数:
    * 返回值: 成功:实际能读到的字节数    失败:负数
    * 注意:
    */
    ssize_t (*read) (struct file *, char __user *, size_t, loff_t *)

    4.write:

    /*
    * 功能: 给运用层的接口---读
    * 输入参数: @struct file   --file指针
    * 输入参数: @__user        --运用层传进来的bufer
    * 输入参数: @size          --大小
    * 输入参数: @loff_t        --偏移
    * 输出参数:
    * 返回值: 成功:实际写入的字节数    失败:负数
    * 注意:
    */
    ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *)
  • 相关阅读:
    编译安装centos6.9 php7.0 mysql5.6 nginx1.8
    mysql小细节随笔
    mpdf中文开发使用文档附demo实例
    svn和NetBeans一起使用造成svn老是死锁, database is locked
    Mastering MariaDB 神秘的MariaDB 中文翻译版
    Laravel开发采坑系列问题
    phpspider php爬虫框架
    ajaxFileUpload只能上传一次,和上传同名图片不能上传等bug问题
    bootstrap-treeview 中文开发手册
    phpredis Redis阵列 Redis Arrays
  • 原文地址:https://www.cnblogs.com/xxg1992/p/6636379.html
Copyright © 2011-2022 走看看