USB 장치 설명자 수정

USB 장치 설명자 수정

현재 장치 모드에서 USB OTG 포트가 있는 Linux 시스템을 설정하려고 합니다. 사전 구성된 구성을 사용하여 NCM 가젯을 활성화하면 이미 가젯 드라이버를 로드할 수 있으며 NCM 가젯은 OTG 포트에 연결된 호스트에서 인식됩니다. 여러 끝점이 있는 두 개의 인터페이스가 /sys/bus/usb/devices/3-1/ 아래에 나열되어 있습니다. 이제 호스트에 제공되는 인터페이스(및 엔드포인트)를 수정하고 싶습니다.

내 연구에 따르면 libcomposite와 configfs가 이 문제에 대한 해결책이라고 생각합니다. 따라서 buildroot의 configfs를 통해 구성 가능한 NCM을 활성화했습니다.

구성을 위해 configfs를 통한 가젯 구성에 대한 커널 문서를 따라해 보았습니다.https://www.kernel.org/doc/Documentation/usb/gadget_configfs.txt

libcomposite.ko를 로드하고 configfs를 설치했습니다. /sys/kernel/config/usb_gadget/ 아래에 폴더를 만들 수 있습니다. 폴더에 들어가면 예상되는 파일과 하위 폴더가 포함되어 있습니다.

total 0
-rw-r--r--    1 root     root        4.0K Feb 16 15:15 UDC
-rw-r--r--    1 root     root        4.0K Feb 16 15:15 bDeviceClass
-rw-r--r--    1 root     root        4.0K Feb 16 15:15 bDeviceProtocol
-rw-r--r--    1 root     root        4.0K Feb 16 15:15 bDeviceSubClass
-rw-r--r--    1 root     root        4.0K Feb 16 15:15 bMaxPacketSize0
-rw-r--r--    1 root     root        4.0K Feb 16 15:15 bcdDevice
-rw-r--r--    1 root     root        4.0K Feb 16 15:15 bcdUSB
drwxr-xr-x    2 root     root           0 Feb 16 14:43 configs
drwxr-xr-x    2 root     root           0 Feb 16 14:43 functions
-rw-r--r--    1 root     root        4.0K Feb 16 15:15 idProduct
-rw-r--r--    1 root     root        4.0K Feb 16 15:15 idVendor
drwxr-xr-x    2 root     root           0 Feb 16 14:43 os_desc
drwxr-xr-x    2 root     root           0 Feb 16 14:43 strings
내 문제는 이제 어떤 기능도 만들 수 없다는 것입니다. ./functions 아래에 폴더를 만들면 나에게 도움이 됩니다.
mkdir functions/ncm.usb3
mkdir: can't create directory 'functions/ncm.usb3': No such file or directory

그러나 실제로 /lib/modules/4.14.78-linux-v4.14-BSP0112/kernel/drivers/usb/gadget/function/ 아래에 usb_f_ncm.ko 파일이 있습니다!

여러 이름(예: usb0, usb, u1...)과 기타 장치(예: 대용량 저장 장치)를 시도했지만 모두 성공하지 못했습니다. ./configs 아래에 구성을 생성할 수 있고 ./strings 아래에 하위 폴더를 생성할 수 있습니다. 여기서 제가 놓치고 있는 퍼즐 조각은 무엇입니까? 도움을 주시면 감사하겠습니다.

추가 정보: 이것은 임베디드 시스템입니다. modprobe는 사용할 수 없으며 insmod만 사용할 수 있습니다.

고쳐 쓰다위에서부터 이 문제를 해결할 수 있습니다. 이전에는 빌드 루트에 모듈(M)로 libcomposite와 ncm이 있었습니다. 커널에 직접 포함시키면 ncm 기능을 추가할 수 있습니다(*). 이는 modprobe 기능이 부족하기 때문일 수 있습니다. 그러나 생성된 함수 폴더에는 4개의 구성 파일만 나타납니다.

total 0
-rw-r--r--    1 root     root        4.0K Feb 16 16:30 dev_addr
-rw-r--r--    1 root     root        4.0K Feb 16 16:30 host_addr
-r--r--r--    1 root     root        4.0K Feb 16 16:30 ifname
-rw-r--r--    1 root     root        4.0K Feb 16 16:30 qmult

이 인터페이스의 추가 속성을 어떻게 지정합니까? 엔드포인트처럼요?

답변1

더 많은 연구를 하면서 내 질문에 답하고 싶습니다.

간단히 말해서:아니요, NCM 기능은 configfs에서 제공되는 것 이상으로 추가로 구성할 수 없습니다. 나머지 USB 설명자(예: 엔드포인트, 패킷 크기 등)는소스 코드함수.

호스트가 보는 인터페이스는 장치 측의 가젯 관련 기능에 해당합니다. 여러 기능(예: MIDI, 대용량 저장 장치, NCM 등)을 동일한 장치에 연결할 수 있습니다.커널 구성 문서가젯 드라이버용. 이는 호스트 측에서 인터페이스로 나타납니다(NCM과 같은 일부 기능은 다중 인터페이스로 나타납니다).

관련 정보