如何模拟 USB 设备?

Posted

技术标签:

【中文标题】如何模拟 USB 设备?【英文标题】:How to emulate USB devices? 【发布时间】:2010-12-27 04:55:01 【问题描述】:

我团队的其他成员将为我的应用程序制作一个简单的非标准 USB 麦克风,但在他们完成之前,我必须模拟它,以进行集成测试。

    物理环回有风险吗? Yes there is 物理环回是否有效? 仅适用于USB bridge 有什么方法可以创建逻辑环回? (MSDN has something about this) 有没有通用的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设备

将 USB 设备连接到 Android 模拟器?

如何模拟 USB 闪存驱动器并同时读取数据

以编程方式通过 USB 模拟 iPhone(真实设备,而非模拟器)位置

Windows PC 作为 USB 从设备来模拟拇指驱动器

求救!!usb hid设备(模拟键盘)遇到的问题