2016-05-26 17 views
1

Nehmen wir an, der Speicher soll dem Benutzer Zugriff auf Arbeitsspeicher geben, der auf mehrere Seiten verteilt ist. Ich habe zwei Arrays der gleichen Größe: eine für logische Adressen und eine dma_ptrs. Ich möchte diese aufeinanderfolgenden Fragmente in einer zusammenhängenden virtuellen Adresse für den Benutzer abbilden, damit er sie verwenden kann.Implementieren von mmap in file_operations - Zuordnen von Seitenarrays zu virtuellem Raum

Ich kann wirklich nicht die Spezifikation von remap_pfn_range verstehen, die wahrscheinlich ist, was ich suche.

Antwort

0

Dokumentation: http://www.makelinux.net/ldd3/chp-15-sect-2

Seite Array enthält Zahlen Seitenrahmen - einfach die physikalische Adresse nach rechts verschoben durch PAGE_SHIFT Bits.

for(i = vm_pgoff; i < no; i++){ 
    remap_pfn_range(vma, virt_addr + (i - vm_pgoff) * PAGE_SIZE, page[i], PAGE_SIZE, prot); 
} 
+2

Funktioniert dieser Code? Es ist in Ordnung, deine eigene Frage zu beantworten, aber mach es zu einer * guten Antwort *; Enthalten Sie eine Erklärung, was die Funktion macht und was Ihr Aufrufcode tut, kopieren Sie den Prototyp hier und verlinken Sie auf beliebiges Referenzmaterial. –

+0

Um ehrlich zu sein, kann ich nicht sagen, ob es funktioniert. – JKS

+2

Nun, dann sollte es wahrscheinlich keine Antwort sein ... Du solltest [deine ursprüngliche Frage bearbeiten] (http://stackoverflow.com/posts/37471297/edit), um diesen Code-Versuch einzuschließen. –