Weiterleiten von USB-Anschlüssen von Windows 10 für Remote-Arbeiten

Wenn eine Person seit vielen Jahren einen Bunker gräbt und dort Lebensmittel lagert, muss sie eine tiefe moralische Befriedigung erfahren, wenn der Bunker benötigt wird. Er wird sich freuen zu sagen: "Und ich sage-und-und-il!" Gleiches gilt für diejenigen, die Lebensmittel in der Speisekammer gelagert haben, als alle nur für heute in Geschäften gekauft wurden. Aber mit unserem Redd Remote-Arbeitskomplex habe ich keine Lust, mich zu freuen. Es wurde für die Abgeschiedenheit in Friedenszeiten konzipiert. Und es wurde lange vor den ersten Nachrichten aus China verwendet.

Ich habe lange nichts über ihn geschrieben. Andere Projekte lenken ab, und das Interesse ist, gemessen an der Bewertung des letzten veröffentlichten Artikels, bereits gesunken. Die Vorbereitung eines Artikels ist sehr aufwändig und nur dann sinnvoll, wenn sie von einer ausreichenden Anzahl von Lesern benötigt wird.

Aber da jetzt alle auf den Lippen sind, gab es den Wunsch, eine Sache zu teilen, die jemandem helfen könnte. Dies ist nicht unsere Entwicklung. Ich habe im Rahmen der Remote-Arbeit mit All-Hardware-Debug-Boards Nachforschungen angestellt. Hier beschreibe ich jetzt ihre Ergebnisse. Das USB / IP-Projekt ist vielen bekannt. Aber es wurde lange von den Autoren beschnitten. Die neuesten Treiber waren unter WIN7. Heute werde ich beschreiben, wo die Option für WIN10 heruntergeladen werden kann, und zeigen, wie ich sie getestet habe. Darüber hinaus versichern die Entwickler des modernen Analogs, dass sie nicht nur einen Windows-Client, sondern auch einen Windows-Server erstellt haben (obwohl ich in diesem Modus keine Tests durchgeführt habe: Die Aufgabe erforderte dies nicht). Aber für jemanden kann dies auch nützlich sein.




Einführung


Zunächst eine kurze Geschichte darüber, was USB / IP ist. Dies ist eine Reihe von Programmen, mit denen Sie ein USB-Gerät über das Netzwerk weiterleiten können. Das Gerät selbst ist mit dem Server verbunden. Der Client befindet sich auf einem anderen Computer. Gleichzeitig befindet sich auf dem Clientcomputer eine Anwendung, die vollständig nicht für die Arbeit mit dem Netzwerk ausgelegt ist. Es will ein echtes USB-Gerät. Und es erhält Informationen, dass dieses Gerät angeschlossen ist. Auf diesem Gerät ist ein Standardtreiber installiert. Im Allgemeinen glaubt der Client, dass es mit einem lokalen USB-Gerät funktioniert.

Jemand wirft Sicherheitsschlüssel. Wir haben die Möglichkeit eines Fernzugriffs auf den JTAG-Adapter geprüft.

Das USB / IP-Projekt wurde bis 2013 aktiv weiterentwickelt. Dann wurde der Windows-Zweig gestoppt. Im Allgemeinen wurde sogar eine binär signierte Version veröffentlichtTreiber. Aber es war unter Windows 7. Der Linux-Zweig setzte seine Entwicklung fort und dieser Dienst wurde in das Betriebssystem selbst integriert. Zumindest ist es definitiv in den Debian-Build integriert. Darüber hinaus gibt es für Linux sowohl einen Client als auch einen Server, und für Windows wurde ursprünglich nur der Client erstellt. Server unter Windows wurde nicht erstellt.

Es gibt einen sehr guten Artikel über Habré , der sowohl als Referenz für die Arbeit mit diesem Dienst als auch als Tipp für die Arbeit mit ihm verwendet werden kann.

Option für die aktuelle Version von Windows


Egal wie gut Windows 7 ist, es ist bereits tot. Im Rahmen der Arbeit an All-Hardware haben wir verschiedene Optionen zur Lösung eines der Probleme in Betracht gezogen und mussten lediglich eine Reihe von Alternativen auf der Grundlage von „fit - not fit“ prüfen. Es war unmöglich, viele Mannstunden damit zu verbringen, nachzusehen. Und Änderungen des Treibers unter Windows 10 könnten sich in sich selbst ziehen. Daher wurde im Netzwerk eine Suche durchgeführt, die usbip-win zum Projekt brachte . Zum Zeitpunkt der Entdeckung war die neue Version vom 23. Februar 2020 datiert, dh das Projekt ist live. Es kann sowohl unter WIN7 als auch unter WIN10 gebaut werden. Darüber hinaus kann im Gegensatz zum ursprünglichen Projekt nicht nur ein Windows-Client, sondern auch ein Windows-Server erstellt werden.

