USB przez IP w domu

Czasami chcesz pracować z urządzeniem podłączonym przez USB, nie trzymając go na stole obok laptopa. Moje urządzenie to chiński grawer z laserem o mocy 500 mW, co jest dość nieprzyjemne przy bliskim kontakcie. Oprócz bezpośredniego zagrożenia dla oczu, podczas działania lasera wydzielają się toksyczne produkty spalania, dlatego urządzenie powinno znajdować się w dobrze wentylowanym pomieszczeniu, najlepiej odizolowanym od ludzi. Jak sterować takim urządzeniem? Przypadkowo znalazłem odpowiedź na to pytanie przeglądając repozytorium OpenWRT w nadziei, że znajdę godne zastosowanie dla starego routera D-Link DIR-320 A2. Do połączenia zdecydowałem się skorzystać z tego opisanego wcześniej na Habré. Tunel USB przez IP, jednak wszystkie instrukcje dotyczące jego instalacji straciły na aktualności, więc piszę własne.

OpenWRT to system operacyjny, którego nie trzeba przedstawiać, dlatego nie będę opisywał jego instalacji. W przypadku mojego routera pobrałem najnowszą stabilną wersję OpenWrt 19.07.3 i podłączyłem go do głównego punktu dostępu Wi-Fi jako klient, wybierając tryb lan, żeby nie męczyć firewalla.

Część serwerowa

Działamy wg oficjalne instrukcje. Po połączeniu przez ssh zainstaluj niezbędne pakiety.

root@OpenWrt:~# opkg update
root@OpenWrt:~# opkg install kmod-usb-ohci usbip-server usbip-client

Następnie podłączamy nasze urządzenie do portu USB routera (w moim przypadku urządzenia: koncentrator USB, pendrive, na którym zamontowany jest system plików routera (ze względu na brak miejsca na pamięci wewnętrznej) i bezpośrednio grawer).

Spróbujmy wyświetlić listę podłączonych urządzeń:

root@OpenWrt:~# usbip list -l

Pusty.

Po wygooglowaniu znaleziono winowajcę, okazało się, że jest to biblioteka libudev-fbsd.
Ręcznie wyciągamy najnowszą działającą wersję z repozytorium libudev_3.2-1 z wersji OpenWRT 17.01.7 dla twojej architektury, w moim przypadku jest to libudev_3.2-1_mipsel_mips32.ipk. Za pomocą wget/scp pobierz go do pamięci routera i zainstaluj ponownie

root@OpenWrt:~# opkg remove --force-depends libudev-fbsd
root@OpenWrt:~# opkg install libudev_3.2-1_mipsel_mips32.ipk

Sprawdzanie:

root@OpenWrt:~# usbip list -l
 - busid 1-1.1 (090c:1000)
   Silicon Motion, Inc. - Taiwan (formerly Feiya Technology Corp.) : Flash Drive (090c:1000)

 - busid 1-1.4 (1a86:7523)
   QinHeng Electronics : HL-340 USB-Serial adapter (1a86:7523)

Chińczyk podłączony do koncentratora USB otrzymał bsuid 1-1.4 . Pamiętać.

Teraz uruchommy demona:

root@OpenWrt:~# usbipd -D

i bindim Chińczyków

root@OpenWrt:~# usbip bind -b 1-1.4
usbip: info: bind device on busid 1-1.4: complete

Sprawdźmy, czy wszystko działa:

root@OpenWrt:/home# netstat -alpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:3240            0.0.0.0:*               LISTEN      1884/usbipd

Aby dalej automatycznie powiązać urządzenie, dokonajmy edycji /etc/rc.localdodając wcześniej wyjście 0 następujące:

usbipd -D &
sleep 1
usbip bind -b 1-1.4

Część klienta

Spróbujmy podłączyć urządzenie do systemu Windows 10, korzystając z powyższych instrukcji z openwrt.org. Od razu powiem: pomysł jest skazany na porażkę. Po pierwsze, pod uwagę bierze się tylko system Windows 7 x64. Po drugie, podany jest link do wątku na sourceforge.net, który sugeruje pobranie sterownika załatanego w 2014 roku z Dropbox. Kiedy próbujemy uruchomić go w systemie Windows 10 i połączyć się z naszym urządzeniem, pojawia się następujący błąd:

