2012-07-24 57 views
2

我需要在Windows 7主機和Linux設備之間建立USB通信以進行數據傳輸。我能夠在設備上編譯Linux內核以將Gadget Zero驅動程序包含在內核中(而不是作爲可加載模塊--Linux版本3.0.15)。我的項目有一些要求,這也解釋了爲什麼我選擇Gadget Zero:USB linux小工具零驅動程序與Windows主機通信

1)在Windows 7主機上,必須使用內核模式驅動程序通過USB連接進行通信以發送和接收批量數據。 (速度並不重要,一次不會有很多數據)。

2)在linux設備上,除了通過USB鏈接輕鬆發送和接收數據外,USB端沒有要求。接收到的數據最終將被「解組」,以調用另一個內核模塊中的函數(以及將這些響應打包併發送回主機)。 3)多個linux設備將連接到主機,因此需要簡單的方法來枚舉連接的設備並與它們進行通信。

因此,由於要求,我決定對小工具系列。我在通過Win 7主機中的內核模式(KMDF)中的虛擬COM端口發送和接收數據時遇到嚴重問題。 WinUSB似乎不想打開我的連接設備(我在VS2012中使用了KMDF windows模板中的USB驅動程序)另外,在linux端的小工具串行驅動程序中,我找不到數據收到和發送的功能。另外,由於某種原因,任何在linux設備上收到的數據似乎都會回顯給主機。 (並且爲了測試這一點,我在Windows中編寫了一個簡單的用戶模式應用程序,這對我的項目來說是不允許的)。

Gadget Zero,它在linux上顯得簡單得多。我可以將USB電纜插入Win7主機,我可以讓設備出現在設備管理器中。但是,我又遇到了通過鏈接進行溝通的問題。小工具零有兩個批量端點,所以這不應該是一個問題。當然,有人使用Gadget Zero在Windows主機和Linux設備之間進行數據通信。使用Gadget Zero,應該很容易枚舉連接的Linux設備並與它們進行通信。

訣竅是保持Windows端通信在內核模式下。有人可能用小工具零,Windows 7 KMDF和一些示例源代碼指向正確的方向嗎?我很難相信之前沒有人做過這件事,因爲我的網絡搜索量並不多。 (主要是用Gadget Serial的用戶模式解決方案)。

謝謝!

回答

2

因此,您正在編寫一個Win32驅動程序,您想在其中與您的linuxed usb進行通信?我沒有編寫太多的win32內核代碼,但我相信我已經看到了文檔中的一個巨大部分,比如說「這就是你如何製作usb驅動程序」......就是這樣。換句話說,在內核模式下,您可以訪問完整的內核USB層。您不需要現有的驅動程序或不需要。

在Linux端,您可以在不同的運行模式下使用串行小工具。只有默認的運行模式,它將自己註冊爲VCP。存在一個更基本的模式:

modprobe g_serial use_acm=0 

給它自己的供應商ID,你就可以附上你自己自定義的Win32驅動程序。 '多個linux設備'將由Windows處理。 (您的驅動程序的多個實例將啓動。)

您看到btw的回聲很可能是終端功能。 (飛鏢上的終端模式會回顯。)連接時必須禁用它。而現在你已經掌握了它,你還必須禁用xon/xoff,esc等字符(標準傳統垃圾。)

還有一件事。我不確定小工具零實際上是否將數據發送到線上。它意味着測試小工具框架。 (儘管我可能會誤會)。

無論如何,你已經在幾年前解決了這個問題。我很高興知道你想出了什麼。

相關問題