通过 USB OTG 使用小工具同时模拟 HID 和 RNDIS 网络设备

通过 USB OTG 使用小工具同时模拟 HID 和 RNDIS 网络设备

我正在尝试在具有 USB OTG 的 Raspberry Pi 上模拟 HID 和网络设备。要求如下:

  • 网络需要在Windows下工作
  • HID 和网络应同时工作

我浏览了很多帖子,但找不到 Linux 小工具的文档来解释一切是如何工作的。

我发现并且在 Linux 上真正有效的是这个解决方案来自 USB 军械库项目。该解决方案对网络使用ECM模式。 Windows 以某种方式识别该设备,但无法获取正确的驱动程序。我能找到的唯一驱动程序需要购买并且非常昂贵。根据这个帖子如果只使用一种配置,它应该可以工作。

因此,据我所知,有两种可能的解决方案:

  • 让 Windows 安装并使用适用于 ECM 模式的正确驱动程序
  • 让 RNDIS 模式与同时启用的 HID 一起工作

我已经尝试让这两种解决方案都起作用。具有 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

相关内容