首页 文章

USB linux小工具零驱动程序与Windows主机通信

提问于
浏览
3

我需要在Windows 7主机和Linux设备之间 Build 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个批量 endpoints ,所以这应该不是问题 . 当然,有人使用Gadget Zero在Windows主机和Linux设备之间进行数据通信?使用Gadget Zero,应该很容易枚举连接的Linux设备并与它们进行通信 .

诀窍是将Windows端通信保持在内核模式 . 也许有人用Gadget Zero,Windows 7 KMDF和一些示例源代码指出了我正确的方向吗?我很难相信之前没有人这样做过,因为我的互联网搜索没有太多 . (主要是使用Gadget Serial的用户模式解决方案) .

谢谢!

1 回答

  • 2

    那么你正在编写一个Win32驱动程序,你想在其中与你的linuxed USB通信?我没有写过很多win32内核代码,但我相信我已经在文档中看到了一个很大的部分,说“这就是你如何让usb驱动程序”......这就是它 . 换句话说,在内核模式下,您可以访问完整的内核usb层 . 您不需要现有的驱动程序或诸如此类的东西 .

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

    modprobe g_serial use_acm=0
    

    给它你自己的供应商ID,你就可以附加你自己的自定义win32驱动程序 . “多个Linux设备”将由Windows处理 . (将启动您的驱动程序的多个实例 . )

    你看到的回声很可能是一个终端功能 . (uart上的终端模式将回显 . )连接时必须禁用它 . 而现在你正在使用它,你还必须禁用xon / xoff,esc chars等(标准遗留垃圾 . )

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

    无论如何,几年前你已经多次解决了这个问题 . 我很高兴知道你想出了什么 .

相关问题