c:Utilsusbip>usbip -a 192.168.31.203 1-1.4
usbip for windows ($Id$)

*** ERROR: cannot find device

Wynika to z faktu, że klient nie współpracuje z serwerem zbudowanym dla jądra starszego niż wersja 3.14.
Serwer usbip dla OpenWRT 19.07.3 jest zbudowany na jądrze 4.14.180.

Kontynuując poszukiwania, natknąłem się na aktualny rozwój klienta Windows dla GitHub. Ok, podano wsparcie dla systemu Windows 10 x64, ale klient jest tylko klientem testowym, więc istnieje szereg ograniczeń.

Najpierw proszą więc o zainstalowanie certyfikatu i dwa razy. OK, umieśćmy to w Zaufanym głównym urzędzie certyfikacji i Zaufanych wydawcach.

Następnie musisz przełączyć system operacyjny w tryb testowy. Robi to zespół

bcdedit.exe /set TESTSIGNING ON

Nie udało mi się za pierwszym razem, przeszkodziłem zabezpieczyć bagażnik. Aby to wyłączyć, musisz ponownie uruchomić komputer w UEFI i wyłączyć bezpieczny rozruch. Niektóre modele laptopów mogą wymagać ustawienia hasła administratora.

Następnie uruchom system Windows i wykonaj bcdedit.exe /set TESTOWANIE WŁĄCZONE
Vinda mówi, że wszystko jest w porządku. Ponownie uruchamiamy komputer i w prawym dolnym rogu widzimy słowa Tryb testowy, wersja i numer kompilacji systemu operacyjnego.

Po co te wszystkie manipulacje? Aby zainstalować niepodpisany sterownik VHCI USB/IP. Sugeruje się to zrobić poprzez pobranie plików usbip.exe, usbip_vhci.sys, usbip_vhci.inf, usbip_vhci.cer, usbip_vhci.cat i uruchomienie z uprawnieniami administratora

usbip.exe install

lub druga metoda, ręczna instalacja starszego sprzętu. Wybrałem drugą opcję, otrzymałem ostrzeżenie o instalacji niepodpisanego sterownika i zgodziłem się z tym.

Następnie sprawdzamy, czy mamy możliwość połączenia się ze zdalnym urządzeniem USB, uruchamiając polecenie:

usbip.exe list -r <ip вашего роутера>

otrzymujemy listę urządzeń:

c:Utilsusbip>usbip.exe list -r 192.168.31.203
usbip: error: failed to open usb id database
Exportable USB devices
======================
 - 192.168.31.203
      1-1.4: unknown vendor : unknown product (1a86:7523)
           : /sys/devices/ssb0:1/ehci-platform.0/usb1/1-1/1-1.4
           : unknown class / unknown subclass / unknown protocol (ff/00/00)

za błąd usbip: błąd: nie udało się otworzyć bazy danych identyfikatorów USB Nie zwracamy uwagi, nie ma to wpływu na pracę.

Teraz wiążemy urządzenie:

c:Utilsusbip>usbip.exe attach -r 192.168.31.203 -b 1-1.4

To wszystko, system Windows wykrył nowe urządzenie, teraz możesz z nim pracować tak, jakby było fizycznie podłączone do laptopa.

Musiałem się trochę namęczyć z chińskim grawerem, bo gdy próbowałem zainstalować jego sterownik CH341SER poprzez instalator dołączony do grawera (tak, grawer Arduino), USB/IP VHCI wyrzucał Windowsa na BSOD. Jednak instalacja sterownika CH341SER do podłączenie urządzenia przez usbip.exe rozwiązało problem.

Konkluzja: grawer hałasuje i pali w kuchni przy otwartym oknie i zamkniętych drzwiach, proces wypalania obserwuję z innego pokoju poprzez własny program, który nie wyczuwa zaczepienia.

Wykorzystane źródła:

https://openwrt.org/docs/guide-user/services/usb.iptunnel
https://github.com/cezanne/usbip-win

Źródło: www.habr.com

Dodaj komentarz