情况是这样的:我有一个 USB 设备(我正在尝试与之通信的自定义设备),它有两个端点,一个写入设备,一个从设备读取。两者都是批量传输。每个通信事务都采用 (1) 向设备写入命令 (2) 读取响应的形式。我正在使用 libusb(版本 0.1 而不是 1.0 beta)来实际执行通信。
在 Windows 上,一切都很好。我可以连接设备,声明接口(interface)并愉快地通信。然而,在 Ubuntu(标准的 Hardy 桌面安装)中,虽然我可以连接到设备并写入它,但所有读取操作都失败,并从 libusb 报告错误“提交 URB:无效参数”(错误代码 -22)。
如果我检查/var/log/messages,我会看到在尝试读取的同时记录了一条警告消息:“sysfs:无法创建重复文件名‘usbdev4.3_ep81’”——这与设备相符(它确实在那条总线上,它是我正在尝试读取的端点 81)。
那么...有人在使用 libusb 时遇到过类似问题,或者知道如何解决它吗?
最佳答案
事实证明这是设备本身的描述符配置错误。 lsusb -v 显示了一个从未使用过的额外接口(interface),它有一个同步端点 0x81。因为它从未被使用过(而且据我所知从未被测试过,所以很可能甚至没有正确定义)我完全从设备描述符中删除了它(在固件中)。
现在我有了一个可以正常工作的设备。我不知道为什么 linux 拒绝从设备读取而 Windows 工作正常,但它确实让我陷入了困境。
关于linux - 使用 libusb 从设备读取问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/181892/