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의 최대 크기는 약 3 MB입니다.
이 오류 메시지가 발생하는 이유는 커널 모듈 "usbcore"에 요청된 URB(USB Request Block) 크기에 비해 메모리가 충분하지 않기 때문입니다. 기본적으로 "usbcore"에는 약 16 MB의 메모리가 할당되어 있습니다.
요청된 URB 크기는 다음과 같이 계산됩니다.
Maximum Transfer Size x Num Max Queued URBs
기본적으로 Num Max Queued URBs는 64로 설정되어 있습니다.
해결 방법#
위의 오류 메시지를 방지하려면 다음과 같이 진행하십시오.
- 위의 공식을 사용하여 오류 메시지가 사라질 때까지 pylon Viewer 또는 애플리케이션에서
NumMaxQueuedUrbs값을 줄이십시오. -
커널 모듈 "usbcore"에 더 많은 메모리를 할당합니다.
-
현재 할당된 메모리(MB 단위)를 확인하려면 콘솔에서 다음 명령을 실행하십시오.
-
현재 세션에만 메모리를 늘리려면(예: 32 MB) 루트(root) 계정으로 로그인하여 다음을 실행하십시오.
-
할당된 메모리를 영구적으로 늘리는 방법은 사용하는 Linux 배포판에 따라 다릅니다.
"grub2"를 사용하는 Ubuntu의 경우 다음과 같이 수행할 수 있습니다.
- 다음 파일을 편집합니다: /etc/default/grub.
- 변수를 변경합니다: GRUB_CMDLINE_LINUX. 예를 들어:
- 루트(root) 권한으로 다음 명령을 실행하고 재부팅합니다: