前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ARMV8 mmu页表结构分析

ARMV8 mmu页表结构分析

作者头像
bigmagic
发布2020-03-17 14:55:33
2.1K0
发布2020-03-17 14:55:33
举报
文章被收录于专栏:嵌入式iot嵌入式iot

1.概述

armv8 mmu页表结构比较复杂,总体说来可以将MMU分为以下几个部分:

(1)虚拟地址(VA)为48位,而一般只使用到39位(512G内核,512G用户)

(2)可以配置成3级页表(64K页)或者4级页表(4K页)

最高的地址位是48为的地址,用4级页表进行管理。

用户空间的[63:39]都为零,而内核空间的[63:39]都是1。

虚拟地址的63位可以用来选择TTBRx。

2.虚拟地址格式

按照虚拟地址格式可以分为以下几种:

4K时页表的映射

64K时页表的映射

3.页表映射过程

如果要理解ARM64的映射过程,需要搞清楚的是

目前基于ARMv8-A架构的处理器最大可支持到48根地址线,也就是寻址2^48的虚拟地址空间。即虚拟地址空间范围为 0x0000 0000 0000 0000 ~ 0x0000 FFFF FFFF FFFF,共 256 TB。

由于需要进行4K页表的映射,所以需要3个512字节的数组用来存放表项。

那么我们相信分析一下页表的映射过程:

第一步:定义一个表的开始地址

main_tll[0]=(unsigned long)((unsigned char*)&T0_L1[0]) | // physical address

PTE_TYPE_PAGE | // it has the "Present" flag, which must be set, and we have area in it mapped by pages

MEM_ATTR_MEMORY;

其中main_tll为组表的表头,可以看main_tll[0]可以映射的空间范围是0到(0x4000 0000 - 1)。

这里由于用不到0x4000 0000以上的空间,所以把这部分空间再进行第二次映射。直接指向了T0_L1表的地址。

T0_L1[0]=(unsigned long)(0) | // physical address

PT_BLOCK | // we have area in it mapped by pages

MEM_ATTR_MEMORY;

可以看到,这里直接将T0_L1的地址赋值为0,这里表示这0-0x200000这2M空间直接映射。如果此时访问这2M虚拟地址,则直接1:1访问到物理地址上去了。

当然,如果想将这个地址映射的更加具体,也就是将这2M的空间,映射成4K,那就需要第三级的页表项来映射。

现在我们用树莓派3B来举例。

树莓派的串口寄存器地址0x3F200000。只需要映射到后面4k就可以了。

所以,总的表的映射过程如下:

//第一次映射

main_tll[0]=(unsigned long)((unsigned char*)&T0_L1[0]) | // physical address

PTE_TYPE_PAGE | // it has the "Present" flag, which must be set, and we have area in it mapped by pages

MEM_ATTR_MEMORY;

//第二次映射

T0_L1[505]=((unsigned long)(&T0_L2[0]) | // physical address

PT_PAGE | // map 4K

MEM_ATTR_MEMORY); // different attributes for device memory

//第三次映射

T0_L2[0]=(unsigned long)((505<<21)) | // physical address

PTE_TYPE_PAGE | // map 4k

MEM_ATTR_MEMORY;

这样就可以正常的访问地址空间了,至于为什么有个505,实际上0x3F200000 << 21得到的。21=12+9。

到这里三级映射关系就建立完成了。这时4K空间已经映射完成。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式IoT 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档