Ich habe überprüft, ob das Projekt perfekt zusammengebaut und installiert ist, sodass weitere Arbeiten mit ihm durchgeführt wurden. In Readme-Datei Es gibt einen Link zu vorgefertigtem Binärcode für diejenigen, die nicht selbst bauen möchten.

Der traurige Teil der Überprüfung: die Serverseite


Zuerst werde ich Ihnen sagen, wie die Überprüfung im Rahmen unseres Projekts durchgeführt wurde. Es endete dort nicht sehr gut. Wir haben den im Fall des Redd-Komplexes installierten ST-LINK-Adapter überprüft, da ich bereits festgestellt habe, dass der Komplex das Linux-Betriebssystem der Debian-Assembly verwendet und diese Assembly den integrierten USB / IP-Dienst enthält.

Installieren Sie den Service gemäß dem Artikel:

sudo apt-get update 
sudo apt-get upgrade 
sudo apt-get install usbip

Der Rest des Artikels beschreibt, wie das Laden eines Dienstes automatisiert wird. Da ich Linux verstehe, habe ich schon viele Male geschrieben. Schlecht versiert. Ich habe nicht die Angewohnheit, die Texte anderer Leute mit einem klugen Gesicht zu zitieren und die Essenz schlecht zu verstehen. Daher werde ich mich noch einmal an einen Link zu einem wunderbaren Artikel erinnern , in dem alles erzählt wird, und ich werde mir zeigen, was ich bei jedem Start des Betriebssystems getan habe (da alles nur zur Überprüfung notwendig war):

sudo modprobe usbip-core
sudo modprobe usbip-host
sudo usbipd -D

Der Zweck der ersten beiden der oben genannten Zaubersprüche ist mir unbekannt, aber ohne sie werden einige Verzeichnisse nicht erstellt, und ohne diese Verzeichnisse wird kein USB-Anschluss exportiert. Verzeichnisse werden nur erstellt, bis das System neu gestartet wird. Sie müssen sie also jedes Mal erstellen. Die dritte Zeile - alles ist klarer damit, es startet den Dienst.

Nun schauen wir uns den Namen des Geräts an:

user@redd:~$ sudo usbip list -l
- busid 1-3 (046d:082d)
   Logitech, Inc. : HD Pro Webcam C920 (046d:082d)

 - busid 1-4 (1366:0101)
   SEGGER : J-Link PLUS (1366:0101)

 - busid 1-5.1 (067b:2303)
   Prolific Technology, Inc. : PL2303 Serial Port (067b:2303)

 - busid 1-5.4.1.1 (0483:5740)
   STMicroelectronics : STM32F407 (0483:5740)

 - busid 1-5.4.1.3 (0483:3748)
   STMicroelectronics : ST-LINK/V2 (0483:3748)
<...>

Es stellt sich heraus, dass wir ein Gerät und eine Busid benötigen, die 1-5.4.1.3 entsprechen.

Wir geben den Befehl:

sudo usbip bind --busid=1-5.4.1.3

Alles, der Server ist betriebsbereit.

Der traurige Teil des Schecks: der Client-Teil


Wir installieren den Treiber unter Windows (wir tun dies nur einmal, dann wird er immer installiert). Führen Sie dazu die Datei usbip.exe mit dem Argument install :

usbip.exe install als Administrator aus.

Nun prüfen wir, ob das Gerät für uns verfügbar ist:

usbip.exe list --remote=192.168.10.123

Wir stellen sicher, dass es auf der Liste steht. Nun, und verbinden Sie es:

usbip.exe attach --remote=192.168.10.123 --busid=1-5.4.1.3

Ein neues USB-Gerät erscheint im Geräte-Manager, Keil sieht es perfekt ...

Aber hier endet das Angenehme. Ein kleines Programm wird etwa eine Minute lang in ein Flash-Laufwerk gegossen. Versuche, die Zeilen zu durchlaufen, dauern zwischen 5 und 20 Sekunden pro Zeile. Das ist inakzeptabel. Während einer Pause geht der Verkehr von ungefähr 50 Kilobit pro Sekunde in beide Richtungen. Geht lange und nachdenklich.

Ehrlich gesagt hat mich das Zeitlimit nur dazu gebracht zu erraten, warum alles so schlecht war. Ich vermute, dass JTAG-Verkehr durch das Netzwerk läuft. Und er läuft in kleinen Paketen in beide Richtungen, daher die Probleme. So wurde die Studie mit dem Ergebnis abgeschlossen: "Nicht für das Projekt geeignet."

Der lustige Teil: Vorbereitung


