gpt4 book ai didi

windows - USB linux gadget 零驱动程序与 Windows 主机通信

转载 作者:可可西里 更新时间:2023-11-01 09:30:42 24 4
gpt4 key购买 nike

我需要在 Windows 7 主机和 Linux 设备之间设置 USB 通信以进行数据传输。我能够在设备上编译 Linux 内核以在内核中包含 Gadget Zero 驱动程序(不是作为可加载模块 - Linux 版本 3.0.15)。我的项目有一些要求,这也解释了我为什么选择 Gadget Zero:

1) 在 Windows 7 主机上,必须使用内核模式驱动程序通过 USB 连接进行通信,以发送和接收批量数据。 (速度并不重要,一次不会有很多数据)。

2) 在 linux 设备上,除了通过 USB 链接轻松发送和接收数据外,对 USB 端没有要求。接收到的数据最终将被“解码”以调用另一个内核模块中的函数(并将这些响应打包并发送回主机)。

3) 多个 linux 设备将连接到主机,因此需要简单的方法来枚举连接的设备并与它们通信。

因此,由于要求,我决定不使用 Gadget Serial。我在 Win 7 主机的内核模式 (KMDF) 中通过虚拟 COM 端口发送和接收数据时遇到严重问题。 WinUSB 似乎不想打开我的附加设备(我在 VS2012 中使用模板中的 KMDF windows USB 驱动程序)此外,linux 端的小工具串行驱动程序,我找不到接收和发送数据的函数。另外,由于某种原因,linux 设备上收到的任何数据似乎都会回显给主机。 (为了对此进行测试,我在 Windows 中编写了一个简单的用户模式应用程序,这对我的项目来说是禁忌)。

Gadget Zero,在 Linux 端看起来简单多了。我可以将USB线插入Win7主机,我可以让设备出现在设备管理器中。但是,我再次遇到通过链接进行通信的问题。 Gadget Zero 有 2 个批量端点,所以这应该不是问题。当然,有人使用 Gadget Zero 使 Windows 主机和 Linux 设备之间的数据通信成为可能?使用 Gadget Zero,枚举连接的 Linux 设备并与它们通信应该很容易。

诀窍是在内核模式下保持 Windows 端通信。有人可以通过 Gadget Zero、Windows 7 KMDF 和一些示例源代码为我指明正确的方向吗?我很难相信以前没有人这样做过,因为我的互联网搜索结果并不多。 (主要是带有 Gadget Serial 的用户模式解决方案)。

谢谢!

最佳答案

所以你正在编写一个 Win32 驱动程序,你想在其中与你的 linuxed usb 进行通信?我没有写太多的 win32 内核代码,但我相信我在文档中看到了很大一部分,说“这就是你制作 usb 驱动程序的方式”......就是这样。换句话说,当处于内核模式时,您可以访问完整的内核 usb 层。您不需要现有的驱动程序或诸如此类的东西。

在 Linux 端,您可以在不同的运行模式下使用串行小工具。仅默认运行模式,将其自身注册为 VCP。还有一种更基本的模式:

modprobe g_serial use_acm=0

为其提供您自己的供应商 ID,您将能够附加您自己的自定义 win32 驱动程序。 “多个 Linux 设备”将由 Windows 处理。 (将启动您的驱动程序的多个实例。)

顺便说一句,您看到的回声很可能是终端功能。 (uart 上的终端模式会回显。)连接时必须禁用它。现在你已经做到了,你还必须禁用 xon/xoff、esc 字符等。(标准遗留垃圾。)

还有一件事。我不确定小工具零是否真的将数据发送到线路上。它用于测试小工具框架。 (虽然我可能会弄错。)

无论如何,您多年前就已经很好地解决了这个问题。我很高兴知道你想出了什么。

关于windows - USB linux gadget 零驱动程序与 Windows 主机通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11625419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com