2013-07-12 29 views
11

Mam aplikację dla systemu Linux, dla której chciałbym zautomatyzować niektóre testy, a jej stan powinien się zmienić w zależności od stanu niektórych urządzeń, tj. Urządzeń USB, urządzeń WLAN, urządzeń WAN. Jednak nie mamy już fizycznych urządzeń USB, WLAN, WAN itp., Więc muszę znaleźć sposób na przetestowanie tego programu bez podłączania urządzeń fizycznych, włączania/wyłączania itp.Emulacja fizycznego urządzenia USB Linux

Zaczynam od stworzenia wirtualnego urządzenia USB, które mogę kontrolować z przestrzeni użytkownika, ale z mojej strony istnieje fundamentalny brak wiedzy, który uniemożliwia mi zajęcie się podobnymi tematami na tych forach i zastosowanie ich do mojego projektu. Czuję, że będę musiał stworzyć jakiś wirtualny sterownik USB, a następnie komunikować się z programem na poziomie użytkownika, a nie z usbfs. Jednak nawet jeśli utworzę ten wirtualny sterownik, w jaki sposób mogę "podłączyć" to urządzenie z przestrzeni użytkownika i uzyskać mój program zarejestrowany w tym konkretnym sterowniku? Czy to, co próbuję zrobić, nawet możliwe?

Odpowiedz

0

Czy możesz przetestować swoją aplikację w środowisku wirtualnym za pomocą VMWare? Następnie możesz "podłączyć" dowolne urządzenie wirtualne na komputerze hosta do maszyny wirtualnej gościa i przetestować aplikację w ten sposób.

+0

Nie, niestety nie mam tego rodzaju dostępu do kodu, wszystko co mogę zrobić, to dodać moduły jądra i uruchomić aplikacje testowe.Testy są przeprowadzane na zdalnym serwerze. –

8

Najlepszym sposobem jest użycie sterowników gadżetów i sprzętu Linux, który pozwala ci być urządzeniem USB. Sterownik gadżetu pozwala komputerowi "udawać", że jest dowolnym urządzeniem. Następnie testowany system ma pojedynczy kabel USB OTG do pudełka z gadżetami. Nie musisz nawet odłączać kabla, jeśli twój gadżet ma odpowiedni sprzęt. "Pole gadżetu" może być komputerem stacjonarnym/laptopem z systemem Linux (jeśli obsługuje USB OTG), a nawet telefonem z systemem Android lub Raspberry Pi. (Pamiętaj, że USB kable ssać tylko dlatego, że pasuje kablowych nie znaczy, że jest prawidłowo podłączone do USB OTG.).

Gdy masz odpowiedni sprzęt USB OTG, Twoja skrzynka gadżet jest całe oprogramowanie:

1) Jeśli testowane urządzenie obsługuje OTG, upewnij się, że Twój gadżet NIE próbuje zostać hostem USB. (Wówczas testowane urządzenie stanie się klientem USB). upewnij się, że rzeczy takie jak usb_storage nie są ładowane automatycznie.

2) Po wyjęciu z pudełka jądro obsługuje gadżety dla koncentratorów USB, USB Ethernet, portów szeregowych USB i pamięci USB. Po prostu włóż odpowiednie moduły do ​​skrzynki gadżetowej i "po prostu działa". Na przykład, aby utworzyć pamięć USB, wykonaj następujące czynności: "insmod g_file_storage.ko file=/dev/ram0". Druga strona pomyśli, że podłączyłeś pamięć USB.

Dla urządzeń szeregowych, gadżet może uruchomić kod w przestrzeni użytkownika, który „podnosi słuchawkę” na/dev/USBx”i mówi do urządzenia badanego. (Przypuszczalnie emulacji modemu 4G lub cokolwiek).

Mnóstwo urządzeń to naprawdę "USB serial" pod maską, ponieważ producent był zbyt leniwy, aby zrozumieć USB.

3) Przy odrobinie ponownej kompilacji lub konfiguracji, możesz pozwolić, by te ogólne urządzenia gadżetowe udawały różne USB Identyfikatory lub zwracanie różnych łańcuchów dostawców itd. To nie będzie to samo, co "testowanie na prawdziwym sprzęcie", ale przynajmniej testujesz z ogólną wersją tych urządzeń.

4) W przypadku typów urządzeń, które nie są jeszcze w jądrze (tj. WiFi lub czymś), jesteś sam. Przy wystarczającym spoceniu krwi i łzach możesz napisać własny typ gadżetu. (Najlepiej zachowaj jak najwięcej w przestrzeni użytkownika i zajmij się tylko najważniejszymi częściami jądra).

Uwaga: nie można jednocześnie zrozumieć i docenić USB.

+1

Byłoby to idealne, gdybym miał fizyczny dostęp do systemu testowego; niestety nie. Jednak przydatne mogą być sterowniki gadżetów dla systemu Linux ... Mam zamiar napisać sterownik USB, który po inicjalizacji automatycznie zarejestruje wirtualne urządzenie USB, które będzie odzwierciedlało urządzenie, konfigurację i deskryptory interfejsu znalezione w źródle gadżetu Linuksa. Czy to może działać? –

+0

wygląda na to, że moduł jądra został przemianowany na 'usb_f_mass_storage.ko'. zobacz [link] (https://github.com/torvalds/linux/blob/master/Documentation/usb/gadget-testing.txt) – netvope

Powiązane problemy