arm linux 进程页表,linux-kernel – ARM Linux页表项格式 – 未使用的位?
我需要使用兩個PTE位來存儲我的內核模塊在攔截頁面保護錯誤時將使用的自定義“狀態”值.
我正在開發Galaxy Nexus,它有一個ARM Cortex A9(我相信ARM v7). Linux內核版本3.0.31. Linux PTE定義如下(來自arch / 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) */
只需查看這個定義列表,就會看到3,4,5位可用,以及11位和更高位.但是,我知道20個最重要的位[31:12]用于頁碼(PFN,我相信),所以我不能使用其中任何一個.
我可以自由地使用位[5:3]還是會產生問題?我花了幾個小時尋找答案,但我只能找到有關Linux如何使用PTE位進行x86架構的文檔.
更新:
我已經編制了一個我相信每個PTE位的列表.
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 |---|
不幸的是我沒有看到指定沒有讀取或寫入權限的方法,但不知何故,帶有PROT_NONE的mmap似乎仍然有效.我知道如何指定讀取或R / W權限,但我仍然需要知道如何設置頁面沒有權限.
總結
以上是生活随笔為你收集整理的arm linux 进程页表,linux-kernel – ARM Linux页表项格式 – 未使用的位?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美股周二:欧洲2035年停售燃油车,特斯
- 下一篇: linux 读取文件夹命令,Linux系