场景:我正在尝试使用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
。