打印
[嵌入式linux]

usb gadget驱动报错

[复制链接]
717|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jinqihhh|  楼主 | 2019-1-4 18:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ge, USB, AD, TE, ST
新手,求助大家关于arm-Linux中usb gadget驱动的报错问题。代码是师兄写的,之前也测试过没有问题。但是今年拿出来用的时候,只要程序(这个程序也是之前测试通过的)里调用了write函数把数据放入驱动传输,就会报错。
硬件:板子是sama5d31,Linux3.6.9,内核配置已经打开了usb gadget功能
报错内容:start ep1 error --> -108
出现报错的驱动代码:
ssize_t usb_msc_write (struct file * file, const char __user * userbuf, size_t nbytes) //读设备
{
    struct msc_dev *dev =file->private_data;
    struct usb_request *req;
    int status;
    struct usb_ep *ep;
//    struct usb_gadget *gadget = dev->gadget;
//    ssize_t ret = 0;
//    int result;
//   printk("nbytes=%d \n",nbytes);
    if (nbytes < 0)
        return -EINVAL;
    ep = dev->in_ep;
//   printk("usb_msc_write !ep.desc =%d\n", !ep->desc);
    if(nbytes > 128)
    {
        printk("Error :too much bytes to write.  \n");
        return 0;
    }
    req = alloc_ep_req(ep, 128);
    if (!req)
    {
        printk("alloc_ep_req(ep, 128) error  \n");
        return 0;
    }
    copy_from_user(req->buf, userbuf, nbytes);
    req->length = nbytes;
    req->complete = source_sink_complete; //请求完成函数
    status = usb_ep_queue(ep, req, GFP_ATOMIC); //递交请求
    if (status)
    {
      struct msc_dev *dev = ep->driver_data;
      printk("start %s error--> %d \n", ep->name, status);
      free_ep_req(ep, req);
      req = NULL;
    }
    else
    {
//     printk("usb_ep_queue(ep, req, GFP_ATOMIC) succeed \n");
    }
    //interruptible_sleep_on (&dev->bulkrq);//睡眠,等到请求完成
    wait_for_completion(&dev->bulkrq);
//   printk("sleep back! \n");
//   printk("req->actual=%d \n", req->actual);
    return req->actual;
}


请问这个部分的报错是出于什么原因呢?
说白了,这个代码在去年都是没问题的,今年重新使用的时候就这样了,换新板子也不行,没有头绪啊。
谢谢各位了!!!

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