콘텐츠로 바로 가기
STAGING SERVER
DEVELOPMENT SERVER

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에서 최대 전송 크기(Maximum Transfer Size)의 최대 크기는 약 3MB입니다.

이 오류 메시지가 발생하는 이유는 "usbcore" 커널 모듈에 요청된 USB 요청 블록(URB) 크기에 비해 메모리가 충분하지 않기 때문입니다. 기본적으로 "usbcore"에는 약 16MB의 메모리가 할당되어 있습니다.

요청된 URB 크기는 다음과 같이 계산됩니다.

Maximum Transfer Size x Num Max Queued URBs

기본적으로 Num Max Queued URBs는 64로 설정되어 있습니다.

해결 방법#

위의 오류 메시지를 방지하려면 다음과 같이 진행하십시오.

  1. 위의 공식을 사용하여 오류 메시지가 사라질 때까지 pylon Viewer 또는 애플리케이션에서 NumMaxQueuedUrbs 값을 줄이십시오.
  2. "usbcore" 커널 모듈에 더 많은 메모리를 할당합니다.

    1. 현재 할당된 메모리(MB 단위)를 확인하려면 콘솔에서 다음 명령을 실행하십시오.

      cat /sys/module/usbcore/parameters/usbfs_memory_mb
      
    2. 현재 세션에 한해서만 메모리를 늘리려면(예: 32MB) root로 로그인하여 다음을 실행하십시오.

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

할당된 메모리를 영구적으로 늘리는 방법은 사용하는 Linux 배포판에 따라 다릅니다.

"grub2"를 사용하는 Ubuntu의 경우 다음과 같이 할 수 있습니다.

  1. 파일을 편집합니다: /etc/default/grub.
  2. 변수를 변경합니다. GRUB_CMDLINE_LINUX. 예를 들면 다음과 같습니다.
    GRUB_CMDLINE_LINUX="usbcore.usbfs_memory_mb=32"
    
  3. root 권한으로 다음 명령을 실행하고 시스템을 재부팅합니다.
    update-grub
    

기술 자료로 돌아가기