Forum: PC-Programmierung Software-USB-Stick möglich?


von Frank (Gast)


Lesenswert?

Hallo,

in einer Diskussion mit Freunden ist gerade eine Idee aufgetaucht: Wäre 
es machbar, dass ein auf PC A freigegebenes Verzeichnis auf einem per 
USB-Kabel verbundenen PC B auftaucht, als wäre ein USB-Stick 
angeschlossen worden?

Einziges Hardware-Problem, dass ich z.Zt. sehe, wäre der unerwünschte 
Kontakt der Spannungs-Pins auf beiden Seiten, oder?

Softwareseitig müsste es machbar sein. Ich weiss, dass es 
Netzwerk-Emulationen per USB bereits gibt, mich reitzt aber der Gedanke 
an dieser Stick-Emulation ...

Frank

von Frank L. (hermastersvoice)


Lesenswert?

Sowas machen die USB-USB Kabel die nicht auf Netzwerkemulation beruhen. 
Jeder der beteiligten PCs sieht ein USB-Laufwerk das in Wirklichkeit der 
andere PC ist.

bye

Frank

von Icke (Gast)


Lesenswert?

Das macht doch nichts kannst ja bei einem den Netzstecker ziehen.

Suchfunktion

von Frank (Gast)


Lesenswert?

Das müsste dann evtl. auf einer Seite sogar ohne extra Software gehen 
(z.auf einem Mac)?

Frank

von Εrnst B. (ernst)


Lesenswert?

Der Client-Rechner erwartet von deiner Stick-Simulation ein Block-Device 
auf der er blockweise Lesen und Schreiben kann. Dateisystem macht er 
dann selber.
d.H. die einfache Lösung wäre: der Server stellt einfach eine Datei über 
die Simulation zur Verfügung, der Client kann darin nach belieben 
rumwurschteln. Wenn der Client nicht verbunden ist, kann der Server die 
Datei mounten. Gleichzeitiger Zugriff ist nicht möglich (Dateisystem 
würde kaputtgehen).

Die schwierigere Lösung wäre, dein Server erzeugt on-the-fly eine 
virtuelle FAT-Struktur für das freigegebene Verzeichnis. Auch dann ist 
gleichzeitiger Zugriff nur sehr beschränkt möglich, da der Client 
natürlich fleissig seinen Disk-Cache benutzt, und Änderungen, die der 
Server vornimmt, nicht mitbekommt.

von Frank (Gast)


Lesenswert?

Wenn ich dich recht verstehe, wäre es eine Lösung, dass der Server so 
lange nicht schreiben darf/kann, wie ein Client verbunden ist. Da das 
Ganze nur in Software spielt, müsste es auch möglich sein, dem Clienten 
das Abziehen und Anstecken nur vorzumachen ...

Frank

von Christian R. (supachris)


Lesenswert?

das erste Problem ist schon, dass man 2 USB-Hosts, was ja die beiden 
Rechner sind, nicht einfach über ein 1:1 Kabel verbinden kann. Ein 
normaler USB Controller kann kein USB Device spielen. Für sowas gibts 
USB on the Go Controller, oder spezielle Entwicklungskarten, die im 
PCI(e) stecken und ein universelles USB Device darstellen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Selbst wenn die Hardware kein Problem darstellte, dürfte der PC, der 
sich als USB-Stick verkauft, selbst nicht aktiv laufen. Sonst würden 
zwei Rechner aneinander vorbei im gleichen Dateisystem herumwerkeln - 
was Datenverlust garantiert.

Denkbar wäre allenfalls ein Betrieb analog zum "Target Mode", den 
Apple-Rechner auf ihrer Firewire-Schnittstelle anbieten. Bei diesem wird 
ein Rechner beim Starten mit einer speziellen Tastenkombination zur 
externen Firewire-Platte degradiert, so daß andere Rechner auf diese 
zugreifen können.

Der die Platte anbietende Rechner macht in dieser Betriebsart nichts 
anderes.

Jedoch ist dies mit USB nicht ohne weiteres möglich, da bei USB immer 
ein Host (der PC) mit einem Device kommuniziert, nie aber zwei Hosts 
miteinander.

