Lassen Sie einen Computer als virtuelles USB-Gerät für andere Geräte fungieren

18

Einige Anwendungen simulieren ein virtuelles USB- oder CD-ROM-Laufwerk, als wäre ein USB-Laufwerk an den Computer angeschlossen.

Gibt es eine Konfiguration oder Anwendung, die ein virtuelles USB-Laufwerk nicht für das Betriebssystem selbst, sondern für andere Geräte, die ein USB-Laufwerk akzeptieren, über einen USB-Anschluss bereitstellt?

Ich habe also eine virtuelle Festplatte (z. B. eine *.vdiDatei) im Computer, die über eine USB-Buchse als USB-Laufwerk mit einem anderen Gerät (z. B. einem Mobiltelefon oder einem Laptop) verbunden ist.

user62511
quelle

Antworten:

12

Sie müssten dem Computer ein USB-Gerät / einen Peripheriegerät-Controller hinzufügen, im Gegensatz zu dem USB-Host-Controller, mit dem sie normalerweise geliefert werden.

In etwa so: https://www.maximintegrated.com/de/products/interface/controllers-expanders/MAX3420E.html

Leider müssten Sie einen Weg finden, um es auf Ihr Motherboard zu verdrahten. Technisch kann es getan werden. Praktisch müssten Sie das Motherboard neu gestalten, um es einzuschließen. Möglicherweise haben Sie das Glück, einen SPI- oder I2C-Bus auf Ihrem Motherboard zu finden, über den Sie ihn hinzufügen können. Normalerweise sind sie jedoch direkt mit dem verbunden, wofür sie verwendet werden, es sei denn, Sie verwenden eine Entwicklungsplatine oder einen Single-Controller. Bordcomputer mit freiliegendem GPIO und anderen Anschlüssen wie einem Raspberry Pi.

Die andere Option wäre ein USB-On-the-Go-Controller. Motherboards, die für eingebettete und tragbare Geräte entwickelt wurden, verfügen in der Regel über einen USB-OTG-Controller (On-the-go), der entweder als Host- oder als Gerätecontroller fungieren kann. Der oben erwähnte Raspberry Pi verfügt beispielsweise über einen On-the-Go-Controller, jedoch bei allen Modellen mit Ausnahme des Pi Zero, der an einen Host-Port oder einen integrierten USB-Hub neu verkabelt wird und die Verwendung von USB-Gerätefunktionen verweigert. Das BeagleBone Black hat einen OTG-Port.

Das ist aber noch nicht alles - wenn Sie die Hardware haben, brauchen Sie auch die Software. Linux hat einige nützliche Kernel-USB-Gadget-Treiber ("USB-Gadget" ist ein anderer Begriff für USB-Peripheriegeräte / -Geräte ) wie g_serial. Treiber und g_ethernet, mit denen Sie Ihr Gerät an einen anderen Computer anschließen und als serielles Gerät oder Ethernet-über-USB-Gerät sichtbar sein können (Es gibt andere Möglichkeiten, ein Gerät als Massenspeicher verfügbar zu machen, mit denen Sie eine Datei als Blockgerät verwenden und den Computer als Massenspeicher-Gadget verfügbar machen können.) Beim BeagleBone Black ist dies normalerweise standardmäßig aktiviert. Sie können es also einfach über USB an Ihren PC anschließen und als vernetztes Gerät betrachten - und ich glaube, es wird auch als Massenspeichergerät angezeigt, wenn Sie einen zusammengesetzten Treiber verwenden (der dies ermöglicht) Es wird als mehrere USB-Gerätetypen über eine einzelne Verbindung angezeigt. Der Pi Zero kann diese verwenden , jedoch nicht standardmäßig. Für Windows oder andere Betriebssysteme müssten Sie diesen Gerätetreiber wahrscheinlich selbst schreiben.

