情况是这样的:我有一个USB设备(我试图与之交谈的自定义设备)有两个端点,一个写入设备,一个从设备读取.两者都是批量转移.每个通信事务采取以下形式:(1)向设备写入命令(2)读取响应.我正在使用libusb(版本0.1而不是1.0 beta)来实际执行通信.
在Windows上,一切都很好.我可以连接设备,声称界面并愉快地沟通.但是,在Ubuntu(标准Hardy桌面安装)中,虽然我可以连接到设备并写入它,但所有读取操作都会失败,并显示libusb报告的错误“错误提交URB:无效参数”(错误代码-22).
如果我检查/ var / log / messages,我会看到在尝试读取的同时记录了一条警告消息:“sysfs:duplicate filename’usbdev4.3_ep81’无法创建” – 这与设备相符(确实是在那辆公共汽车和它的端点81我试图读取).
所以…有人看到使用libusb的类似问题,或者有任何想法如何解决它?
解决方法:
事实证明,这是设备本身描述符中的错误配置. lsusb -v显示了一个从未使用的额外接口,它具有单个等时端点0x81.由于这从未使用过(并且从未经过我所见过的测试,因此很可能甚至没有正确定义)我将其从设备描述符中完全删除(在固件中).
现在我有一个完全正常工作的设备.为什么linux拒绝从设备上读取,但Windows工作得很好,我不知道,但它肯定让我疯狂追逐.
标签:linux,usb,libusb
来源: https://codeday.me/bug/20190627/1302651.html