USBガジェットのデバイスクラスとプロトコルを設定できません。

USBガジェットのデバイスクラスとプロトコルを設定できません。

デバイスをRNDISガジェットとして設定すると、bDeviceClass、bDeviceProtocol、またはbDeviceSubClassを正常に設定できません/sys/kernel/config/usb_gadget/g1

次の値でガジェットを設定しており、Linuxでその値を正常に読み取ることができます。

echo 0xef > bDeviceClass
echo 0x02 > bDeviceSubClass
echo 0x01 > bDeviceProtocol

ただし、デバイスをWindowsコンピュータに接続し、USBデバイス記述子を観察すると、次のような結果が表示されます。

bDeviceClass:    0x02
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00

4.9カーネルを実行している他のデバイスでは、同じプロセスが正常に動作し、Windowsはデバイスから正しい値を読み込みます。現在、デバイスは4.14.53を実行しています。なぜ以前の方法がもう機能しないのかわかりません。

関連があるかどうかはわかりませんが、現在使用しているデバイスの製品、メーカー、シリアル番号情報を渡すためにpaddingの代わりにg_etherをmodprobingするときにその値をパラメータとして渡す必要がありますが、strings/0x409bDeviceClassを試してみました。 bDeviceSubclassとbDeviceProtocolは同じことをしましたが、運がありませんでした。

私が間違っていることを知っている人はいますか?

ベストアンサー1

解決策は、モジュールを直接実行するlibcompositeのではなく、モジュールをモードプローブすることですg_ether。これにより、USBデバイス記述子を期待どおりに設定できます。

また、終了する前にガジェットをUDCにバインドするスクリプトが必要です。

私は最大限の例を提供しましたが、これが私が使用しているものであり、私に合ったものです。

VENDORID=0x0430
PRODUCTID=0xa4a2
BCDDEVICE=0x100
BCDUSB=0x200

modprobe libcomposite

# Set up the USB Device
cd /sys/kernel/config/usb_gadget
mkdir g1
cd g1

# Make the necessary directories.
mkdir functions/rndis.usb0
mkdir configs/c.1
mkdir strings/0x409
mkdir configs/c.1/strings/0x409

echo 64 > bMaxPacketSize0
echo $BCDUSB > bcdUSB
echo $BCDDEVICE > bcdDevice
echo $VENDORID > idVendor
echo $PRODUCTID > idProduct
echo 0xef > bDeviceClass
echo 0x02 > bDeviceSubClass
echo 0x01 > bDeviceProtocol
echo $MANUFACTURER > strings/0x409/manufacturer
echo $PRODUCT > strings/0x409/product
echo $CONF > configs/c.1/strings/0x409/configuration
echo $SERNO > strings/0x409/serialnumber

echo 1 > os_desc/use
echo 0xcd > os_desc/b_vendor_code
echo MSFT100 > os_desc/qw_sign

echo RNDIS > functions/rndis.usb0/os_desc/interface.rndis/compatible_id
echo 5162001 > functions/rndis.usb0/os_desc/interface.rndis/sub_compatible_id

mkdir functions/rndis.usb0/os_desc/interface.rndis/Icons
echo 2 > functions/rndis.usb0/os_desc/interface.rndis/Icons/type
echo "%SystemRoot%\system32\ddores.dll,-134" > functions/rndis.usb0/os_desc/interface.rndis/Icons/data

mkdir functions/rndis.usb0/os_desc/interface.rndis/Label
echo 1 > functions/rndis.usb0/os_desc/interface.rndis/Label/type
echo $PRODUCT > functions/rndis.usb0/os_desc/interface.rndis/Label/data

ln -s configs/c.1 os_desc

ln -s functions/rndis.usb0 configs/c.1

echo 7600000.dwc3 > UDC

おすすめ記事