Bei USB OTG ("on-the-go") sieht das anders aus, aber die in 
PC-Chipsätzen verbaute USB-Hardware unterstützt kein OTG.

von Martin W. (Gast)


Lesenswert?

hi leutz,

bin schon froh dass ich diesen thread gefunden habe weil ich dachte dass 
es sowas noch gar nicht gibt. Ich möchte keine 2 Rechner miteinander 
verbinden sondern einfach einen USB-Stick mit meinem PC simulieren und 
an ein Mediengerät anschließen.

Da heutzutage jeder Fernseher, Stereoanlage, DVD-Player etc. 
USB-Eingänge besitzt um MP3´s abzuspielen oder Bilder anzuzeigen und man 
nicht immer ein usb-laufwerk oder einen usb-stick zur verfügung hat, 
wäre es doch praktisch einfach sein notebook an das gerät anzuschließen. 
Auf diesem existiert ein Ordner dessen Inhalt vom Betriebssystem während 
des Simulationsvorganges natürlich nciht verändert werden kann. Kenn 
mich mit der Programmierung nicht so gut aus. Theoretisch müsste aber 
sowas machbar sein

gruss

martin

p.s. andererer anwendungsfall: Mein NAS Server hängt an einem 100Mbit 
netzwerk was nicht allzuschnell Daten Schaufeln kann. Einen PC kann man 
dort nicht direkt anschließen. Mithilfe der Simulationssoftware schon.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Eine Simulationssoftware reicht nicht. Du brauchst *spezielle 
Hardware*, die den PC in die Lage versetzt, ein USB-Device zu 
simulieren.

von slashbrain (Gast)


Lesenswert?

Das USB-Protokol ist mithilfe von Master und Slave implementiert. Da 
Dein PC (meist) immer Master ist muss die Sticks/Festplatten usw. Slave 
sein => DVD-Player, Fernseher etc sind auch Master. Und die 
Master-Master-Kommunikation ist in dem Protokoll leider nicht vorgesehn.

Aber es gibt ja auch die "USB-Netzwerkkabel" zum Verbinden von 2 PCs. 
Bei denen ist natürlich gewisse Hardware nötig. Meine Frage ist nun, ob 
man nicht mithilfe anderer Hardware (entsprechende µController und 
Schaltungen) ein USB-Stick emulieren kann...

Man müsste doch nur die Befehle die der Master (DVD-Player etc.) 
übersetzen und zum Beispiel die angeforderte Datei entsprechend wie es 
ein USB-Stick zurückschicken.

Das sind so meine ersten Gedanken, leider fehlt mir weiteres 
Hintergrundwissen bzgl dem USB-Protokol und wie Speichersysteme 
aufgebaut sind. Wäre dankbar für weitere Tipps in der Richtung =) Und 
falls es wirklich noch keiner gemacht hat, wäre ich auch an der 
Entwicklung dieses Systems interresiert, hoffe auf Mitstreiter :)

mfg slashbrain

von Arc N. (arc)


Lesenswert?

slashbrain schrieb:
> Das USB-Protokol ist mithilfe von Master und Slave implementiert. Da
> Dein PC (meist) immer Master ist muss die Sticks/Festplatten usw. Slave
> sein => DVD-Player, Fernseher etc sind auch Master. Und die
> Master-Master-Kommunikation ist in dem Protokoll leider nicht vorgesehn.
>
> Aber es gibt ja auch die "USB-Netzwerkkabel" zum Verbinden von 2 PCs.
> Bei denen ist natürlich gewisse Hardware nötig. Meine Frage ist nun, ob
> man nicht mithilfe anderer Hardware (entsprechende µController und
> Schaltungen) ein USB-Stick emulieren kann...

Sowas gibt's von vielen Herstellern als Appnote (z.B. Atmel, Microchip, 
NXP etc.). Stichworte wären: [Hersteller] USB MSD

von Rolf Magnus (Gast)


Lesenswert?

