linux - 使用 libusb 从设备读取问题

标签 linux usb libusb

情况是这样的:我有一个 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/

相关文章:

c - LibUSB 驱动程序问题 : timeout

c++ - Libusb 以及如何在 Ubuntu 中使用它的包

java - USB Java 库

regex - Linux shell 提取匹配模式之间的子字符串

c - 如何避免 linux 设备驱动程序中的 copy_from_user 和 copy_to_user

linux - 让 SSH 登录 session 重定向到交互式 telnet 到本地主机

windows - 如何获取U盘的制造商序列号?

linux - 在 Linux 上编辑 USB 设备驱动程序

python - 以随机顺序打印字典的内容

linux - 在 Linux 中操作 LED Wiz