如何确定L2页表的基地址? (使用ARM Cortex-A9)ARM MMU,处理L2页表
例如,如果我有一个程序需要7KB的数据空间并从地址0x0开始,那么我需要两页4KB。 为此,我在L1页表中添加一个指向L2页表基地址的条目。 后来我在L2页表中添加两个条目一样,(与地址=为0x0的第一页,为0x1000的第二个)
u32 *ptr;
u32 small_page;
small_page = addr/0x1000;
ptr = small_page + L2_table_base_addr;
*ptr = (addr & 0xFFFFF) | attributes;
现在有一两件事,我还是不明白。 如何确定L2页表基地址?我应该把表格放在L1页面之后吗?
我在哪里可以储存地址?我知道L1页表的基地址存储在协处理器寄存器中,但是我没有找到任何寄存器来存储L2基地址。
另一个可以肯定的问题是,协处理器寄存器TTBR0和TTBR1都保存L1页的基地址。各自为政。 L1和TTBR1不是TTBR0,是吗?
但是......在提出这个问题之前,您已经说过了答案 - L2页表的地址存储在相关L1表的条目中。至于他们实际存在的物理内存中的某处,可以将它们放在任何你想要的地方。 – Notlikethat 2014-11-06 18:00:48
好吧,我现在看到我错了。我以为有一张L2页表。 – Olivier 2014-11-07 10:05:44
这里有很多问题和答案可以提供这些信息。例如,[什么是更新MMU转换表的正确方法](http://stackoverflow.com/questions/16383007/what-is-the-right-way-to-update-mmu-translation-table)。你可以选择一个回答你的问题,然后点击**关闭**并选择该答案作为副本。请参阅:[arm + mmu search](http://stackoverflow.com/search?q= [arm] + mmu)获取可能的候选人。这将有助于未来的读者(如你)找到答案。请注意,所有表都有对齐限制。 – 2014-11-07 14:56:12