历史上的今天
返回首页

历史上的今天

今天是:2024年10月14日(星期一)

正在发生

2018年10月14日 | Tiny4412的MMU解析

2018-10-14 来源:eefocus

1、Tiny4412的MMU和S3C6410都是一样的,以前的程序都可以运行,因为MMU有两个特点:

  ①MMU实在cp15协处理器里面操作的,协处理器由ARM公司统一设计,不会轻易变化,这部分代码和Samsung没有关系;

  ②MMU的功能就是把虚拟地址映射物理地址上去。

2、为什么裸机要讲MMU?

  因为中断,ARM地址的布局。现在三星处理器地址的布局和以前不一样,以前S3C6410的0地址是可以选的,比如nand flash启动的时候0地址对应片内内存;nor flash启动的时候0地址对应nor flash的0地址。也就是0地址我们可以选择是ROM或者RAM,根据前面JZ2440和OK6410的中断实验可以看出我们把中断向量表放在0地址开始的地方,一旦发生异常就会自动跳到相应的中断入口地址处执行。我们想构建自己的异常向量表的时候可以切换为nand flash启动,nand flash启动的话RAM就是映射在0地址这个地方,RAM映射在0地址我们想构建自己的中断异常向量表的时候就把异常向量表放到RAM这,也就是重启开机的第一句代码都可以由我们自己写。

   可是4412处理器不一样了,4412的0地址只能是ROM不能选择成RAM,0地址直接就是一个ROM,整个ARM一开机必须先执行它ROM里面的代码,它的ROM里的代码再去选择执行EMMC启动、USB启动、SD卡启动,这个时候异常向量表由ARM来决定,异常向量表依然在0地址,那这个时候构建自己的异常向量表还能不能下载到ROM里面呢?很显然ROM是不能更改的不能下载到ROM里面去,这就是要讲MMU的原因。

3、可以把异常向量表地址选成高地址0xFFFF0000,程序运行起来以后就往这跳,但是机器上并没有这个地址,就通过MMU来映射。

板子上的内存布局:0x40000000 - 0x80000000   共1G

uboot的链接地址(在uboot源码中修改过):0x43e00000

我们测试程序的时候就是用0x73000000的地方,不会把u-boot破坏掉。

4、tlb缓存的是虚拟地址和物理地址之间的对应关系;

5、icache、dcache也是缓存,但缓存的不是虚拟地址和物理地址之间的对应关系,ARM以前的版本缓存的是虚拟地址和数据的对应关系,在后面的物理cache上面缓存的是物理地址和内容的关系;

====================================================================

转载:http://blog.chinaunix.net/uid-28454895-id-3583559.html

MMU(Memory Management Unit,内存管理单元)在现代处理器中扮演着非常重要的角色。操作系统通过使用处理器的MMU功能,能实现以下功能:

    1)虚拟内存。有了虚拟内存,可以在处理器上运行比实际物理内存大的应用程序。为了使用虚拟内存,操作系统通常要设置一个交换分区(通常是硬盘),通过将不活跃的内存中的数据放入交换分区,操作系统可以腾出其空间来为其它的程序服务。虚拟内存是通过虚拟地址来实现的。

    2)内存保护。根据需要对特定的内存区块的访问进行保护,通过这一功能,我们可以将特定的内存块设置成只读、只写或是可同时读写。

   MMU给我感觉是个很复杂的东西,网上看了一些资料,勉强知道了一些表面的东西。它有两个作用:

1、把虚拟地址映射到物理地址;

2、对内存访问提供控制机制。

   我主要记录下我对映射表变换的理解。

   在ARM中,MMU另外提供了一张映射表(MVA),用于程序虚拟地址(VA)到物理地址(PA)的映射。MVA称为变换后的VA。在程序运行时,CPU只看到VA,而MMU和cache们只看到PA和MVA。应该说,在进程运行切换过程中,映射关系是动态变化的,因为不同进程和内存之间需要不同的映射关系,就需要不断的重做映射表,这个代价是很大的。所以,有必要让映射表中需要更新的内容很少,以减少性能开支,这就出现了“变换后的”VA,即MVA,如果VA<32M,需要使用进程标识号PID(通过读CP15的C13获得)来转换为MVA。

VA与MVA的转换方法如下(这是硬件自动完成的):

if(VA < 32M)

    MVA = VA | (PID<<25);   //VA<32M,即PID*0x02000000作为该进程起始地址

else

    MVA = VA;               //VA>=32M

如:假设两个进程1、2运行时的VA都是0-32M,则他们的MVA分别是0x02000000-0x03ffffff、0x04000000-0x05ffffff,这样进程切换就省事多了,不必进行重建页表等工作。

    但是,这同时带来了中断跳转的问题。当发生异常时,需要跳到0x0位置的异常向量表,这个0x0应该是VA,且小于32M,如果开启了MMU,就会被转换为MVA,而不同的PID产生不同的MVA,这就导致异常向量表的地址不统一了。所以,Linux采取了将0x0位置的向量表映射到高地址0xffff0000处,就没有上述的问题了,看了半天原来是这么回事。。。

    接下来,就是MVA如何映射PA的工作。s3c2410的datasheet中说到4中映射方案,其中最方便的是段(section)操作,具体见《s3c2410 MMU》的后半文。


推荐阅读

史海拾趣

Chesivale Electronics公司的发展小趣事

Chesivale Electronics公司深知人才是企业发展的核心动力。因此,公司一直注重人才队伍建设。公司通过校园招聘、社会招聘等多种渠道吸引优秀人才加入,同时建立完善的培训机制和晋升机制,激发员工的积极性和创造力。这些措施使得公司的人才队伍不断壮大,为公司的发展提供了有力的人才保障。

