【问题标题】:USB software loopback device on LinuxLinux 上的 USB 软件环回设备
【发布时间】:2011-01-01 14:52:04
【问题描述】:

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

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

这是正确的方法吗?我意识到 USB 协议是不对称的,并在 here 上找到了一些对此的引用,但这似乎是最自然的方式。

如果这是正确的方法,我该如何从这样的事情开始?是否有其他人知道我可能会遇到的任何潜在问题?

更新

我之前从谷歌搜索中找到的参考资料。有一些 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).

【问题讨论】:

    标签: embedded usb client-server protocols


    【解决方案1】:

    别想太多。

    您不需要花哨的“环回”设备。

    您模拟 USB 主机是对的。你不需要创建一个花哨的 USB 环回设备或任何类似的愚蠢。

    1. 设计您的客户端。

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

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

      显然,这不是一个完整的模拟。这足以让您测试您的客户。 客户端必须与之交互的每个关键功能都用足够的罐头表示 您确定客户端有效的响应。

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

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

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

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

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

    【讨论】:

    • 您能详细说明第 3 步及以后的内容吗?我不太确定我是否理解。
    【解决方案2】:

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

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

    最后,如果您还不知道,请查看libusb 库。

    【讨论】:

    • 已经有内核模块来做模拟。我认为繁重的工作已经完成,我可以专注于客户端和服务器应用程序。我已经更新了反映我的发现的问题。
    【解决方案3】:

    我建议你让设备看起来像一个普通的 USB 网络适配器。 那么服务器就是网络服务器,用户不需要安装软件。 然后在您的 PC 上进行测试与您之前所做的完全相同。

    或者让它看起来像一个 USB 串行设备,并在其上放置一个 SLIP 链接(这很简单)

    如果您真的需要一个奇怪的协议,请使用 USB 开发工具包,例如微芯片 USB PIC 工具包之一。然后对目标系统进行编程并在您的主机 PC 上运行。

    【讨论】:

    • 网络适配器的问题是我最终要放置应用程序的设备没有网络支持,我不想添加它只是为了测试。 USB 串行设备建议很有趣。谢谢
    猜你喜欢
    • 2010-09-29
    • 1970-01-01
    • 2011-01-12
    • 2011-12-25
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多