Liefert die physikalische Adresse eines Puffers unter Linux

Ich verwende Linux-Kernel 3.3 auf Xilinx 'Microblaze mit voller MMU. Die Aufgabe, die ich mache, erfordert, dass ich Folgendes weiß: Ich muss eine Textdatei (Puffer) erstellen und die physikalische Adresse dieses Puffers suchen, und ich möchte nicht, dass der Kernel diese Datei in diskontinuierliche Speicherbereiche schreibt.

Der Grund dafür ist, dass ich eine DMA-Engine habe, die Daten von einer voreingestellten physischen Speicheradresse streamt. Daher muss Linux gezwungen werden, die Pufferdatei genau an diesem Speicherort zu erstellen, damit sie sofort übertragen wird, wenn ich Daten in diese Datei schreibe von der DMA Engine auf einen anderen Hardware-Kern

Mehr Details:

Mein System verfügt über einen 512 MB DDR3-RAM, der über den "Xilinx" -Multiport-Speichercontroller (MPMC) mit dem System verbunden ist. Die Basisadresse dieses Speichercontrollers ist 0x90000000. Alle Einheiten im System greifen über diesen Controller auf den Speicher zu, einschließlich MicroBlaze, The DMA Das von mir verwendete Gerät verwendet eine spezielle Schnittstelle namens Native Personality Interface (NPI), um mit dem Speicher auf einer sehr niedrigen Ebene zu kommunizieren, was zu einer sehr hohen Geschwindigkeit führt.

Diese NPI-DMA-Einheit wurde ursprünglich entwickelt, um unter einem sehr einfachen eingebetteten Kernel namens "xilkernel" verwendet zu werden, der keinen virtuellen Speicher unterstützte. Weder MMU war Teil von MicroBlaze, sodass der Programmierer sehen konnte, wo sich der OS-Code befindet, und einen physischen Speicher auswählen konnte Adresse wie 0x91800000 als die Quelladresse, von der DMA streamen wird, dann kann der Programmierer eine Datei an dieser genauen Adresse platzieren und das System ausführen

Als wir das Projekt migrieren mussten, um Linux anstelle von xilkernel zu verwenden, trat dieses Problem auf. Ich habe Dateien auf einem externen Speichergerät, auf das ich als Blockgerät von Linux aus zugreifen kann, und ich muss jede Datei in den Hauptspeicher (DDR3-RAM) verschieben. und machen Sie den DMA-Stream der Datei. Derzeit wird der DMA von einer festen Adresse gestreamt, aber ich kann ihn bei Bedarf generisch machen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage