ARM Linux-Seitentabellen-Eintragsformat - nicht verwendete Bits?
Ich muss zwei Bits des PTE verwenden, um einen benutzerdefinierten "Status" -Wert zu speichern, den mein Kernelmodul beim Abfangen von Seitenschutzfehlern verwendet.
Ich entwickle auf einem Galaxy Nexus mit einem ARM Cortex A9 (ARM v7, glaube ich). Linux Kernel Version 3.0.31. Die Linux-PTE-Definitionen lauten wie folgt (vonarch/arm/include/asm/pgtable.h
:
/*
* "Linux" PTE definitions.
*
* We keep two sets of PTEs - the hardware and the linux version.
* This allows greater flexibility in the way we map the Linux bits
* onto the hardware tables, and allows us to have YOUNG and DIRTY
* bits.
*
* The PTE table pointer refers to the hardware entries; the "Linux"
* entries are stored 1024 bytes below.
*/
#define L_PTE_PRESENT (_AT(pteval_t, 1) << 0)
#define L_PTE_YOUNG (_AT(pteval_t, 1) << 1)
#define L_PTE_FILE (_AT(pteval_t, 1) << 2) /* only when !PRESENT */
#define L_PTE_DIRTY (_AT(pteval_t, 1) << 6)
#define L_PTE_RDONLY (_AT(pteval_t, 1) << 7)
#define L_PTE_USER (_AT(pteval_t, 1) << 8)
#define L_PTE_XN (_AT(pteval_t, 1) << 9)
#define L_PTE_SHARED (_AT(pteval_t, 1) << 10) /* shared(v6), coherent(xsc3) */
Wenn man sich nur diese Definitionsliste ansieht, sieht es so aus, als ob Bits 3, 4, 5 sowie Bits 11 und höher verfügbar sind. Ich weiß jedoch, dass die 20 höchstwertigen Bits [31:12] für die Seitenzahl verwendet werden (PFN, glaube ich), daher kann ich keines davon verwenden.
Kann ich Bits [5: 3] frei verwenden oder führt dies zu Problemen? Ich habe Stunden damit verbracht, nach der Antwort darauf zu suchen, aber ich kann nur eine Dokumentation darüber finden, wie Linux PTE-Bits für die x86-Architektur verwendet.
AKTUALISIEREN:Ich habe eine Liste zusammengestellt, von der ich glaube, dass sie jedes PTE-Bit ist.
bit 0 PRESENT
bit 1 YOUNG
bit 2 MEMORY TYPES 0 B FILE (only when not PRESENT)
bit 3 MEMORY TYPES 1 C
bit 4 AP0
bit 5 AP1
bit 6 DIRTY
bit 7 RD_ONLY
bit 8 USER
bit 9 XN
bit 10 SHARED
bit 11 EXT_NG (no idea what this is)
bit 12 |---|
... |PFN|
bit 31 |---|
Leider sehe ich keinen Weg, dies zu spezifizierenNein Lese- oder Schreibrechte, aber irgendwiemmap
mitPROT_NONE
scheint immer noch zu funktionieren. Ich weiß, wie man Lese- oder R / W-Berechtigungen angibt, aber ich muss immer noch wissen, wie man eine Seite so einstellt, dass sie keine Berechtigungen hat.