【发布时间】:2017-09-12 16:07:53
【问题描述】:
我在 Ubuntu 上使用 libusb,并尝试通过异步批量传输发送 4 个字节的数据。我能够成功执行以下步骤:1。
- 通过
libusb_alloc_transfer分配传输。 - 通过
libusb_fill_bulk_transfer填写批量转账。 - 通过
libusb_detach_kernel_driver分离内核驱动程序。 - 通过
libusb_claim_interface申请接口。 - 通过
libusb_submit_transfer提交转账。 - 最后,通过
libusb_attach_kernel_driver重新附加内核驱动程序。
然后代码将一直运行,直到传输超时并调用回调函数。启用 libusb 调试会提供以下消息:
[10.033374] [000026fe] libusb:调试 [handle_events] timerfd 触发
[10.033375] [000026fe] libusb:调试 [libusb_cancel_transfer] 传输 0x55555576de80
[10.036908] [000026fe] libusb:调试 [disarm_timerfd]
[10.036919] [000026fe] libusb:调试 [handle_events] poll() 3 fds,超时时间为 0ms
[10.036921] [000026fe] libusb:调试 [handle_events] poll() 返回 1
[10.036924] [000026fe] libusb:调试 [reap_for_handle] urb 类型=3 状态=-2 转移=0
[10.036926] [000026fe] libusb:调试 [handle_bulk_completion] 处理批量 urb 1/1 的完成状态 -2
[10.036927] [000026fe] libusb:调试 [handle_bulk_completion] 异常收割:urb 状态 -2
[10.036928] [000026fe] libusb:调试 [handle_bulk_completion] 异常收割:最后处理的 URB,报告
[10.036930] [000026fe] libusb:调试 [usbi_handle_transfer_cancellation] 检测到超时取消
[10.036931] [000026fe] libusb:调试 [disarm_timerfd]
[10.036932] [000026fe] libusb:调试 [usbi_handle_transfer_completion] 传输 0x55555576de80 有回调 0x7ffff7bd4c78
问题:
- URB 状态 -2 是什么意思?
- 根据您的知识或经验,有什么可能会阻止转移实际发生?
【问题讨论】:
标签: linux ubuntu asynchronous libusb libusb-1.0