无法设置 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。我不确定为什么以前的方法不再有效。

我不确定它是否相关,但为了在我当前的设备上传递产品、制造商和序列号信息,我必须在 modprobing g_ether 时将这些值作为参数传递,而不是填充strings/0x409.我尝试对 bDeviceClass、bDeviceSubclass 和 bDeviceProtocol 执行相同的操作,但没有任何运气。

有谁知道我做错了什么?

答案1

解决方案是 modprobelibcomposite模块而不是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

相关内容