Embedded Linux下的USB软件环回装置

Embedded Linux下的USB软件环回装置,embedded,usb,client-server,protocols,Embedded,Usb,Client Server,Protocols,我需要编写一个客户机-服务器应用程序,其中一个微型服务器位于USB小工具上,并与主机上的客户机应用程序通信 我以前没有做过这种事情,但我做过网络应用,通常,它们都是在本地机器上使用lo环回网络接口开发和调试的。这可能影响了我的思维方式,我正在寻找一种在我的机器上模拟USB主机和小工具的方法,这样我就可以在我的PC上完全构建应用程序的两端,然后再深入实际的小工具并开始工作 这样做对吗?我意识到USB协议是不对称的,并在上面找到了一些参考资料,但这似乎是最自然的方式 如果这是正确的方法,我如何从这样

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

我以前没有做过这种事情,但我做过网络应用,通常,它们都是在本地机器上使用
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).
主机应用程序(客户端)在PC设备文件0环回设备文件1小工具应用程序(服务器)也在PC上(将移动到小工具)。
不要想太多

你不需要喜欢“环回”设备

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

  • 设计你的客户

  • 设计一个“通用”USB接口层,将请求简单地传递给真正的USB设备驱动程序。现在还不需要编写代码

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

    显然,这不是一个完整的模拟。对你来说,测试你的客户就足够了。 客户机必须与之交互的每个关键特性都用足够的代码表示 您确信客户工作正常的回复

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

  • 您的客户机软件现在有两种配置--全部由软件处理:

    • 真正的驱动力——用于生产

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


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

    虽然您所寻找的在技术上是可能的,但我认为这很难实现,因为它涉及到创建一个模拟真实USB设备的USB驱动程序

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


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

    我建议您将该设备设置为普通usb网络适配器。 然后服务器就是web服务器,用户不需要安装软件。 在你的电脑上做测试和你以前做的一样

    或者让它看起来像一个USB串行设备,并在其上安装一个滑动链接(这很容易)


    如果你真的需要一个奇怪的协议,那就买一个USB开发工具包,比如一个微芯片USB PIC工具包。然后,目标系统被编程并从主机PC上运行。

    已经有内核模块来进行模拟。我认为繁重的工作已经完成,我可以专注于客户机和服务器应用程序。我已经更新了反映我发现的问题。你能详细说明第3步和以后的步骤吗?我不太清楚我是否理解。网络适配器的问题是,我最终将在其上安装应用程序的设备没有网络支持,我不想添加它只是为了测试。USB串行设备的建议很有趣。谢谢