在 Linux 上發生 USB 3.0 錯誤 "Failed to Submit Transfer Status=0xe2100001"#
問題#
如果您在 Linux 上執行 USB 3.0 相機,並將傳輸層 MaxTransferSize 參數增加到大於 65536 位元組(Bytes)的值,您可能會在主控台中反覆收到以下錯誤訊息:
Failed to submit transfer status=0xe2100001.
增加傳輸層 MaxTransferSize 參數通常可以降低 CPU 負載,因為它減少了資料額外負荷並降低了 CPU 中斷次數。在 Linux 上,Maximum Transfer Size 的最大大小約為 3 MB。
產生此錯誤訊息的原因是核心模組 (kernel module)「usbcore」沒有足夠的記憶體來應付要求的 USB 請求區塊 (URB) 大小。「usbcore」預設大約有 16 MB 的可用記憶體。
要求的 URB 大小計算方式如下:
Maximum Transfer Size x Num Max Queued URBs
Num Max Queued URBs 預設設為 64。
解決方案#
為避免出現上述錯誤訊息,請按照以下步驟操作:
- 使用上述公式,並在 pylon Viewer 或您的應用程式中減少
NumMaxQueuedUrbs值,直到錯誤訊息消失為止。 -
為核心模組「usbcore」分配更多記憶體:
-
若要查看目前已分配的記憶體(以 MBytes 為單位),請在主控台中執行以下指令:
-
若要僅針對目前的工作階段增加記憶體(例如增加至 32 MB),請以 root 身分登入並執行:
-
如何永久增加已分配的記憶體取決於所使用的 Linux 發行版本。
對於使用「grub2」的 Ubuntu,可以執行以下操作:
- 編輯檔案:/etc/default/grub。
- 變更變數: GRUB_CMDLINE_LINUX。例如:
- 以 root 身分執行以下指令並重新開機: