问题描述
我创建了一个小型的嵌入式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的补丁都很好。任何提示,也可以在其中放置其他代码。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)