usb_bulk_msg无法阻止

时间:2014-03-07 09:23:00

标签: linux-kernel usb linux-device-driver embedded-linux

场景:我正在尝试使用usb_bulk_msg读取路由到端点4中的USB Bulk的数据包。我的代码如下:

static ssize_t bky_read(struct file *f, char __user *buf, size_t cnt, loff_t *off)
{
int retval;
int read_cnt;

/* Read the data from the bulk endpoint */
retval = usb_bulk_msg(device, bky_dev.in, bky_dev.bulk_in_buffer, MAX_PKT_SIZE, &read_cnt,5000);
if (retval)
{
    printk(KERN_ERR "Bulk message returned %d\n", retval);
    return retval;
}
if (copy_to_user(buf, bky_dev.bulk_in_buffer, MIN(cnt, read_cnt)))
{
    return -EFAULT;
}

    return MIN(cnt, read_cnt);
}

bky_dev.in = usb_rcvbulkpipe (device, in->desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK); 这是在probe电话中完成的。 我打印了in->desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK的值,我得到0x4这是正确的。现在,当我从用户空间应用程序进行读取调用时,我可以调用bky_read,但如果数据在EP4上不可用,则usb_bulk_msg不会阻塞5秒。

查询:为什么usb_block_msg无法阻止指定的秒数(在我的情况下为5秒)。

PS:每次拨打dmesg时,Bulk message returned -71都会打印read

0 个答案:

没有答案