Linux上的USB软件环回设备

Nou*_*him 2 embedded usb client-server protocols

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

我之前没有做过这类事情,但我已经完成了webapps,通常,它们都是使用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).
Run Code Online (Sandbox Code Playgroud)

S.L*_*ott 5

不要过度思考.

你不需要想要"环回"设备.

你是关于模拟USB主机的.您无需创建花哨的USB环回设备或任何类似的愚蠢.

  1. 设计你的客户.

  2. 设计一个"通用"USB接口层,只需将请求传递给真正的USB设备驱动程序.不要编码这个.

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

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

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

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

  • 真正的驱动力 - 用于生产.

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

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