USB über IP im Heimnetzwerk

Manchmal hat man den Wunsch, mit einem über USB verbundenen Gerät zu arbeiten, ohne es auf dem Tisch neben dem Laptop zu halten. Mein solches Gerät ist ein chinesischer Gravierer mit einem 500 mW Laser, der bei naher Anwendung ziemlich unangenehm ist. Neben der unmittelbaren Gefahr für die Augen entstehen beim Betrieb des Lasers giftige Verbrennungsprodukte, weshalb das Gerät in einem gut belüfteten Raum und idealerweise von Menschen isoliert stehen sollte. Aber wie steuert man ein solches Gerät? Die Antwort auf diese Frage fand ich zufällig beim Durchstöbern des OpenWRT-Repositorys in der Hoffnung, eine geeignete Verwendung für den alten D-Link DIR-320 A2 Router zu finden. Zum Anschluss entschied ich mich, das auf Habrahabr zuvor beschriebene Verfahren zu verwenden. USB über IP Tunnel, aber alle Anleitungen zur Installation haben leider an Aktualität verloren, daher schreibe ich meine eigene.

OpenWRT ist ein Betriebssystem, das keiner Vorstellung bedarf, daher werde ich die Installation nicht weiter ausführen. Für meinen Router habe ich die letzte stabile Version OpenWrt 19.07.3 gewählt und ihn als Client mit dem Hauptzugangspunkt über Wi-Fi verbunden, wobei ich den Modus auswählte lan, um die Firewall nicht zu belasten.

Der Serverteil

Wir verfahren gemäß offiziellen Anleitung. Nach der Verbindung über SSH installieren wir die notwendigen Pakete.

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

Dann schließen wir unser Gerät an den USB-Port des Routers an (in meinem Fall die Geräte: USB-Hub, ein Flash-Laufwerk, auf dem das Dateisystem des Routers montiert ist (wegen Platzmangel im internen Speicher), und direkt der Gravierer).

Versuchen wir, die Liste der angeschlossenen Geräte auszugeben:

root@OpenWrt:~# usbip list -l

Leer.

Durch Googeln fand ich den Übeltäter, es stellte sich heraus, dass es die Bibliothek libudev-fbsd.
ist. Wir ziehen die letzte funktionierende Version per Hand aus dem Repository libudev_3.2-1 aus der OpenWRT-Version 17.01.7 für unsere Architektur, in meinem Fall libudev_3.2-1_mipsel_mips32.ipk. Mit wget/scp laden wir sie in den Speicher des Routers und installieren sie erneut

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

Überprüfen:

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

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

Der Chinese, der am USB-Hub angeschlossen ist, erhielt bsuid 1-1.4. Notiert.

Jetzt starten wir den Daemon:

root@OpenWrt:~# usbipd -D

und binden den Chinesen

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

Überprüfen wir, ob alles funktioniert:

root@OpenWrt:\/home# netstat -alpt
Aktive Internetverbindungen (Server und verbunden)
Proto Recv-Q Send-Q Lokale Adresse           Fremde Adresse         Zustand       PID\/Programmname
tcp        0      0 0.0.0.0:3240            0.0.0.0:*               LISTEN      1884\/usbipd

Um das Gerät zukünftig automatisch zu binden, bearbeiten wir /etc/rc.local, indem wir hinzufügen vor exit 0 autoload -Uz compinit compinit

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

Der Clientteil

Wir versuchen, das Gerät an Windows 10 anzuschließen, indem wir die oben erwähnte Anleitung von openwrt.org verwenden. Ich sage gleich: das Vorhaben ist zum Scheitern verurteilt. Erstens wird nur Windows 7 x64 betrachtet. Zweitens gibt es einen Link zu einem Thread auf sourceforge.net, in dem angeboten wird, einen 2014 geänderten Treiber von Dropbox herunterzuladen. Beim Versuch, ihn unter Windows 10 auszuführen und eine Verbindung zu unserem Gerät herzustellen, erhalten wir die Fehlermeldung:

c:Utilsusbip>usbip -a 192.168.31.203 1-1.4
usbip für Windows ($Id$)

