linux - libusbbulk 的最大传输大小是多少?

标签 linux usb libusb

最近我正在开发一个在 Linux 上运行的自定义 USB 接收器程序。我选择使用libusb来开发。由于带宽较大,我需要更大的总传输大小。当时,当我提交超过15MB时(每次批量传输1MB,第16次提交失败)就会出现错误:

[INFO] submit transfer [0]: [0] LIBUSB_SUCCESS / LIBUSB_TRANSFER_COMPLETED
[INFO] submit transfer [1]: [0] LIBUSB_SUCCESS / LIBUSB_TRANSFER_COMPLETED
[INFO] submit transfer [2]: [0] LIBUSB_SUCCESS / LIBUSB_TRANSFER_COMPLETED
[INFO] submit transfer [3]: [0] LIBUSB_SUCCESS / LIBUSB_TRANSFER_COMPLETED
[INFO] submit transfer [4]: [0] LIBUSB_SUCCESS / LIBUSB_TRANSFER_COMPLETED
[INFO] submit transfer [5]: [0] LIBUSB_SUCCESS / LIBUSB_TRANSFER_COMPLETED
[INFO] submit transfer [6]: [0] LIBUSB_SUCCESS / LIBUSB_TRANSFER_COMPLETED
[INFO] submit transfer [7]: [0] LIBUSB_SUCCESS / LIBUSB_TRANSFER_COMPLETED
[INFO] submit transfer [8]: [0] LIBUSB_SUCCESS / LIBUSB_TRANSFER_COMPLETED
[INFO] submit transfer [9]: [0] LIBUSB_SUCCESS / LIBUSB_TRANSFER_COMPLETED
[INFO] submit transfer [10]: [0] LIBUSB_SUCCESS / LIBUSB_TRANSFER_COMPLETED
[INFO] submit transfer [11]: [0] LIBUSB_SUCCESS / LIBUSB_TRANSFER_COMPLETED
[INFO] submit transfer [12]: [0] LIBUSB_SUCCESS / LIBUSB_TRANSFER_COMPLETED
[INFO] submit transfer [13]: [0] LIBUSB_SUCCESS / LIBUSB_TRANSFER_COMPLETED
[INFO] submit transfer [14]: [0] LIBUSB_SUCCESS / LIBUSB_TRANSFER_COMPLETED
libusb: error [submit_bulk_transfer] submiturb failed error -1 errno=12
[INFO] submit transfer [15]: [-1] LIBUSB_ERROR_IO
libusb: error [submit_bulk_transfer] submiturb failed error -1 errno=12

这是在ubuntu18.04上的测试结果,

相关系统信息:

Linux xxx 5.4.0-77-generic #86~18.04.1-Ubuntu SMP Fri Jun 18 01:23:22 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

系统内存:20GB

我在Raspberry Pi 4B上测试时也遇到了同样的问题。我通过Google没有找到相关问题的答案(也许使用了错误的关键字?)

有一个非常相似的问题here ,但是他说最大限制是一个int可以表示的最大值,但好像不是这样的。

任何建议或提示都会对我有很大帮助!

最佳答案

原来我用google很烂,开源真的很棒!!

我深入研究了代码,发现内核源代码中存在内存限制: https://github.com/torvalds/linux/blob/3d5895cd351757f69c9a66fb5fc8cf19f454d773/drivers/usb/core/devio.c#L133

现在我可以通过 /sys/module/usbcore/parameters/usbfs_memory_mb 设置内存限制

关于linux - libusbbulk 的最大传输大小是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68417347/

相关文章:

linux - 如何计算特定列有两种模式的行数?

c - 链接器如何确定 .rodata 部分中某些数据的地址?

javascript - 使用 JavaScript、HTML5 或任何跨平台语言(支持 Android)向 USB HID 写入数据

macos - 为公证加固后,Mac App Bundle 无法访问 USB 设备

android - 从 Android 中的外部 native 可执行文件调用 java 代码

linux - 文件名包含空格的 Shell 脚本问题

linux - ASP.NET 5 和 Docker 错误 :/bin/sh: [dnx,:找不到命令

python - 在 Ubuntu 服务器上使用 python 获取写入 USB 闪存驱动器的必要权限

c++ - 在 Windows 7 上安装 libusb-1.0

c - C 中的结构体定义?