Linux 上的 USB 3.0 错误“提交传输失败 Transfer Status=0xe2100001”#
问题#
如果在 Linux 系统上运行 USB 3.0 相机并将传输层 MaxTransferSize 参数增加到大于 65536 字节的值,则可能会在控制台中反复收到以下错误消息:
Failed to submit transfer status=0xe2100001.
增大传输层 MaxTransferSize 参数通常可以降低 CPU 负载,因为它减少了数据开销并减少了 CPU 中断。在 Linux 上,Maximum Transfer Size 的最大大小约为 3 MB。
出现此错误消息的原因是内核模块“usbcore”没有足够的 Memory 来满足请求的 USB Request Block (URB) 大小。默认情况下,“usbcore”大约有 16 MB 的可用 Memory。
请求的 URB 大小计算如下:
Maximum Transfer Size x Num Max Queued URBs
默认情况下,Num Max Queued URBs 设置为 64。
解决方案#
为了避免出现上述错误消息,请按照以下步骤操作:
- 使用上述公式并在 pylon Viewer 中或在您的应用程序中减少
NumMaxQueuedUrbs值,直到错误消息消失。 -
为内核模块“usbcore”分配更多 Memory:
-
要查明当前分配的 Memory(以 MB 为单位),请在控制台中执行以下命令:
-
若要仅为当前会话增加 Memory(例如增加到 32 MB),请以 root 用户身份登录并执行:
-
如何永久增加分配的 Memory 取决于所使用的 Linux 发行版。
对于使用“grub2”的 Ubuntu,可以执行以下操作:
- 编辑文件:/etc/default/grub。
- 更改变量: GRUB_CMDLINE_LINUX。例如:
- 以 root 身份执行以下命令并重新启动: