Linux 上的 USB 3.0 錯誤「Failed to Submit Transfer Status=0xe2100001」#
問題#
若您在Linux 上使用 USB 3.0 攝影機,並提高了傳輸層 MaxTransferSize 若將參數設定為大於 65536 位元組的值,您可能會在主控台反覆收到以下錯誤訊息:
Failed to submit transfer status=0xe2100001.
擴增傳輸層 MaxTransferSize 此參數通常能降低 CPU 負載,因為它可減少資料開銷並降低 CPU 中斷的發生頻率。在Linux 上,「最大傳輸大小」的上限約為 3 MB。
出現此錯誤訊息的原因是,核心模組「usbcore」沒有足夠的記憶體來處理所要求的 USB 請求區塊 (URB) 大小。預設情況下,「usbcore」約有 16 MB 的可用記憶體。
所要求的 URB 大小計算方式如下:
最大傳輸大小 × 最大佇列 URB 數量
預設情況下,「佇列中 URB 的最大數量」設定為 64。
解決方案#
為避免出現上述錯誤訊息,請依下列步驟操作:
- 使用上述公式並將
NumMaxQueuedUrbs請在 `pylon Viewer ` 或您的應用程式中調整該值,直到錯誤訊息消失為止。 -
為核心模組「usbcore」分配更多記憶體:
-
若要查詢目前已分配的記憶體量(以 MB 為單位),請在主控台中執行以下指令:
-
若要僅針對當前工作階段增加記憶體(例如增加至 32 MB),請以 root 身分登入並執行以下指令:
-
如何永久增加已分配的記憶體,取決於所使用的Linux 發行版。
對於採用「grub2」的 Ubuntu,可以採取以下步驟:
- 編輯檔案:/etc/default/grub。
- 變更變數: GRUB_CMDLINE_LINUX為所有類別設定合理的預設值開始。例如:
- 以 root 身分執行以下指令,然後重新啟動系統: