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

时间:2020-09-17 15:30:05

标签: linux-kernel usb embedded-linux usb-otg

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

现在,我们要在嵌入式Linux中使用相同的API。 USB-Gadget模式提供串行CDC / ACM和RNDIS-以太网等。

我能够用只有批量ep的gadgetfs创建一个USB-Gadget。我可以与Linux和Windows主机通信。 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-Device。

RNDIS小工具确实具有WinUSB支持。因此,我尝试使用https://github.com/libusbgx/libusbgx创建自己的USB小工具设备。但是,如果我使用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内核驱动程序源,以找到位置,在这里我可以简单地将此WinUSB os-descriptor内容标记为USBG_F_SERIAL类型。但是我认为这将需要一个月的时间。

任何解决方案都可以。 Linux驱动程序源g_serial的补丁程序或如何配置USB-Gadgetfs的补丁都很好。任何提示,也可以在其中放置其他代码。

1 个答案:

答案 0 :(得分:0)

我想更改内核,但幸运的是发现了这一点: https://blog.soutade.fr/post/2016/07/create-your-own-usb-gadget-with-gadgetfs.html

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

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