usb 3.0 linux libusb 问题

时间:2022-05-14 07:07:05

1)usb3.0 在windows使用winusb时,出现ReadFile的input buffer 太大时,读不到数据问题?


2)linux下,usb 3.0 libusb_claim_interface fail ,error=-5

对于一些linux标准支持的设备(如HID设备),可能需要使用libusb_detach_kernel_driver,或libusb_set_auto_detach_kernel_driver,将kernel提供的驱动卸载掉,否则会与libusb的通信产生冲突。对于支持多configuration的设备,还需要使用libusb_set_configuration,选择要使用的configuration number。之后,调用libusb_claim_interface,选择要使用的interface。


问题分析过程:

1)usbmon抓包环境搭建

1.1) 首先下载内核源码4.10.17,编译安装;

http://blog.csdn.net/smilestone_322/article/details/78163994

1.2) 配置usbmon抓包环境;

http://blog.csdn.net/smilestone_322/article/details/78144702

1.3)下载tcpdump 4.9.2 依赖libpcap 1.8.1 下载网址:

http://www.tcpdump.org/#latest-releases

安装过程报错:

configure: error: Neither flex nor lex was found.

apt-get install flex bison

错误消失,

然后重新执行configure,make ,make install .安装完成

只有先安装好libpcap后,TCPdump安装才没有问题


  • tcpdump -i usbmon2 -w /data/usblog.pcap &
  • killall tcpdump
usbmon2 表示对bus2抓包。


1.4)下载wireshark

http://www.cnblogs.com/BlackStorm/p/5876148.html

安装好后,使用wireshare打开使用tcpdump 抓的数据包,进行分析。


经过分析:

第一次设备运行时候,正常,然后ctrl+c退出应用程序,这时,设备的最后一帧数据没有读完整,这个时候在开启应用程序,就读不到数据了。

主要错误:

第一次结束时:

URB status: Cannot send after transport endpoint shutdown (-ESHUTDOWN) (-108)

第二次运行时:

-EPROTO 表示传输中发生了bitstuff 错误或者硬件未能及时收到响应数据包

URB status: Operation now in progress (-EINPROGRESS) (-115)