Ich betreibe Linux Kernel 3.3 auf Xilinx Microblaze mit voller MMU. Die Aufgabe, die ich tue, verlangt von mir Folgendes: Ich muss eine Textdatei (Puffer) erstellen und die physikalische Adresse dieses Puffers lokalisieren, und ich möchte nicht, dass der Kernel diese Datei in diskontinuierliche Bereiche des Speichers schreibt.bekomme die physikalische Adresse eines Puffers unter Linux
der Grund, warum ich das brauche, weil ich eine DMA-Engine habe, die Daten von einer voreingestellten physikalischen Speicheradresse streamt, also muss ich Linux erzwingen, um die Pufferdatei an genau diesem Speicherort zu erstellen, so dass ich Daten in diese schreiben Datei ihre sofort durch die DMA-Maschine auf eine andere Hardware-Kern übertragen
Weitere Einzelheiten:.
mein System hat ein 512 MB DDR3 RAM mit dem System verbunden über „Multi-Port-Speicher-Controller‚Xilinx (MPMC) die Basisadresse von diesem Speichercontroller ist 0x90000000, alle Einheiten im Systemzugriffsspeicher über diesen Controller, einschließlich MicroBlaze, Die DMA-Einheit, die ich eine spezielle Schnittstelle namens Native Perso verwendet nality Interface (NPI), um mit dem Speicher auf einem sehr niedrigen Niveau zu kommunizieren, was zu einer sehr hohen Geschwindigkeit führt.
Diese NPI-DMA-Einheit wurde ursprünglich für die Verwendung unter einem sehr einfachen eingebetteten Kernel namens "xilkernel" entwickelt, der keinen virtuellen Speicher unterstützte, weder MMU noch MicroBlaze, sodass der Programmierer sehen konnte, wo sich der Betriebssystemcode befindet Wählen Sie eine physikalische Speicheradresse wie 0x91800000 als Quelladresse aus, von der DMA streamen wird, dann kann der Programmierer eine Datei unter dieser genauen Adresse ablegen und das System ausführen, wenn wir das Projekt für die Verwendung von Linux migrieren mussten xilkernel Wir sind auf dieses Problem gestoßen, ich habe Dateien auf einem externen Speichergerät, auf das ich als Blockgerät von Linux zugreifen kann und ich muss jede Datei in den Hauptspeicher (DDR3 RAM) verschieben und den DMA die Datei streamen lassen. derzeit die DMA-Streams von einer festen Adresse, aber ich kann es generisch, wenn nötig.
Werfen Sie einen Blick auf dieses PDF eines Kapitels, das erklärt, wie der Linux-Kernel virtuellen und physischen Speicher verwaltet. Es enthält Beispiele zum Zuordnen und Anordnen von physischem Speicher für verschiedene Szenarien. http://lwn.net/images/pdf/LDD3/ch15.pdf –
@bromanous Haben Sie dieses Gerät selbst entwickelt oder handelt es sich um einen IP-Kern eines Drittanbieters, den Sie nicht ändern können? Wenn Sie es ändern können, dann empfehle ich dringend, dass Sie die DMA-Adress-Software so konfigurierbar machen, dass Sie die Standard-DMA-Funktionen nutzen können, von denen tian_yufen spricht. –
@BenjaminLeinweber, ja, ich habe den Quellcode für den DMA-Kern und ich kann die Adresse, von der DMA streamt, konfigurieren und zu einem generischen Parameter machen. – bromanous