USB OTG経由でガジェットを使用してHIDとRNDISネットワークデバイスを同時にエミュレートする

USB OTG経由でガジェットを使用してHIDとRNDISネットワークデバイスを同時にエミュレートする

USB OTGを使用してRaspberry PiでHIDとネットワークデバイスをエミュレートしようとしています。要件は次のとおりです。

  • ネットワーキングはWindowsで動作する必要があります。
  • HIDとネットワークは同時に機能する必要があります。

私は多くの記事を見ましたが、すべての仕組みを説明するLinuxガジェット関連のドキュメントが見つかりませんでした。

私が見つけて実際にLinuxで動作するのはこのソリューションUSB Armoryプロジェクトで。このソリューションは、ネットワークにECMモードを使用します。 Windowsは何とかデバイスを認識しますが、正しいドライバを取得できません。私が見つけることができる唯一のドライバは購入が必要で、非常に高価です。 ~によるとこの投稿1つの構成のみを使用すると正常に機能します。

したがって、私が知っている限り、可能な解決策は2つあります。

  • WindowsでECMモードに適したドライバをインストールして使用できるようにする
  • HIDと連携するようにRNDISモードのインポートも有効

私は両方のソリューションを操作しようとしました。 RNDISを持つ単一のネットワークが機能し(以下のコードを参照)、単一のHIDも機能します。

#!/bin/bash -e
modprobe libcomposite
cd /sys/kernel/config/usb_gadget/
mkdir g && cd g

echo 0x1d6b > idVendor  # Linux Foundation
echo 0x0104 > idProduct # Multifunction Composite Gadget
echo 0x0100 > bcdDevice # v1.0.0
echo 0x0200 > bcdUSB    # USB 2.0

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

mkdir -p strings/0x409
echo "affeaffe"    > strings/0x409/serialnumber
echo "myself"         > strings/0x409/manufacturer
echo "myproduct"        > strings/0x409/product

mkdir -p functions/rndis.usb0  # network
mkdir -p configs/c.1

echo 250 > configs/c.1/MaxPower
ln -s functions/rndis.usb0 configs/c.1/

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

ln -s configs/c.1 os_desc
udevadm settle -t 5 || :

ls /sys/class/udc/ > UDC

ip link set usb0 up

ベストアンサー1

おすすめ記事