文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Linux USB 驱动程序调试 -- 008:完善驱动:增加..

Linux USB 驱动程序调试 -- 008:完善驱动:增加..

时间:2010-12-01  来源:purple_river

需要设计一下:控制传输的代码通过用户调用函数 ioctl() 传过来【命令字和参数一起传到内核】,根据不同的控制命令字,作出不同的动作。  驱动中增加如下代码:
【1】结构体中增加一个初始化项目
   static const struct file_operations skel_fops = {
         .owner = THIS_MODULE,
         .read =  skel_read,
         .write = skel_write,
         .open =  skel_open,
         .release = skel_release,
         .flush = skel_flush,
         .ioctl =        skel_ioctrl, //这是增加的。
        };
   注意: 我发现在 usb_driver 结构中也有个 ioctrl 方法,但是没有被调用!我开始就
        加到那里,死活不被回调。
   
【2】实现函数 skel_ioctrl()
 //参考函数中如何使用: usb_get_descriptor()
 static unsigned char SetupPacket[8];
 static int skel_ioctrl(struct inode *inode, struct file *file,
                        unsigned int cmd, unsigned long arg)
 {
         struct usb_skel *dev;
       
         int retval;
         unsigned char *user_buffer;
         user_buffer=(unsigned char *)arg;
         dev = (struct usb_skel *)file->private_data;
         
         printk("\n\nskel_ioctrl: cmd=%8.8X arg=%8.8X\n",cmd,arg);
       
         copy_from_user(SetupPacket, user_buffer, 8);
          
         retval =  usb_control_msg(
           dev->udev,
           usb_sndctrlpipe(dev->udev, 0),
           SetupPacket[1], 
           SetupPacket[0],
           SetupPacket[2]+ (SetupPacket[3])*256 , 
               SetupPacket[4]+ (SetupPacket[5])*256 , 
               0,
               SetupPacket[6]+ (SetupPacket[7])*256,
               USB_CTRL_GET_TIMEOUT
               );
         return retval;
        }
   注意:函数中参数 cmd  和 arg 就是从用户态函数 ioctl() 传来的。
        好,现在驱动完全准备好了。可以写测试APP啦。
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载