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로 설정되어 있습니다.
해결 방법#
위의 오류 메시지를 방지하려면 다음과 같이 진행하십시오.
- 위의 공식을 사용하여 오류 메시지가 사라질 때까지 pylon Viewer 또는 애플리케이션에서
NumMaxQueuedUrbs값을 줄이십시오. -
"usbcore" 커널 모듈에 더 많은 메모리를 할당합니다.
-
현재 할당된 메모리(MB 단위)를 확인하려면 콘솔에서 다음 명령을 실행하십시오.
-
현재 세션에 한해서만 메모리를 늘리려면(예: 32MB) root로 로그인하여 다음을 실행하십시오.
-
할당된 메모리를 영구적으로 늘리는 방법은 사용하는 Linux 배포판에 따라 다릅니다.
"grub2"를 사용하는 Ubuntu의 경우 다음과 같이 할 수 있습니다.
- 파일을 편집합니다: /etc/default/grub.
- 변수를 변경합니다. GRUB_CMDLINE_LINUX. 예를 들면 다음과 같습니다.
- root 권한으로 다음 명령을 실행하고 시스템을 재부팅합니다.