gpt4 book ai didi

linux-kernel - ARM Linux 页表条目格式——未使用的位?

转载 作者:行者123 更新时间:2023-12-04 12:59:04 27 4
gpt4 key购买 nike

我需要使用 PTE 的两位来存储我的内核模块在拦截页面保护错误时将使用的自定义“状态”值。

我正在开发具有 ARM Cortex A9(我相信是 ARM v7)的 Galaxy Nexus。 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 位是什么的 list 。
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 |---|

不幸的是,我没有看到指定没有读取或写入权限的方法,但不知何故 mmapPROT_NONE似乎仍然有效。我知道如何指定读取或 R/W 权限,但我仍然需要知道如何将页面设置为没有权限。

最佳答案

您可以尝试清除 pte 中的当前位,这会导致页面错误吗?

关于linux-kernel - ARM Linux 页表条目格式——未使用的位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16085976/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com