USB-Speichergeräte, wie z. B. USB-Sticks und -Festplatten, dienen zum Anschließen von externem Speicher an Computer aller Art. Wie kann der Raspberry Pi einen USB-Speicher emulieren? Die einfachste Anwendung bestand darin, direkt über USB auf die SD-Karte zuzugreifen, aber man konnte auch über Ethernet auf Dateien zugreifen. Ich habe über folgendes Layout für einen " USB-Cloud-Stick " nachgedacht :
Computer <---USB---> |Raspberry Pi| <---Ethernet---> Cloud, NAS etc.
Der Computer sollte nur einen normalen USB-Stick zum Lesen und Schreiben von Dateien sehen. Der Raspberry Pi fungiert als programmierbare Brücke, die Verzeichnislisten und Dateizugriffe zuordnet, um eine Anforderung an einen Cloud-Speicher zu senden. Sie können mit jedem Computer (einschließlich Black-Box-Media-Playern) über USB auf Cloud-Speicherhoster zugreifen, ohne zusätzliche Software auf dem Computer installieren zu müssen . Die Raspberry Pi USB-Bridge sollte auch in der Lage sein, Dateien im laufenden Betrieb zu verschlüsseln / entschlüsseln, sodass verschlüsselte Dateien in der Cloud gespeichert werden können und auf jedem Gerät wie auf einem normalen USB-Laufwerk darauf zugegriffen werden kann.
Bearbeiten: Zu den vorhandenen Produkten mit ähnlichen, aber eingeschränkten Funktionen gehören Wireless Media Stick und USB-over-Network . Der Zugriff auf Dateien in der Cloud ist möglicherweise möglich, indem ein virtueller Speicher mit einem Cloud-Laufwerk oder einer ähnlichen Software bereitgestellt und mit TrueCrypt oder EncFS verschlüsselt wird. Passwörter werden nur auf der SD-Karte von Raspberry Pi gespeichert, aber auf den Speicher kann mit jedem Computer zugegriffen werden, ohne dass dies erforderlich ist Geben Sie eine Passphrase auf einem nicht vertrauenswürdigen Computer ein.
quelle
Antworten:
Das Problem ist, dass bei der USB-Verbindung des Pi zum PC nicht die Datenpins angeschlossen sind, sondern nur die Stromanschlüsse. Sie können dies nicht zum Sprechen von USB verwenden, da es nicht verkabelt ist.
Ihre einzige Option mit dem Pi wäre, USB mit den GPIO-Pins zu "knallen", aber dies ist sehr langsam und möglicherweise unzuverlässig. Ich vermute, dass Sie wirklich nur eine Tastatur oder eine Maus emulieren können - eine höhere Bandbreite wäre wahrscheinlich zu viel, um von der CPU bewältigt zu werden.
Eine andere Alternative wäre, ein Gerät zu finden, mit dem Sie zwei Computer über USB miteinander verbinden können, um eine Art Netzwerk zu erstellen. Dann können Sie aber auch einfach die Ethernet-Verbindung nutzen ...
quelle
Ausgehend von einer schnellen Durchsicht des BCM2835-Datenblattes (http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf) in Kapitel 15 wird USB OTG anscheinend unterstützt HW, also theoretisch könnte es nur eine Frage der SW sein, das vorgeschlagene Schema zu unterstützen. Ich bin kein Experte für USB-Protokolle (oder sogar ein Anfänger), aber es wäre ziemlich cool, diese Funktionalität zu haben.
Betrachtet man eine Beschreibung des BeagleBone (http://elinux.org/BeagleBone), so scheint es etwas Ähnliches zu unterstützen, obwohl ausdrücklich ein Connector erwähnt wird, der diesen Modus unterstützt. Es wäre bedauerlich, wenn der Raspberry Pi nur aufgrund der Auswahl der Anschlüsse eingeschränkt wäre.
Hoffe das ist hilfreich.
quelle
Dies scheint nun mit einem PiZero möglich zu sein - weitere Informationen finden Sie unter http://pi.gbaman.info/?p=699 .
quelle
Leider scheint dies so einfach wie ich es beurteilen kann, aber es wurde nicht getan. Weitere Informationen finden Sie in diesem Thread und in der ausführlichen Antwort
https://unix.stackexchange.com/questions/2683/serve-files-over-usb
Und eine Pi-spezifische Antwort hier: http://www.raspberrypi.org/phpBB3/viewtopic.php?f=8&t=4938
quelle
Wenn Sie nicht besonders auf Leistung bedacht sind, könnten Sie wahrscheinlich einen USB-fähigen Mikrocontroller mit USB-Massenspeichercode erwerben (Sie könnten beispielsweise die STM32F103-Debug-Schnittstelle auf einem STM32F0-Discovery-Evaluierungsmodul für 10 US-Dollar neu programmieren). Schließen Sie diesen vorsichtig an den seriellen Pi-Port an als Back-End und laufen mit mehreren hundert Kilobaud.
Eine bessere Leistung würde wahrscheinlich durch die Anbindung an den Client-PC über Ethernet erzielt werden. Dies würde jedoch einen benutzerdefinierten Treiber oder eine andere Präsentation für das Host-Betriebssystem erfordern - dh, Sie wären ein an das Netzwerk angeschlossenes Speichergerät oder ein gemeinsamer Server.
Standard-Dateitransferkabel wurden, wie ich glaube, bereits erwähnt, aber das würde eine geeignete Software für den Client-PC und Linux-Treiberunterstützung auf Quellenebene für das pi-Ende erfordern.
quelle
Ich fand heraus, dass Arduino ein USB-Gerät emulieren kann, das Arduino Leonardo sogar von Anfang an. Der LUFA USB-Stack kann auf Arduino verwendet werden und implementiert einen USB-Massenspeichergerätetreiber (siehe dieses Tutorial ). Dieses Setup kann verwendet werden, um USB-SCSI-Befehlen zuzuordnen , wie sie vom SD-Kartenleser verstanden werden. Ich weiß nicht genug über SCSI, aber es sieht so aus, als könnten die SD-Karte auf dem Raspberry Pi und das USB-via-Arduino zusammen auf demselben Bus verwendet werden. Sicher ist diese Idee keine vollständige Lösung ...
quelle
Dies hängt davon ab, wie USB funktioniert. Sie sehen, wann immer zwei Dinge mit USB verbunden sind, es gibt alle Möglichkeiten, wie ein USB-Host und ein USB-Gerät und niemals der Twain den Ort wechseln soll. Ein USB-Host kann alle Arten von Dingen ausführen, die USB-Geräte meist nicht ausführen können, um die Datenübertragung zwischen allen an den USB-Bus angeschlossenen Geräten zu synchronisieren. Weitere Informationen finden Sie auf der USB-Wikipedia-Seite .
Sie müssen zwei USB-Hosts (den Raspberry Pi und einen Computer) zur Kommunikation zwingen, was vom USB-Standard leider nicht unterstützt wird. Es gibt einige Geräte, die eine Datenübertragung zwischen zwei USB-Hosts vortäuschen können, aber wie Malvineous bereits erwähnt hat, ist es besser, wenn Sie Ethernet verwenden.
In Ihrer Frage wird speziell die Verwendung des Raspberry Pi zum Emulieren eines USB-Speichers erwähnt. Haben Sie jedoch darüber nachgedacht, den Raspberry Pi als NAS einzurichten? Wenn Sie den Raspberry Pi als NAS-Box verwenden, tun Sie im Grunde genau das, wonach Sie gefragt haben, aber anstatt USB zu verwenden, wird Ihr Netzwerk verwendet. Hier finden Sie eine Anleitung, wie Sie dies tun können, wenn Sie interessiert sind.
quelle
Ich kann es mit meinem alten Nokia N900 Telefon tun, indem ich den USB-Gadget-Treiber verwende, der im Nokia-Kernel enthalten ist. Das emulierte Gerät verhält sich genauso wie ein echtes, Sie können sogar einen PC davon booten.
quelle
Pi Zero und Pi Zero W sind jetzt verfügbar und unterstützen die Gadget-Oberfläche ( Kernal.org , linux-sunxi.org ), die verschiedene Profile ermöglicht, einschließlich USB-Massenspeicher und virtuelles Netzwerk.
Die Lösung, die der Anforderung des OP am nächsten kommt, besteht darin, ein Netzwerkprotokoll zwischen dem Pi und dem Host-PC und dann eine andere Form des Netzwerkprotokolls vom Pi zum Cloud- / Netzwerkanbieter zu verwenden. Das Pi Zero W verfügt über integriertes WLAN, sodass sogar eine direkte Verbindung zum Cloud- / Netzwerkanbieter hergestellt werden kann. Die Vernetzung dieser beiden Links ist der einfachste Weg, um die Arbeit zu erledigen. Es stehen viele Netzwerkprotokolle und Cloud-Anbieter zur Verfügung.
Der Versuch, USB-Massenspeicher zu verwenden, wäre eine schlechte Idee. Sie müssten eine Anpassung auf Treiberebene zwischen dem USB-Massenspeicher und dem Pi schreiben oder neu schreiben. Sie würden entweder mit MTP beginnen oder mit etwas Ähnlichem enden. MTP weist schwerwiegende Leistungsprobleme auf ( Reddit , XDA , HowToGeek , Reddit ), daher schlage ich den Netzwerkansatz vor.
Es sollte viele Programme und Projekte in diese Richtung geben. Aus der Sicht von Pi verhält es sich einfach wie ein Fileserver / Sync-Server, sodass Sie mit einem ähnlichen Tutorial sofort loslegen sollten. Ein Blick auf Dinge wie Pi-basierte Seafile- , Syncthing- , SugarSync- und OwnCloud- Server sollte Ihnen den Einstieg erleichtern .
Einige nützliche Anleitungen zum Pi Zero als USB-Gadget:
quelle
Die USB-Standards basieren auf Hosts. Das bedeutet, dass ein Gerät die gesamte Kommunikation mit den angeschlossenen Geräten steuern muss. Clients können ein einfaches Gerät oder ein Hub sein. Der Hub ist ein Host-Proxy für die mit dem Hub verbundenen Clients und kommuniziert mit dem Host (oder Hub), mit dem er verbunden ist.
Wie das ursprüngliche Design von USB aussieht, können Sie nicht zwei Hosts miteinander verbinden (Ihren PC und das RPi).
Es gibt jedoch Erweiterungen, nämlich USB On-The-Go , mit denen eine USB-Verbindung feststellen kann, ob sie mit einem Host oder einem Client verbunden ist, und deren Rolle entsprechend anpassen kann. Damit dies funktioniert, muss die Hardware unterstützt werden. Ich glaube nicht, dass das RPi dafür ausgelegt ist.
Weitere Informationen finden Sie unter http://www.usb.org/home oder http://en.wikipedia.org/wiki/Universal_Serial_Bus
Kurz gesagt, ich glaube nicht, dass dies möglich ist.
quelle