2892|3

127

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

带你走进嵌入式ARM MMU神秘的内部世界 [复制链接]

ARM MMU页表框架
file:///C:\Users\郭晓娟\AppData\Local\Temp\ksohtml\wpsF282.tmp.png
先上一张arm mmu的页表结构的通用框图(以下的论述都由该图来逐渐展开):
file:///C:\Users\郭晓娟\AppData\Local\Temp\ksohtml\wpsF293.tmp.jpgfile:///C:\Users\郭晓娟\AppData\Local\Temp\ksohtml\wpsF2A3.tmp.png
以上是arm的页表框图的典型结构:即是二级页表结构:
其中第一级页表(L1)是由虚拟地址的高12bit(bits[31:20])组成,所以第一级页表有4096个item,每个item占4个字节,所以一级页表的大小为16KB,而在第一级页表中的每个entry的最低2bit可以用来区分具体是什么种类的页表项,2bit可以区分4种页表项,具体每种页表项的结构如下:
file:///C:\Users\郭晓娟\AppData\Local\Temp\ksohtml\wpsF2B4.tmp.jpg
简而言之L1页表的页表项主要有两大类:
第一大类是指向第二级页表(L2页表)的基地址;
第二类直接指向1MB的物理内存。
L1页表中每个表项可以覆盖1MB的内存,由于有4096K个选项(item),所以总计可以覆盖4096K*1MB=4GB的内存空间。
具体对应到Linux,由于linux的软件架构是支持3级页表结构,而arm架构实际只有2级的页表结构,所以linux代码中的中间级页表的实现是空的。在linux代码中,第一级的页表的页目录表项用pgd表示,中间级的页表的页目录表项用pud表示(arm架构其实不需要),第三级的页表的页目录表项用pmd表示(由于中间pud是空的,所以pgd=pmd),另外目前arm体系的移动设备中RAM的page大小一般都是4KB/page,所以L1页表中的页表项都是指向fine page table的信盈达嵌入式企鹅要妖气呜呜吧就零久要
但在linux内核启动的初始化阶段,临时建立页表(initial page tables)以供linux内核初始化提供执行环境,这时L1的页表项使用的就是第二种页表项(section enty),他直接映射的是1M的内存空间。具体的可以参考arch/arm/kernel/head.S中的__create_page_tables函数,限于篇幅,这里就不展开说了。
针对这种section page translation,mmu硬件执行虚拟地址转物理地址的过程如下:
file:///C:\Users\郭晓娟\AppData\Local\Temp\ksohtml\wpsF2C5.tmp.jpg
以上在初始化过程使用的临时页表(initial page tables),在内核启动的后期会被覆盖掉,即在paging_init--->map_lowmem函数中会重新建立页表,该函数为物理内存从0地址到低端内存(lowmem_limit)建立一个一一映射的映射表。所谓的一一映射就是物理地址和虚拟地址就差一个固定的偏移量,该偏移量一般就是0xc0000000(呵呵,为什么是0xc0000000?)
说到这里引入一个重要的概念,就是与低端内存相对的高端内存,什么是高端内存?为什么需要高端内存?为了解析这个问题,我们假设我们使用的物理内存有2GB大小,另外由于我们内核空间的地址范围是从3G-4G的空间,并且前面也说到了,linux内核的低端内存空间都是一一映射的,如果不引入高端内存这个概念,全部都使用一一映射的方式,那内核只能访问到1GB的物理内存,但实际上,我们是需要内核在内核空间能够访问所有的4GB的内存大小的,那怎么做到呢?
方法就是我们不让3G-4G的空间都使用一一映射,而是将物理地址的[0x00,fix_addr](fix_addr<1GB)映射到内核空间虚拟地址[0x00+3G,fix_addr+3G],然后将[fix_addr+3G,4G]这段空间保留下来用于动态映射,这样我们可以通过这段虚拟地址来访问从fix_addr到4GB的物理内存空间。怎么做到的呢?
譬如我们想要访问物理地址[fix_addr,4GB]这段区间中的任何一段,我就用宝贵的内核虚拟地址[fix_addr+3G,4G]的一段去映射他,建立好mmu硬件使用的页表,访问完后,将映射清除,将内核的这段虚拟地址释放,以供下次访问其他的物理内存使用。这样就可以达到访问所有4GB的物理内存的目的。

此帖出自ARM技术论坛

最新回复

楼主的所有帖都没有图,正常  详情 回复 发表于 2017-8-22 13:39
点赞 关注
 

回复
举报

626

帖子

173

TA的资源

一粒金砂(高级)

沙发
 

楼主的图没贴上。
此帖出自ARM技术论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身

点评

楼主的所有帖都没有图,正常  详情 回复 发表于 2017-8-22 13:39
郭晓娟是谁  详情 回复 发表于 2017-8-22 13:39
 
 
 

回复

732

帖子

2

TA的资源

纯净的硅(中级)

板凳
 
hightemplar 发表于 2017-8-22 13:36
楼主的图没贴上。

郭晓娟是谁
此帖出自ARM技术论坛
 
个人签名亚里士缺德
 
 

回复

6040

帖子

195

TA的资源

版主

4
 
hightemplar 发表于 2017-8-22 13:36
楼主的图没贴上。

楼主的所有帖都没有图,正常
此帖出自ARM技术论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表