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などの一部の機能はマルチインターフェイスとして表示されます)。

関連情報