Theoretisch können Sie das also tun. Sie können Ihren Desktop-PC herunterfahren, versuchen, irgendwo einen nicht verwendeten kompatiblen Bus auf dem Motherboard zu finden (höchstwahrscheinlich einige nicht verwendete Pins auf einem Controller-IC) oder eine Möglichkeit, einen internen I2C- oder SPI-Bus zu erweitern, oder etwas, das Sie herausreißen und finden können Ersetzen Sie einen USB-OTG- oder Gerätesteuerungs-Chip und löten Sie ihn darauf. Anschließend können Sie Linux installieren und einen Gadget-Treiber verwenden oder einen eigenen für ein anderes Betriebssystem schreiben. Praktisch, wenn Sie kein erstklassiger Elektronikingenieur sind, werden Sie das nicht können. Zumindest erst, wenn jemand den schwer fassbaren Adapter mit einem Gerät oder OTG-Anschluss herausbringt, der in einen USB-Anschluss eingesteckt wird (theoretisch könnte dies mit einem Mikrocontroller wie einem Arduino geschehen, der mit einem Paar USB-Gerätecontroller-ICs verkabelt ist). und schreibt die Treiber, um es auszuführen.

Matt Thomason
quelle
2
Tolle Erklärung, kannst du bitte die Antwort aktualisieren, wenn du (mit deinem Wissen) etwas Neues in Bezug auf deinen Satz siehst "bis jemand mit exklusivem Adapter herauskommt ...". Es gibt Laptops mit USB-C im Jahr 2018, könnten sie eine Lösung sein.?
Asain Kujovic
8

USB ist asymmetrisch: Eine Seite ist ein Host, die andere Seite ist ein Peripheriegerät. Ein Peripheriegerät kann nicht als Host fungieren oder umgekehrt. Es ist möglich, dass ein USB-Anschluss als eine der beiden Seiten fungiert. Dies wird als USB on-the-go bezeichnet und ist auf einigen Mobiltelefonen und Tablets vorhanden. Die Ports sind physisch gerätetypische Ports, keine Host-Ports. Ich habe noch nie einen PC mit einem Geräteanschluss gesehen. Dies erfordert Elektronik am Controller. Es reicht nicht aus, ein Kabel herzustellen, das an beiden Enden passt.

Nein, Sie können keinen PC in ein USB-Gerät verwandeln.

Wenn Sie einen Computer als USB-Speichergerät verwenden möchten, können Sie ein Mobiltelefon oder Tablet mit USB-Verbindung anstelle eines PCs verwenden.

Gilles 'SO - hör auf böse zu sein'
quelle
Können Sie etwas genauer erläutern, wie ich mit einem Mobiltelefon meinen PC in ein USB-Speichergerät / -Host verwandeln kann, das ich an einen anderen Computer, ein anderes Fernsehgerät oder ein anderes Gerät anschließen kann? Ich denke, ich vermisse diesen Punkt, obwohl ich glaube, dass ich ein gutes Wissen über USB OTG habe.
trejder
@trejder Wie ich schrieb, habe ich noch nie einen PC mit einem Geräteanschluss gesehen ("PC" ohne x86-Tablets).
Gilles 'SO - hör auf böse zu sein'
Ja, aber ich beziehe mich auf Ihren letzten Satz: " Wenn Sie einen Computer in ein USB-Speichergerät verwandeln möchten, können Sie ein Mobiltelefon oder Tablet mit einer USB-Verbindung verwenden. " Vielleicht fehlt mir etwas, aber ich verstehe es als "Sie können ein Mobiltelefon oder Tablet verwenden, um einen Computer in ein USB-Speichergerät zu verwandeln". Wenn ja, lautet die Frage: Wie?
trejder
1
@trejder Ah, "Computer" in diesem Satz ist nicht "PC", sondern "Computer". Ein Telefon / Tablet ist eine andere Art von Computer als ein PC. Ist es das, was dich beunruhigt?
Gilles 'SO- hör auf böse zu sein'
1
@trejder Nein. Normalerweise ist es am besten, eine Netzwerkverbindung auf die eine oder andere Weise herzustellen. Sie können Firewire als Netzwerkverbindung zwischen zwei beliebigen PCs mit einem Firewire-Anschluss verwenden, aber viele PCs haben keinen. Die meisten PCs haben einen Ethernet-Anschluss. Sie können zwei PCs mit einem Ethernet-Kabel verbinden (sehr alte PCs benötigen ein Crossover-Kabel, moderne hingegen können ein normales Kabel verwenden). Um einen PC als Speichergerät für ein mobiles Gerät zu verwenden, müssen Sie den PC in der Regel irgendwie auf WLAN umstellen.
Gilles 'SO - hör auf böse zu sein'
2