Anaren Ceramics公司的发展小趣事

Anaren Ceramics公司深知技术创新是企业发展的核心动力,因此一直致力于打造一支强大的研发团队。公司投入大量资金用于研发人才的引进和培养,同时积极与高校和科研机构建立合作关系,共同开展技术研发项目。这些举措使得公司的研发团队不断壮大,为公司的发展提供了源源不断的创新动力。

长工微电子公司的发展小趣事

长工微电子在产品研发上不断取得突破。其中,IS6608芯片实现了多相电源并联输出最高到200A,这是国产电源芯片第一家可以用于服务器CPU多相并联电源解决方案,打破了欧美电源芯片厂商在多相电源的垄断。同时,IS6607 20A集成mos电源芯片,以3x4mm的体积实现了100w的功率输出,代表了当时芯片产业模拟电源的最高水平。这些产品广泛应用于服务器、台式机、笔电、基站、AI、LED显示屏等市场领域,为公司带来了丰厚的回报。

亿晶源(ekinglux)公司的发展小趣事

随着市场的逐步扩大,亿晶源于2013年在东莞成立东莞市亿晶源光电科技有限公司,进一步扩大生产规模。公司高度重视技术创新,不断投入研发资金,引进高端人才,成功推出多款具有竞争力的LED半导体产品。同时,公司还通过了ISO9001质量体系认证,为产品质量的稳定提升提供了有力保障。

安纳森(AnaSem)公司的发展小趣事

随着技术的不断成熟和市场的逐步扩大,安纳森开始将目光投向更广阔的全球市场。公司积极与全球各地的合作伙伴建立战略合作关系,共同开拓市场。同时,安纳森还设立了多个海外研发中心和销售网点,以便更好地了解当地市场需求,提供更贴近用户的产品和服务。这一系列的全球化布局,不仅提升了安纳森的品牌影响力,也为其未来的发展奠定了坚实的基础。

EICHHOFF公司的发展小趣事

在电子行业的快速发展中,EICHHOFF公司始终保持着对技术创新的追求。XX年代,公司成功研发出了一款具有革命性意义的连接器产品,该产品凭借其独特的设计和卓越的性能,迅速在市场上获得了广泛认可。这一创新不仅为EICHHOFF带来了丰厚的利润,也进一步巩固了其在行业中的领先地位。

此后,EICHHOFF公司继续加大研发投入,不断推出具有竞争力的新产品。这些产品不仅在性能上有所提升,还在设计和功能上进行了创新,满足了客户日益增长的需求。

问答坊 | AI 解惑

基于FPGA的DDS调频信号的研究与实现

基于FPGA的DDS调频信号的研究与实现…

查看全部问答>

dsp课件下载

上传老师的dsp课件,希望对想学习DSP和参加这次DIY活动的朋友有用!…

查看全部问答>

初学者:跑马灯+中断出错了怎么会事啊

我用的是AT89S52的片,把下边的程序烧进去后,只要进了中断就出不来了是怎么会事啊,出不来还好,灯还在哪瞎闪,希望大家帮帮我啊 #include /*         本源程序有三种跑马灯的方式:           ...…

查看全部问答>

求:Windows Mobile & Pocket PC 上GPS串口读经纬度.NET的Demo源码

求:Windows Mobile & Pocket PC 上GPS串口读经纬度.NET的Demo源码.多谢了. msn: kingmax5421@msn.com…

查看全部问答>

收到eeworld 寄来的8982了。happying....

才顺风打来电话,有快递。。那叫一个激动啊。。。知道是eeworld里的8962来了。立即飞奔到校门口,成都今年很冷。我硬是这跑的满头大汗。。。终于拿到板子。。开机就有一个小游戏。。。太有意思了。。。感谢eeworld。。。。 激动ing..happying..准备 ...…

查看全部问答>

后仿真信号名中的反斜杠‘\’

后仿真信号名中的反斜杠‘\\’,后仿真生成了sdf文件和.v文件,加上testbench,进行仿真。很多信号前面都有\\,比如wire \\data之类的,我想在testbench中display任务中打印下层的信号,功能仿真时,直接用点\".\",就能调用下层信号,可是现在前面 ...…

查看全部问答>

运放稳定性-(第七第八部分)

本帖最后由 dontium 于 2015-1-23 13:11 编辑 第七部分:Ro何时转变为Zo?第八部分:电容负载稳定性-噪声增益及Cf …

查看全部问答>

大学期间不妨看看的书

1:《狼图腾》姜戎      2:《不能承受生命之轻》米兰.昆德拉 3:《借我一生》余秋雨 4:《平凡的世界》路遥 5:《文化苦旅》余秋雨 6:《如何做最好的自己》王宇 7:《一网情深》李开复 8:《退步集》陈丹青 9 ...…

查看全部问答>

超声波遥控

想做遥控器,对超声波遥控不了解,一般压电类型发射头发射有效距离多远? 做过的朋友能多讲讲么?…

查看全部问答>

TIOBE 2012年2月编程语言排行榜

TIOBE 2012年2月编程语言排行榜已经发布,本月C#挤进前三,占领季军位置,C++降至第四名。Visual Basic惨遭冷谈,呈现下滑趋势;而VB.NET受到了开发者们的追捧,进入榜单前20名,从上个月的24位跃至16位。还有个有意思的地方,Matlab排在第26 ...…

查看全部问答>