*** FEHLER: Gerät nicht gefunden

Das liegt daran, dass der Client nicht mit einem Server funktioniert, der unter einem Kernel älter als Version 3.14 erstellt wurde.
Der usbip-Server unter OpenWRT 19.07.3 wurde mit Kernel 4.14.180 erstellt.

Auf der Suche stoße ich auf die aktuelle Entwicklung eines Windows-Clients auf github. Okay, die Unterstützung für Windows 10 x64 wird angegeben, aber der Client ist ausschließlich in der Testphase, daher gibt es eine Reihe von Einschränkungen.

Anfangs wird verlangt, das Zertifikat zu installieren, und zwar zweimal. Okay, wir platzieren es in der Vertrauenswürdigen Stammzertifizierungsstelle und bei den Vertrauenswürdigen Herausgebern.

Dann muss das Betriebssystem in den Testmodus versetzt werden. Dies geschieht mit dem Befehl

bcdedit.exe \/set TESTSIGNING ON

Beim ersten Mal hat es bei mir nicht funktioniert, es hat gestört secure boot. Um es zu deaktivieren, muss man in das UEFI neu starten und secure boot auf disable setzen. Bei einigen Modellreihen von Laptops kann die Einrichtung eines Supervisor-Passworts erforderlich sein.

Nach diesem Schritt starten wir in Windows und machen bcdedit.exe \/set TESTSIGNING ON
Windows sagt, dass alles in Ordnung ist. Wir starten erneut und sehen in der rechten unteren Ecke die Meldung Testmodus, Version und Buildnummer des Betriebssystems.

Warum all diese Manipulationen? Um einen nicht signierten Treiber zu installieren USB\/IP VHCI. Dies wird vorgeschlagen, indem die Dateien usbip.exe, usbip_vhci.sys, usbip_vhci.inf, usbip_vhci.cer, usbip_vhci.cat heruntergeladen werden, und die Ausführung erfolgt mit Administratorrechten

usbip.exe install

oder die zweite Methode, die Installation von Legacy Hardware im manuellen Modus. Ich habe die zweite Option gewählt, erhielt eine Warnung zur Installation des nicht signierten Treibers und stimmte zu.

Danach überprüfen wir, ob wir die Möglichkeit haben, uns mit einem entfernten USB-Gerät zu verbinden, indem wir den Befehl ausführen:

usbip.exe list -r

wir erhalten eine Liste von Geräten:

c:Utilsusbip>usbip.exe list -r 192.168.31.203
usbip: Fehler: Konnte die USB-ID-Datenbank nicht öffnen
Exportierbare USB-Geräte
======================
 - 192.168.31.203
      1-1.4: unbekannter Anbieter : unbekanntes Produkt (1a86:7523)
           : /sys/devices/ssb0:1/ehci-platform.0/usb1/1-1/1-1.4
           : unbekannte Klasse / unbekannte Unterklasse / unbekanntes Protokoll (ff/00/00)

auf den Fehler usbip: Fehler: Konnte die USB-ID-Datenbank nicht öffnen wir nehmen es nicht zur Kenntnis, es hat keinen Einfluss auf die Arbeit.

Jetzt binden wir das Gerät:

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

Alles klar, Windows hat ein neues Gerät erkannt, jetzt kann man damit arbeiten, als wäre es physisch mit dem Laptop verbunden.

Mit dem chinesischen Gravierer hatte ich ein wenig Mühe, denn bei dem Versuch, den Treiber CH341SER über den mitgelieferten Installer (ja, der Gravierer ist auf Arduino-Basis) zu installieren, hat USB/IP VHCI Windows in den BSOD gebracht. Aber die Installation des Treibers CH341SER bis über usbip.exe hat das Problem gelöst.

Ergebnis: Der Gravierer macht Lärm und raucht in der Küche bei geöffnetem Fenster und geschlossener Tür, ich beobachte den Brandprozess aus einem anderen Raum über die hauseigene Software, die nichts merkt.

Verwendete Quellen:

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

Quelle: habr.com

60GB SSD 8Gb DDR4