Sie können die Verwendung eines speziellen "USB-USB-Bridged-Kabels" in Betracht ziehen, das manchmal als "USB-Netzwerkkabel" bezeichnet wird. Wie in diesen Artikeln erwähnt:

Mit ihnen können Sie Dateien zwischen zwei PCs übertragen. Ich habe diese Art von Kabeln vor über zehn Jahren (in Zeiten von Windows XP) verwendet, und damals erforderten alle auf dem Markt erhältlichen Kabel einen speziellen Treiber und eine spezielle Software. Sie können Dateien nur über einen speziellen Dateikommandanten übertragen, der zusammen mit den Kabeltreibern auf einer Installationsdiskette geliefert wurde, sodass ein PC nicht als reines externes USB-Gerät fungieren kann.

Ich bin mir nicht sicher, ob sich seitdem etwas geändert hat und ob Sie mit neuen Lösungen nur Dateien mit einer speziellen Software übertragen können und - ob Sie einen PC zwingen können, als externes Gerät auf einen anderen PC zu wechseln.

trejder
quelle
2

Wie im erklärt Antwort von Matt Thomson , kann ein physischer USB-Anschluss eines PC-Computers nicht ordnungsgemäß als USB-Slave-Gerät verwendet werden, da der USB-Slave-Controller fehlt.

Das heißt, wenn wir eine Adapterplatine haben, die USB im Slave-Modus unterstützt (z. B. den Raspberry Pi Zero), müssen wir sie über einen anderen Kanal, z. B. kabelgebundenes Ethernet, mit Ihrem Host-PC verbinden. Ich habe zwei verschiedene Vorschläge, welches Protokoll Sie über diese Ethernet-Verbindung ausführen könnten:

(1) Legen Sie den USB-Anschluss über ein IP-Netzwerk frei.

Verwenden Sie Software, um den USB-Slave-Modus-Port des Raspberry Pi Zero als virtuelles USB-Gerät für Ihren PC bereitzustellen. Das USB / IP- Projekt stellt dies mithilfe eines Treibers bereit, der USB über IP-Netzwerke übertragen kann. Hier ist ein Beispiel für die Verwendung von USB / IP, um einem Computer ein simuliertes USB-Gerät zur Verfügung zu stellen. Dies wäre hier Ihr PC.

Was ich bei dieser vorgeschlagenen Lösung nicht weiß, ist, ob die USB / IP-Software bereits einen USB-Slave-Port über ein IP-Netzwerk oder nur einen USB-Host-Port wie gewohnt verfügbar machen kann.

Aber selbst wenn dies funktioniert, müssen Sie die Gerätetreiber auf Ihrem PC so einrichten oder anpassen, dass sie (1) die eingehende USB / IP-Verbindung als USB-Verbindung akzeptieren, (2) den USB-Slave-Modus bereitstellen und nicht USB - Hostmodus (3): Simulieren Sie ein USB - Massenspeichergerät, indem Sie die Daten vom zugewiesenen Speicherort (Ihrem Computer) aus bereitstellen .vdi Datei) bereitstellen.

Insgesamt ist das eine komplexe Vorgehensweise.

(2) Legen Sie die Datei über das IP-Netzwerk offen.

Dies ist eine viel einfachere Möglichkeit, die Ethernet-Verbindung zum Raspberry Pi Zero zu nutzen: Hängen Sie auf dem Raspberry Pi Zero die auf Ihrem PC gespeicherten Daten über ein Netzwerkdateisystem ein. Diese Dateien werden dann logisch als Teil des Pi Zero-Dateisystems angezeigt. Sie können sie mit dem Linux-USB-Gadget-Treiber bereitstellen, damit der Raspberry Pi für angeschlossene Geräte wie ein USB-Massenspeichergerät aussieht.

Tanius
quelle