zoukankan      html  css  js  c++  java
  • ioctl和unlock_ioctl的区别

    今天调一个程序调了半天,发现应用程序的ioctl的cmd参数传送到驱动程序的ioctl发生改变。而根据《linux设备驱动》这个cmd应该是不变的。因为在kernel 2.6.36 中已经完全删除了struct file_operations 中的ioctl 函数指针,取而代之的是unlocked_ioctl ,所以我怀疑二者是不是兼容的。上网查了一些资料,很多文章只是泛泛谈了一下,说在应用程序中ioctl是兼容的,不必变化。而在驱动程序中这个指针函数变了之后最大的影响是参数中少了inode ,所以应用程序ioctl是兼容的,但驱动程序中我们的ioctl函数必须变化,否则就会发生cmd参数的变化:

    原来的驱动程序

    static const struct file_operations globalmem_fops=
    {
    .owner=THIS_MODULE,
    .llseek=globalmem_llseek,
    .open=globalmem_open,
    .read=globalmem_read,
    .write=globalmem_write,
    .ioctl=globalmem_ioctl,
    .release=globalmem_release,
    };

    int globalmem_ioctl(struct inode* inode,struct file* filp, unsigned int cmd,unsigned long arg)

    {

    switch (cmd)

      {

       case:XXX:   ...

        ……

      }

    }

    改变后的

     

    static const struct file_operations globalmem_fops=
    {
    .owner=THIS_MODULE,
    .llseek=globalmem_llseek,
    .open=globalmem_open,
    .read=globalmem_read,
    .write=globalmem_write,
    .unlocked_ioctl=globalmem_ioctl,
    .release=globalmem_release,
    };

    int globalmem_ioctl(struct file* filp, unsigned int cmd,unsigned long arg)//没有inode参数!

    {

    switch (cmd)

      {

       case:XXX:   ...

        ……

      }

    }

  • 相关阅读:
    TensorFlow Executor解析
    面试复习
    [洛谷]P1880 石子合并问题
    [西建大ACM协会]OJ平台如何使用
    [ACM] 相关OJ及在线运行代码网站
    [MySQL] Win10 安装MySQL5.7.27
    [PTA] PAT(A) 1012 The Best Rank (25 分)
    [PTA] PAT(A) 1011 World Cup Betting (20 分)
    [PTA] PAT(A) 1010 Radix (25 分)
    [PTA] PAT(A) 1009 Product of Polynomials (25 分)
  • 原文地址:https://www.cnblogs.com/luxiaolai/p/3991524.html
Copyright © 2011-2022 走看看