2016-03-21 12 views
0

Ich versuche derzeit, einen Linux-Treiber zu entwickeln, um ein benutzerdefiniertes Modul zu verwenden, das in FPGA entwickelt wurde. Dafür verwende ich ein Xilinx Zynq SoC mit einer Linux-Distribution, die auf den 2 ARM-Cores läuft und meine VHDL-Module sind auf dem FPGA-Teil implementiert, aber das ist nicht wirklich wichtig, um mein Problem zu verstehen.So deaktivieren Sie den Cache-Speicher in Kernel-Modulen

Mein FPGA-Modul schreibt direkt in den RAM, und ich möchte lesen, was es mit dem Treiber geschrieben hat, aber ich habe Probleme wegen des Cache-Speichers. Der Treiber liest aus dem Cache und nicht für den RAM, also liest er ältere Daten.

Um den Speicherplatz zu definieren, wo der FPGA schreiben kann, verwende ich die kmalloc-Funktion. Weißt du, ob Flags, die ich verwenden könnte, um das Lesen aus dem RAM-Speicher zu erzwingen, statt den Cache vorhanden sind?

Ich sah zwei Flaggen, die, was ich suche sein könnte, aber ich verstehe nicht wirklich, was sie tun:

__GFP_COLD: Request Cache-kalten Seiten statt zurückzukehren Cache-warmen Seiten zu versuchen. -> Ich denke, es zwingt nur die Verwendung einer nicht bereits zwischengespeicherten Seite, aber es Cache danach. Ist das korrekt ?

GFP_DMA: Es scheint wie, was ich suche exect Ich lese es nur zwingen die Verwendung eines Teils des Speichers, der mit DMA kompatibel ist.

Wie kann ich das Caching des Arrays deaktivieren, das ich mit kmalloc erstellt habe? Oder zumindest, wie kann ich den Prozessor zwingen, aus dem RAM zu lesen, anstatt aus dem Cache zu lesen?

Vielen Dank für Ihre Hilfe!

Antwort

Verwandte Themen