2013-07-12 185 views
11

我有一個Linux應用程序,我想自動執行一些測試,其狀態應根據某些設備(即USB設備,WLAN設備,WAN設備)的狀態而改變。但是,我們現在不再有物理的USB,WLAN,WAN等設備,因此我需要找出一種方法來測試此程序,而無需實際插入物理設備,將它們打開/關閉等。模擬物理USB設備Linux

我從簡單地創建一個虛擬USB設備開始,可以從用戶空間控制虛擬USB設備,但是我的知識基本上缺乏防範,無法在這些論壇上使用任何類似主題並將其應用到我的項目中。我覺得我需要創建某種虛擬USB驅動程序,然後讓它與某些用戶級程序而不是usbfs進行通信。然而,即使我創建這個虛擬驅動程序,我如何從用戶空間「插入」這個設備,並讓我的程序註冊到這個特定的驅動程序?我試圖做甚至可能嗎?

回答

0

您可以使用VMWare在虛擬環境中測試您的應用程序嗎?然後,您可以將主機上的任何虛擬設備「插入」到訪客虛擬機,並以此方式測試您的應用程序。

+0

不,不幸的是,我沒有那種對代碼的訪問權限,我所能做的就是添加內核模塊並運行測試應用程序。測試在遠程服務器上運行 –

8

最好的方法是使用Linux Gadget驅動程序和允許您成爲USB設備的硬件。小工具驅動程序允許計算機「假裝」成任何類型的設備。然後,您的被測系統將一根USB OTG電纜連接到小工具箱。如果您的小工具箱具有合適的硬件,則甚至不需要拔下電纜。 「小工具箱」可以是運行Linux的臺式機/筆記本電腦(如果它支持USB OTG),甚至可以是Android手機或Raspberry Pi。 (要注意的是USB電纜吸僅僅因爲電纜配合並不意味着它是正確連接了USB OTG。)

一旦你有正確的USB OTG硬件,您的小工具盒是所有軟件:

1)如果您的設備支持OTG,請確保您的小工具箱不會嘗試成爲USB主機。 (然後,被測設備將成爲USB客戶端。)確保像usb_storage這樣的東西不會自動加載。 2)開箱即用,內核支持USB集線器,USB以太網,USB串行端口和U盤的小工具。只需在你的小工具箱中加載正確的模塊,它就「正常工作」。例如,要創建USB記憶棒,請執行如下操作:「insmod g_file_storage.ko file=/dev/ram0」。遠端會認爲你插入了USB棒。

對於串行設備,您的小工具可以運行用戶空間代碼,在/ dev/USBX」和談判,以測試設備「拿起電話。」(據推測模擬一個4G調制解調器或什麼的。)

由於製造商懶得理解USB,所以很多設備真的是「USB串口」。

3)通過一些重新編譯或配置,你可以讓那些通用的小工具設備假裝爲各種USB ID或返回各種供應商字符串等。這不會與「測試真實硬件」相同,但至少您正在使用這些設備的通用版本進行測試。

4)對於不在內核中的設備類型(即WiFi或其他),您是獨立的。有了足夠的血汗和眼淚,你可以使用寫你自己的小工具類型。 (理想情況下,儘可能保持用戶空間,並且只處理內核中性能關鍵部件。)

注意:不可能同時理解和欣賞USB。

+1

如果我能夠物理訪問測試系統,這將是完美的;不幸的是,我沒有。但是,Linux小工具驅動程序可能會派上用場......我打算編寫一個USB驅動程序,該驅動程序在初始化時會自動註冊一個虛擬USB設備,該設備可以鏡像Linux小工具源中的設備,配置和接口描述符。這可以工作嗎? –

+0

看起來像內核模塊已被重命名爲'usb_f_mass_storage.ko'。請參閱[鏈接](https://github.com/torvalds/linux/blob/master/Documentation/usb/gadget-testing.txt) – netvope