Schon damals fiel mir ein, dass ich aus dem Augenwinkel sah, dass USB im CMSIS DAP JTAG-Adapter keinen reinen JTAG-Verkehr verwendet, sondern Befehle. Der JTAG-Verkehr selbst ist bereits im Adapter gebildet. Ich wollte es schon lange überprüfen, aber alle meine Hände erreichten nicht. Die Massenübertragung an einen entfernten Standort zwang ihn dazu (ein Problem trat auf). Was ist CMSIS DAP? Dies ist ein von ARM für Cortex-M-Controller empfohlener JTAG-Adapter. Die Quellcodes für verschiedene Controller werden auf GitHub veröffentlicht. Sie können den Adapter basierend auf jedem von ihnen löten. Ich werde jetzt einen Link zu einem Klon des Projekts geben, der für das Blue Pill-Steckbrett angepasst ist: https://github.com/x893/CMSIS-DAP , aber Suchmaschinen können auch das offizielle ARM-Konto anzeigen.

Um nicht einen ganzen PC auf dem Server auszugeben, habe ich zur Überprüfung eine Art Yelloww-Komplex erstellt (nur anhand der Farbe des Kunststoffs, aus dem das Gehäuse besteht):



Die Serverrolle spielt Raspberry Pi mit dem installierten Raspbian-Betriebssystem (dies ist das gleiche Debian, was bedeutet, dass es den erforderlichen Server gibt ) Eine der blauen Pillen fungiert als CMSIS-DAP-Adapter, die zweite als debuggtes Gerät.

Wir stellen den Service auf die gleiche Weise ein und konfigurieren ihn. Sofern hier nicht die Liste der für den Export zugelassenen Geräte wesentlich bescheidener ist:

pi@raspberrypi:~ $ sudo usbip list -l
 - busid 1-1.1 (0424:ec00)
   Standard Microsystems Corp. : SMSC9512/9514 Fast Ethernet Adapter (0424:ec00)

 - busid 1-1.4 (c251:f001)
   Keil Software, Inc. : unknown product (c251:f001)

Es ist klar, dass wir hier die Gerätebusid = 1-1.4 exportieren und importieren.

Und hier habe ich speziell mit CMSIS DAP regelmäßig ein kleines Problem. Im Geräte-Manager sehe ich ein solches Ärgernis:



Ich möchte Sie daran erinnern, dass der Artikel nach dem Prinzip „Besser ist nicht schlecht, aber heute als ideal, sondern morgen“ geschrieben ist. Derzeit treten Probleme bei der Fernarbeit auf. Ich hoffe, dass sie in absehbarer Zeit nicht mehr relevant sind. In der Zwischenzeit sind sie relevant - ich zeige, wie ich dieses Problem manuell umgehe. Zuerst schalte ich das Gerät aus:



Dann sofort einschalten:



Und es beginnt ohne Probleme zu funktionieren. In Keil ändern wir den Debugger in CMSIS DAP:



Und hier ist es:



Wenn Sie in einem lokalen Netzwerk arbeiten, fliegt einfach alles. Es ist jedoch klar, dass sich niemand für das lokale Netzwerk interessiert. Ich habe versucht, den Geräteport zu Hause weiterzuleiten, mich dann bei der Arbeit remote bei der Maschine anzumelden und die „Firmware“ von dort weiterzuleiten. Die Verbindung bei meinem Heimanbieter ist besonders sehr, sehr langsam - von mir außerhalb. Der Controller blinkt etwa dreimal langsamer als bei direktem Anschluss an USB. Rückverfolgung ... Nun, ungefähr eine Sekunde pro Zeile, genau nicht mehr. Im Allgemeinen erträglich. Mit guten Anbietern hoffe ich, dass es besser wird.

Fazit


Das usbip-win-Projekt ist ein moderner Ersatz für das USB / IP-Projekt. Er lebt und entwickelt sich. Gleichzeitig bietet es nicht nur die Client-Funktion für Windows, sondern auch die Server-Funktion. Die Kompatibilität mit der Linux-Version wird gespeichert.

Die Stabilität des Remote-USB-Geräts war unerwartet erstaunlich. Ich war mir sicher, dass es zu Zeitüberschreitungen kommen würde. Vielleicht treten sie irgendwo auf, aber für JTAG-Adapter gab es keinen einzigen Fehler. Leider können aufgrund der geringen Geschwindigkeit des resultierenden Systems nicht alle USB-Geräte über das Netzwerk weitergeleitet werden. Bei JTAG-Adaptern können Sie jedoch alternative Aspekte in Betracht ziehen. Insbesondere CMSIS-DAP anstelle von ST-LINK.

Beide überprüften Projekte (usbip-win und CMSIS-DAP) können in Form von Quellcodes von GitHub heruntergeladen werden.

Wenn dies jemandem hilft, den Fernzugriff auf Geräte zu organisieren, bin ich froh. Mit dem Raspberry Pi können Sie Geräte an beliebigen Orten ablegen.

All Articles