slashbrain schrieb:
> Aber es gibt ja auch die "USB-Netzwerkkabel" zum Verbinden von 2 PCs.
> Bei denen ist natürlich gewisse Hardware nötig. Meine Frage ist nun, ob
> man nicht mithilfe anderer Hardware (entsprechende µController und
> Schaltungen) ein USB-Stick emulieren kann...
>
> Man müsste doch nur die Befehle die der Master (DVD-Player etc.)
> übersetzen und zum Beispiel die angeforderte Datei entsprechend wie es
> ein USB-Stick zurückschicken.

Ein USB-Stick weiß aber nichts von Dateien. Der kennt nur Sektoren. Das 
Dateisystem wird vom DVD-Player da "reininterpretiert". Das bedeutet, 
daß der PC selbst die Partition, die du dem DVD-Player als USB-Stick 
simulieren willst, nicht verwenden darf, solange diese Simulation läuft.

Alternativ generiert man, wie schon im Thread vorgeschlagen, on the fly 
ein simuliertes Dateisystem mit den Files drin. Dann darf aber immer 
noch vom PC aus keine Änderungen am Datei- oder Verzeichnisinhalt 
gemacht werden, weil der Player nicht davon ausgeht, daß sich ohne sein 
Zutun Daten auf dem Stick ändern.

von slashbrain (Gast)


Lesenswert?

ja, aber das ist ja ohne weiteres möglich. Man kann quasi ein Image 
erzeugen, welches sich in den Emulator einbinden lässt. Direkt darauf 
kann dann nur der andere Master virtuell zugreifen.

von Carsten S. (dg3ycs)


Lesenswert?

Hi,

über die PC Seitige Darstellung würde ich mir erst einmal die winigsten 
Gedanken machen. Der Knackpunkt ist ja die Hardware IN DEM KABEL.
Und da dort eh nichts ohne CPU geht kann man hier auch das 
Betriebssystem dieser sicher so aufsetzen das es auf dem "Speicher-PC" 
ohne größere Problem - maximal mit einem einfachen Programm läuft ;-)

Im Prinzip braucht man halt entweder einen schnellen Prozessor mit zwei 
USB Schnittstellen, die völlig unabhängig voneinander agieren kann, oder 
halt (zumindest für erste Heimversuche) einfach zwei einfache µC mit USB 
Schnittstelle die miteinander in Verbindung (PArallel, SPI/TWI oder wie 
auch immer) stehen.
Für die weitere Beschreibung habe ich jetzt die ZWEI µC geschichte im 
Kopf. In einem schnellen Proz oder FPGA mit zwei getrenten 
Schnittstellen währe es von der Funktionsweise ja ähnlich, nur 
schneller.
(die ZWEI µC Version kann zwar funktionieren, aber eher zur 
Demonstration denke ich, schnelle Dinge werden am Flaschenhals zwischen 
den Proz. scheitern...  )
Ausserdem ist das sowieso nur sehr Grob und Oberflächlich als Idee für 
einen Lösungsansatz geschildert.

Wenn man das ganze so aufbaut, dann würde je ein µC an einem Computer 
hängen. Der eine µC gibt sich als Mass Storage Device aus und simuliert 
damit den USB Stick. Die Daten die er zur Verfügung stellt bekommt er 
aber nicht aus einem Speicher sondern von dem zweiten µC.

Der zweite µC gibt sich gegenüber dem Computer der als Speicher 
fungieren soll als Custom Device aus (alternativ währe vieleicht auch 
Netzwerk möglich?). Für das Custom device braucht man nun ein Programm 
das gesteuert durch den µC entweder die Daten von der Platte Liest oder 
diese beschreibt. In einem ganz normalen Verzeichnis auf der Platte.

