embedded - Linux 上的 USB 软件环回设备

标签 embedded usb client-server protocols

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

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

这是正确的做法吗?我意识到 USB 协议(protocol)是不对称的,并在 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).

最佳答案

别想太多

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

关于模拟 USB 主机,你是对的。您不需要创建一个奇特的 USB 环回设备或任何类似的愚蠢行为。

  1. 设计您的客户端。

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

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

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

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

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

  • 真正的驱动力——生产。

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

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

关于embedded - Linux 上的 USB 软件环回设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2005709/

相关文章:

c - C 标准是否对使用的堆栈空间量有任何保证?

embedded - 我可以获取 USB 上的调试信息吗?

objective-c - Mac环境下objective-c如何使用USB/HID接口(interface)?

android - usb 配件,通过 Service 的 intent-filter 捕获 USB_ACCESSORY_ATTACHED

language-agnostic - 股市数据馈送如何工作?

mysql - 如何仅通过对服务器的单个请求来存储一些数据并可以在多个页面上使用?

c - 寻找良好的小型 DES 实现

linker - 构建用于Nordic SDK程序的静态rust库时多次定义 `memset'

c - libudev 返回重复的 USB 设备

java - 扩展我的 Java 程序以向其他计算机发送警报消息