2016-07-03 31 views
-1

Ich habe einen Block von SRAM-Chips auf meinem Steckbrett eingerichtet. Und ich möchte direkten Zugriff auf diesen Speicher von Linux, indem ich ihn über eine Art USB-Schnittstelle mit seinen Adress- und Datenbussen verbinde. Dann möchte ich, dass Linux es als normalen logischen Speicherblock sieht und behandelt, sodass ich einen Prozess erzeugen und den SRAM-Block als seinen eigenen Adressraum zuweisen kann, ohne dass er wissen muss, dass sein Speicher vollständig extern ist.Externer logischer Speicherblock über USB-Schnittstelle?

Existiert ein solches USB-Gerät für den direkten Anschluss an einen Speicherbus? Vielleicht etwas, das Linux als Block-Gerät erscheint? Mein Verständnis ist, dass bei gegebenem Block-Gerät ich in der Lage sein werde, es mit Hilfe von mmap() in den Speicher abzubilden, und von dort wird der Prozess keinen Unterschied erkennen.

Wenn nicht, was ist die einfachste und eleganteste Art, dies zu tun? Ich könnte den Bus mit GPIO-Pins verbinden und einen Block-Gerätetreiber schreiben, um mit ihm zu verbinden und mmap() von dort zu verwenden. Oder ich könnte einen Mikrocontroller programmieren, der mit dem Speicherbus verbunden ist und Befehle über eine serielle Schnittstelle akzeptiert und Ergebnisse liefert. Aber wenn es mir möglich ist, möchte ich lieber keinen Umweg machen und den schnellsten und direktesten und natürlichsten Weg nehmen, um dies zu erreichen.

Antwort

1

USB-Sticks implementieren das Mass Storage Device Class https://en.wikipedia.org/wiki/USB_mass_storage_device_class (als Blockgerät angezeigt wird)

Der Linux-Host-Treiber kennt Klasse, um die Massenspeicher.

Sie Massenspeichergeräte verwenden können (zB USB-Stick) als virtuellen RAM (nicht genau das gleiche wie mmap() unten siehe Link), indem er sie als Swap-Speicher erklärt sehen diese http://www.tuxgarage.com/2011/07/add-virtual-ram-to-ubuntu-using-spare.html

https://en.wikipedia.org/wiki/Virtual_memory

Die MCU auf Ihrem Steckbrett muss die Massenspeichergeräteklasse implementieren, damit dies funktioniert.

Siehe auch dieses Themas Reading from USB device and writing to physical address

Für Atmel Beispiele und Quellcode finden Sie in der LUFA Bibliothek http://www.fourwalledcubicle.com/LUFA.php