Wie ermittelt man die Seitenrahmennummer für den Gerätespeicher?

9

Von LDD3 / Ch. 15 / sections "Verwendung von remap_pfn_range" und "A Simple Implementation", pfn wurde mit dem Feld vm_pgoff gleichgesetzt. Ich bin dadurch verwirrt. Wie kann das so sein?

Beachten Sie, dass vm_pgoff wie folgt beschrieben wird:

  

Der Offset des Bereichs in der Datei in Seiten. Wenn eine Datei oder ein Gerät ist   gemappt, ist dies die Dateiposition der ersten Seite, die darin abgebildet ist   Bereich.

Wenn also die erste gemappte Seite der ersten Seite der Datei entspricht (was, denke ich, ziemlich üblich wäre), wäre vm_pgoff 0. richtig? Wenn dies der Fall ist, scheint dies nicht der richtige Wert für den Pfn-Parameter von remap_pfn_range () zu sein. Was fehlt mir hier? Was ist der korrekte Wert? Zur besseren Übersicht gebe ich den entsprechenden Code von LDD3 unten (Seite Nr. 426)

wieder %Vor%     
venk 15.07.2012, 07:56
quelle

1 Antwort

5

Das von Ihnen zur Verfügung gestellte Beispiel besteht darin, eine Zeichengerätedatei zu implementieren, die es ermöglicht, physischen Speicher abzubilden, der / dev / mem sehr ähnlich ist. Indem Sie den Offset der Datei angeben, geben Sie die physikalische Speicheradresse an. Daher die Berechnung, die den Offset und die Division in der Seitengröße verwendet, um den PFN zu finden.

Für einen "echten" Gerätetreiber müssten Sie normalerweise die physische Adresse der Registerkarten des Gerätespeichers oder RAM fest aus der Gerätespezifikation codieren und daraus den PFN ableiten (durch Division durch die Seitengröße).

    
gby 16.07.2012, 05:29
quelle

Tags und Links