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
选择manufacturer
、product
和字段吗?serialnumber
或者我需要在 Windows 上执行某种 .inf 魔法吗?
我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 内核。