300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > arm linux 进程页表 linux-kernel – ARM Linux页表项格式 – 未使用的位?

arm linux 进程页表 linux-kernel – ARM Linux页表项格式 – 未使用的位?

时间:2024-03-07 02:23:19

相关推荐

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权限,但我仍然需要知道如何设置页面没有权限.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。