USB 小工具串行端口(g_serial 或复合):如何控制 Windows 将看到的名称?

USB 小工具串行端口(g_serial 或复合):如何控制 Windows 将看到的名称?

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选择manufacturerproduct和字段吗?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 内核。

相关内容