跳转到内容
STAGING SERVER
DEVELOPMENT SERVER

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。

解决方案#

为了避免出现上述错误消息,请按照以下步骤操作:

  1. 使用上述公式并在 pylon Viewer 中或在您的应用程序中减少 NumMaxQueuedUrbs 值,直到错误消息消失。
  2. 为内核模块“usbcore”分配更多 Memory:

    1. 要查明当前分配的 Memory(以 MB 为单位),请在控制台中执行以下命令:

      cat /sys/module/usbcore/parameters/usbfs_memory_mb
      
    2. 若要仅为当前会话增加 Memory(例如增加到 32 MB),请以 root 用户身份登录并执行:

      echo -n 32 > /sys/module/usbcore/parameters/usbfs_memory_mb
      

如何永久增加分配的 Memory 取决于所使用的 Linux 发行版。

对于使用“grub2”的 Ubuntu,可以执行以下操作:

  1. 编辑文件:/etc/default/grub。
  2. 更改变量: GRUB_CMDLINE_LINUX。例如:
    GRUB_CMDLINE_LINUX="usbcore.usbfs_memory_mb=32"
    
  3. 以 root 身份执行以下命令并重新启动:
    update-grub
    

返回知识库文章