我需要在Windows 7主机和Linux设备之间build立USB通信以进行数据传输。 我能够在设备上编译Linux内核以将Gadget Zero驱动程序包含在内核中(而不是作为可加载模块–Linux版本3.0.15)。 我的项目有一些要求,这也解释了为什么我select小零件:
1)在Windows 7主机上,必须使用内核模式驱动程序通过USB连接进行通信以发送和接收批量数据。 (速度不重要,一次不会有很多数据)。
2)在linux设备上,除了通过USB连接轻松收发数据之外,对USB端没有要求。 接收到的数据最终将被“解组”(unmarshalled)以调用另一个内核模块中的函数(以及将这些响应打包并发送回主机)。
3)多个linux设备将连接到主机,因此需要简单的方法来枚举连接的设备并与之通信。
所以由于要求,我决定对小工具系列。 在Win 7主机中,我正在通过内核模式(KMDF)中的虚拟COM端口发送和接收数据。 WinUSB似乎不想打开我的连接设备(我使用VS2012中的模板使用KMDF windows USB驱动程序)另外,在Linux端的小工具串行驱动程序,我找不到数据收发的function。 另外,Linux设备上的任何接收到的数据似乎都由于某种原因而回显给主机。 (为了testing这一点,我在Windows中编写了一个简单的用户模式应用程序,这对我的项目来说是一个不允许的)。
小工具零,看起来更简单的Linux端。 我可以将USB电缆连接到Win7主机,我可以让设备出现在设备pipe理器中。 但是,我又遇到了通过链接进行沟通的问题。 小工具零有两个批量端点,所以这不应该是一个问题。 当然,有人已经使用Gadget Zero在Windows主机和Linux设备之间进行了数据通信。 使用Gadget Zero,应该很容易枚举连接的Linux设备并与之通信。
诀窍是保持Windows方面的沟通在内核模式。 有人可能用小零件,Windows 7 KMDF和一些示例源代码指向正确的方向吗? 我很难相信之前没有人做过这样的事情,因为我的networkingsearch量不多。 (主要是使用Gadget Serial的用户模式解决scheme)。
谢谢!
所以你正在写一个Win32驱动程序,你想与你的Linux的USB通信? 我没有编写太多的win32内核代码,但我相信我已经看到了文档中的一个巨大的部分,像“这是如何使USB驱动程序”这样的东西…就是这样。 换句话说,在内核模式下,您可以访问完整的内核USB层。 你不需要现有的驱动程序或者什么东西。
在linux一侧,你可以使用串行小工具,在不同的运行模式。 只有默认的运行模式,自己注册为VCP。 还有一个更基本的模式:
modprobe g_serial use_acm=0
给它你自己的供应商ID,你就可以附加你自己的自定义WIN32驱动程序。 “多个linux设备”将由Windows处理。 (您的驱动程序的多个实例将启动。)
你看到的回声很可能是一个终端功能。 (飞镖上的终端模式会回显。)连接时必须将其禁用。 而现在,你在这个,你也必须禁用xon / xoff,esc等等(标准的遗留垃圾)。
还有一件事 我不确定小工具零实际上是否将数据发送到线上。 这是为了测试小工具框架。 (虽然我可能会误解)
无论如何,你已经慷慨地解决了这个问题几年前。 我很高兴知道你想出了什么。