optee3.14中MMU页表查询的所需配置--深入解读

从arm官方文档来看,物理地址的有效位支持32、36、40、42、44、48,最大为48,如果开启了ARMv8.2-LPA,则也支持52
optee3.14中MMU页表查询的所需配置--深入解读_第1张图片
而对应的虚拟地址的有效位,是没用规定的,但是有一条潜规则,虚拟地址的有效位需要大于等于物理地址的有效位(一般情况下,虚拟地址有效位=物理地址有效位)

下图展示了"General view of VMSAv8-64 stage 1 address translation, 4KB granule", 然后我们可以找出如下规律:

  • 除了第一级index(这里是leve 0 table中的index),每一个查找table/page的index都是9个bit,也就是说除了第一级页表,后面的每一级table都是有512个offset
  • 如果VA_BIT = 39,那么leve 0 table用BIT[39:39]表示,只有1个offset
  • 如果VA_BIT = 48,那么leve 0 table用BIT[48:39]表示,有512个offset
  • 如果VA_BIT > 48,那是不存在的,因为arm规定,大于48的,只有一个,那就是VA_BIT=52,并且规定该情况下的最小granue size=64KB,而我们这里讲述的是granue size=4KB的情况
  • 如果VA_BIT = 32,那么leve 0 table就不用了,TTBR_ELx指向Level 1 table
  • 另外我们还需注意一点,在Level 0 table中,他只能指向D_Table,不能指向D_Block
    optee3.14中MMU页表查询的所需配置--深入解读_第2张图片
    optee3.14中MMU页表查询的所需配置--深入解读_第3张图片
    接着,我们再看一个示例,optee os中是一个怎样的情况?它怎么使用的?
    配置了:VA_BIT=32, PA_BIT=32, graule_size=4KB
    optee3.14中MMU页表查询的所需配置--深入解读_第4张图片
    所以对于optee os,显然是下面的这种情况:
    optee3.14中MMU页表查询的所需配置--深入解读_第5张图片
    代码也印证了这个观点:
    optee3.14中MMU页表查询的所需配置--深入解读_第6张图片

显然官网的那张图是不正确的
optee3.14中MMU页表查询的所需配置--深入解读_第7张图片
总结:当前的optee os的配置如下:
32位有效虚拟地址、32位有效物理地址,3级页表查询(L1、L2、L3),颗粒的位4KB

你可能感兴趣的:(optee,optee,MMU,页表,cache,ARMV8)