繁体   English   中英

Linux上的USB软件回送设备

[英]USB software loopback device on Linux

我需要编写一个客户端服务器应用程序,其中一个微型服务器位于USB小工具上,并与主机上的客户端应用程序进行通信。

我以前没有做过这种事情,但是我已经做过Web应用程序,通常,它们都是使用lo回送网络接口在本地计算机上开发和调试的。 这可能影响了我的思维方式,我正在寻找一种在计算机上模拟USB主机和小工具的方法,以便在深入研究实际小工具并获得产品之前,可以在PC上完全构建应用程序的两端。事情进行。

这是正确的方法吗? 我意识到USB协议是非对称的,因此在这里找到了对此的一些参考,但这似乎是最自然的解决方法。

如果这是正确的方法,那么我该如何从这样的事情开始,还有其他人意识到我可能偶然发现的任何潜在问题吗?

更新

我从谷歌搜索找到的参考文献。 有Linux内核模块(也是我的Ubuntu安装的一部分),它们似乎能够模拟主机和小工具(分别是dummy_hcd和gadgetfs)。 我的想法是简单地拥有

Host application (client) on PC <-> device file 0 <-> Loopback device <-> device file 1 <-> Gadget application (server) also on PC (will be moved to gadget).

不要想太多。

您无需看中“回送”设备。

您对模拟USB主机是正确的。 您无需创建精美的USB回送设备或类似的任何愚蠢的东西。

  1. 设计您的客户。

  2. 设计一个“通用” USB接口层,该层将简单地将请求传递给真实的USB设备驱动程序。 暂时不要编码。

  3. 编写一个模拟主机而不使用真实USB设备的USB接口层。 它具有与通用USB接口相同的接口。 这是一个适当的子类。 但是,它实际上并没有使用USB设备驱动程序。 相反,它的行为就像是USB设备上的Web服务器。

    显然,这不是一个完整的模拟。 足以测试您的客户。 客户端必须与之交互的每个关键功能都以足够确定的响应表示,您可以确定客户端可以正常工作。

  4. 当您的客户端正常工作时,对真正的USB接口层进行编码,该层实际上将请求从客户端传递到设备。 这是您将在生产中使用的,并与真实的USB设备进行集成测试。

您的客户端软件现在具有两种配置-全部在软件中处理:

  • 真正的驱动程序-用于生产。

  • 模拟驱动程序-用于单元测试。

它不应该比这更复杂。 而且,您现在可以使用模拟主机对整个客户端进行单元测试。

虽然您正在寻找的技术上可行,但我想说这很难实现,因为它涉及创建可模拟真实USB设备的USB驱动程序。

我可以推荐几种替代方法。 首先,您可以选择使用虚拟COM端口通过USB进行通信。 可以使用简单的串行接口开发和测试主机软件。 另一个解决方案是首先创建业务逻辑部分,使用软件模拟器对其进行测试,然后再移至硬件部分。

最后,如果您还不了解它,请看一下libusb库。

我建议您使设备看起来像普通的USB网络适配器。 然后服务器就是Web服务器,用户不需要安装软件。 这样一来,在您的PC上进行测试就和以前一样。

或使其看起来像USB串行设备,并在其上放置一个SLIP链接(这很容易)

如果您真的必须有一个怪异的协议,请像一个微芯片USB PIC套件中的一个一样获取USB开发人员套件。 然后对目标系统进行编程并从您的主机PC运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM