modprobe g_serial
composite
/メソッドを介して私のプロジェクトにガジェットシリアルインターフェースを追加したいと思いますconfigfs
。
MacOS または Linux ホストと通信するときに完全に動作する小さなスクリプト(以下に示す)があります。 Windowsホストと通信するときにも機能しますが、名前だけが常に間違っています。
Windowsホストに接続すると、ガジェットは常にデバイスマネージャに次のように表示されます。「USBシリアルデバイス(COM)」正しい製品名を表示する代わりに。 Windowsはまた、デバイスの製造元を次のようにリストします。マイクロソフト、私が何を設定しても構いませんstrings/0x409/manufacturer
。そして機器のシリアル番号はどこにもありません。
この動作をどのように変更できますか? Windowsで、およびフィールドを正しく/sys/kernel/config/usb_gadget/usb_gadget/g1/os_desc
選択するために魔法を使用できますか?それともWindowsで何らかの.inf魔法を実行する必要がありますか?manufacturer
product
serialnumber
g_serial
最初は次のコマンドを試してみました。
modprobe g_serial \
idVendor="0x4075" \
idProduct="0x0001" \
iSerialNumber="0123456789" \
iManufacturer="Magic Manufacturing" \
iProduct="Gizmomatic Machine"
名前が正しく表示されないときにconfigfs / gadget-serialメソッドを試しました。
#!/bin/bash
set -euo pipefail
mkdir /sys/kernel/config/usb_gadget/g1
cd /sys/kernel/config/usb_gadget/g1
echo 0xEF > bDeviceClass
echo 0x02 > bDeviceSubClass
echo 0x01 > bDeviceProtocol
echo "0x4075" > idVendor
echo "0x0001" > idProduct
mkdir strings/0x409
echo "0123456789" > strings/0x409/serialnumber
echo "Magic Manufacturing" > strings/0x409/manufacturer
echo "Gizmomatic Machine" > strings/0x409/product
mkdir configs/c.1
mkdir configs/c.1/strings/0x409
echo "acm" > configs/c.1/strings/0x409/configuration
mkdir functions/acm.usb0
ln -s functions/acm.usb0 configs/c.1
echo "ci_hdrc.0" > UDC
両方のバリアントは、Windowsで有効なCOMポートを生成するという点で「動作」します。しかし、正確なシリアル番号、製造元、または製品名を報告した人はいませんでした。誰かがここに知恵があるなら、それは私にとって大きな助けになるでしょう。重要な場合は、4.19.35カーネルを使用しています。