Der Ablauf sähe also so aus:
Das Kabel wird auf der "Speicher" Seite eingesteckt, Das Gerät meldet 
sich als Custom an, das Programm startet, das Verzeichniss wird gelesen 
und die Daten an den µC (CD) übergeben. Entweder im PC Programm oder in 
einem der beiden µC findet nun eine Aufbereitung der Daten so statt, das 
diese als Gültige Daten eines Speichersticks übertragen werden können...
Nun wird das Kabel auf der Seite angesteckt an der ein Stick simuliert 
werden soll. Der µC (MS) meldet sich als MAssenspeicher an mit daten die 
zu dem vom µC (CD) übermittelten Werten passen. Das Inhaltsverzeichniss 
des Plattenverzeichnisses wird so umgewandelt übertragen das es für den 
anderen PC gültig ist. (Zum Beispiel wird jedem Simulierten Cluster ein 
reales Cluster samt dessen Inhalt zugeteilt)
Soll nun auf eine Datei zugegriffenwerden, so will der PC ja die 
entsprechenden Speicherstellen lesen. Diese Aufforderung wird nun vom µC 
(MS) an dem µC (CD) weitergegeben der es wiederrum an sein Programm im 
PC (Speicher) weitergibt. Hier wird dann der Inhalt des Clusters gelesen 
der dem simulierten Cluster entspricht. Die Daten gehen dann den Weg 
_Platte->PRG>µC (CD) µC(MS) PC- Arbeitsspeicher. zurück.

Ich bin zwar eher ein Hardwaremensch der eigendlich kaum mit echten 
"Betriebssystemen" im Sinne von Dateimanagement arbeitet, aber das 
sollte doch Möglich sein. (Beruflich habe ich bisher nur 8Bit µC 
gemacht, fange jetzt auf der Hobbyschine an mich in die 32Bit Welt 
richtig einzuarbeiten) Und da die Verbindung BetriebsPRG-Festplatte ein 
ganz normaler Dateizugriff ist sollte es doch auch hier kein Problem 
geben, oder? Evtl. könnte man es ja sogar hinbekommen das sich der eine 
µC anstelle als CustomDvice mit eigener Software einfach als 
NetzwerkDevice anmeldet und die Dateizugriffe des einen Rechners einfach 
in Netzwerkzugriffe auf den anderen Rechner übersetzt. Dann würde sogar 
das ZusatzPRG entfallen.  Das die ganze Geschichte natürlich 
wahrscheinlich ineffizient ist und eigendlich wegen der Möglichkeit der 
USB-USB Netzwerklösung für 99% der denkbaren Anwendungsfälle eh 
überflüssig ist, das steht natürlich auf einem anderen Blatt.

Gruß
Carsten

von Reinhard Kern (Gast)


Lesenswert?

Carsten Sch. schrieb:
> Der Ablauf sähe also so aus:
> Das Kabel wird auf der "Speicher" Seite eingesteckt, Das Gerät meldet
> sich als Custom an, das Programm startet, das Verzeichniss wird gelesen
> und die Daten an den µC (CD) übergeben. Entweder im PC Programm oder in
> einem der beiden µC findet nun eine Aufbereitung der Daten so statt, das
> diese als Gültige Daten eines Speichersticks übertragen werden können...

Hallo,

das geht so wohl nicht: Sticks gibt es mit 16 GB, willst du da einen µC 
mit einigen GB RAM dranhängen?

Daten müssen bei Bedarf und "on the fly" vom PC geholt werden. Der Stick 
ist rein virtuell.

Gruss Reinhard

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Den Ansatz eines "virtuellen USB-Sticks" übrigens verfolgt AVM mit der 
Kombination aus Fritzbox und Fritz-USB-WLAN-Stick.

Derzeit schlummert das Projekt noch in der Betaphase:

http://www.avm.de/de/Service/Service-Portale/Labor/7270_streaming_stick/labor_start_streaming_stick.php

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Rufus t. Firefly schrieb:
> Derzeit schlummert das Projekt noch in der Betaphase

Vermutlich genauso wie der Autor
> Autor: Frank (Gast)
> Datum: 19.02.2009 12:21
dieses Beitrages ;)

von Alexander S. (esko) Benutzerseite


Lesenswert?

Auch wenn der Beitrag schon ein paar Jahre alt ist, möchte ich anfügen, 
dass es inzwischen einen USB-Stick zu kaufen gibt, der seinen 
scheinbaren Inhalt über WLAN als Stream erhält.

Er heißt Jak und wird in der aktuellen c't als Lösung für Smart-TVs und 
Autoradios ohne WLAN dargestellt:
http://www.heise.de/ct/inhalt/2013/09/052/

Hier ist die Webseite des koreanischen Herstellers:
http://www.jjakjjak.co.kr/about_essential.php

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.