如何创建批量 USB 小工具 WinUSB 设备

How can I create a Bulk USB Gadget WinUSB Device

我创建了一个小型嵌入式 WinUSB 设备,它提供 2 个批量端点。此设备无需安装驱动程序或 .inf 文件即可与 Linux 和 Windows10 通信。

现在我们要使用相同的 API 和嵌入的 Linux。 USB-Gadget 模式提供串口 CDC/ACM 和 RNDIS-Ethernet 等等。

我能够用只有批量 ep 的 gadgetfs 创建一个 USB-Gadget。我可以与 Linux 和 Windows host 进行通信。 USB 设备有 /dev/ttyGS0 可以通信。但是在 Windows 中我必须手动安装 WinUSB 驱动程序。

我使用 yocto 创建嵌入式内核。 我在这里添加了一些代码行:/linux-imx/drivers/usb/gadget/legacy/serial.c , f_serial.c, u_serial.h 以添加额外的变量 os_desc 和参数 use_winusb。但结果 g_serial 仍会在 Windows10 或无 WinUSB 设备中创建一个 COM 端口。对于我们的设备,我们只需要 WinUSB 设备。

RNDIS 小工具确实支持 WinUSB。所以我尝试用 https://github.com/libusbgx/libusbgx 创建一个自己的 USB-Gadget 设备。但是,如果我使用 USBG_F_SERIAL 函数类型,则它无法创建 WinUSB。查看错误:

Error setting function OS desc
Error: USBG_ERROR_NOT_FOUND : Not found (file or directory removed)

如果我使用 USBG_F_RNDIS,它会工作,并且使用操纵的 USB 描述符,它会被 Windows 识别为 WinUSB 设备。但是 Linux 将它实现为 USB-ETH 以太网设备。 USB 设备没有 /dev/ttyGS0 串行连接进行通信。

我正在阅读 Linux 内核驱动程序源代码,以找到 pos 版本,我可以在其中简单地将此 WinUSB os-描述符添加到 USBG_F_SERIAL 类型。但我认为需要一个月才能完成。

任何解决方案都可以。 Linux 驱动程序源 g_serial 的补丁或如何配置 USB-Gadgetfs 会很棒。任何提示,在哪里放置额外的代码也可以。

本来想换内核的,幸好找到了这个: https://blog.soutade.fr/post/2016/07/create-your-own-usb-gadget-with-gadgetfs.html

此代码使添加 WinUSB 功能变得容易。

WinUSB 修改版本来源:https://github.com/rundekugel/gadgetfsd/tree/WinUSB