如何模拟 USB 设备?
Posted
技术标签:
【中文标题】如何模拟 USB 设备?【英文标题】:How to emulate USB devices? 【发布时间】:2010-12-27 04:55:01 【问题描述】:我团队的其他成员将为我的应用程序制作一个简单的非标准 USB 麦克风,但在他们完成之前,我必须模拟它,以进行集成测试。
如果有很多可用选项,我宁愿使用 .NET/Matlab/Python 解决方案。
【问题讨论】:
+1 表示丢弃方法和结构良好的问题;) 【参考方案1】:编辑:概念证明here
我强烈推荐this project, USB IP。它是一种通过网络连接 USB 设备的方法。有一个 Windows 客户端。
这意味着,您将客户端安装在您的 Windows 计算机上。 然后,该设备希望与连接到 Linux 计算机(服务器)的 USB 设备通信:
您现在要做的是或者为 Linux 创建一个假设备驱动程序,看起来像是连接到物理 USB 设备,但实际上只是假装是您的 USB 设备的逻辑。有tutorials for writing USB drivers for Linux。 或者您为设备控制管理器创建自己的存根驱动程序(见上图)。这个存根驱动程序可以在 Windows 或 Linux 上运行,没关系。它甚至可以在作为 USB 客户端的相同 Windows 机器上运行。
问题本身中提到的DSF USB Loopback Device 将是与设备控制管理器的存根驱动程序相同的解决方案,但完全不考虑 Linux。
【讨论】:
只是想补充一点:DSF 已被弃用 -- msdn.microsoft.com/en-us/library/windows/hardware/br259131.aspx 奇怪的是似乎没有替代品。你对在哪里看有任何指示吗?我需要在 Windows 上编写一个 USB 设备模拟器,目前我所拥有的都是死胡同。 我会查看 USB IP Windows 客户端本身的来源。它设法显示为任何类型的 USB 设备,因此您应该能够对其进行修改。或者按照答案本身的建议创建一个存根驱动程序。可能很乏味而且有点难,但远非不可能。 @Gishu 您可以使用 USB IP 项目来模拟 USB 设备,正如我在 this 示例中演示的那样。您在 PC 上安装 USB IP 驱动程序,驱动程序侦听请求,python 客户端发送虚假请求以模拟设备。在此示例中,我演示了 HID 鼠标设备,但您可以模拟任何 USB 设备。重要提示:它只是一个 POC,而不是稳定的代码! 很酷的例子,@YaronShani。【参考方案2】:您可以使用 QEMU 编写虚拟 USB 设备。 您可以复制已经存在的设备,例如 this QEMU 存储库中的 dev-serial.c,并根据需要进行更改。 编写和编译 USB 设备后,您只需使用 QEMU 命令行界面将其附加到 VM。
【讨论】:
真的吗?如何复制 USB 键盘 :) 您可以将代码基于 qemu HID 设备,如 this 和 this 所示。以上是关于如何模拟 USB 设备?的主要内容,如果未能解决你的问题,请参考以下文章
RK3399平台开发系列讲解(高速设备驱动篇)6.61USB如何模拟HID设备