历史上的今天

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

正在发生

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

发布者:ularof不加糖 来源: eefocus关键字:Tiny4412  MMU 手机看文章 扫描二维码
随时随地手机看文章

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》的后半文。


关键字:Tiny4412  MMU 引用地址:Tiny4412的MMU解析

上一篇:Tiny4412异常处理
下一篇:tiny4412的Uboot启动流程

推荐阅读

从前面一节Exynos 4412的启动过程分析 ,我们知道:一上电,exynos4412首先执行固化在IROM中的代码,iROM首先设置程序运行环境 (比如关看门狗、关中断、关MMU 、设置栈 、设置栈 、启动PLL等 ),然后根据OM引脚确定启动设备 (NAND Flash/SD 卡/其他 ),把 BL1从里面读出存入iRAM的0x02021400地址处,最后启动 BL1; BL1从SD卡适当的位置读入14...
1.柴油流量计仪表安装的方向应使仪表壳体上所示箭头方向与液体流动方向一致,安装位置应注 意便于读数。2.柴油流量计仪表尽量安装在常温场合,不要安装在有害气体及强烈热辐射的场合,防止仪表计 数器部分受损害。3. 柴油流量计仪表中的椭圆齿轮轴尽可能安装成水平位置, 即刻度盘应安装成垂直位置(分度“0” 应上面),以减少椭圆齿轮与壳体间的...
  称重传感器大量用于,工业称重(如皮带秤,地磅称,电子秤,人体秤等),测力检测,拉压力测量。现场使用过程中称重传感器故障一般如下。  1.传感器过载,用户和厂家没有沟通清楚,传感器量程和实际力值,重量大小不匹配,造成传感器过载,使传感器桥臂电阻形变造成电路不平衡。传感器不能正常工作,输出信号波动,电阻无穷大等现象。  2.传感器引...
马自达中国发布了2021年9月马自达品牌在中国市场的销售业绩(零售)。2021年9月马自达中国的销量为16,428辆。同比去年9月份的20,922辆下滑21.47%,环比上个月的12,528辆增长31.13%辆。 9月份,马自达在华销量最好的三款车型分别是马自达3昂克赛拉、CX-5以及CX-4,三款车型的销量数据分别为8,941辆、2,611辆以及1,703辆。与上个月相比,CX-5的表现超过了CX-...

史海拾趣

问答坊 | AI 解惑

聚焦CPU双雄最新竞逐热点,解析多核处理器走向

随着AMD与英特尔公司竞相为其下一代多核处理器定义互连规则,一场有关计算机用处理器的激战正在悄然升级。两者都希望利用自己的互连标准编织单独的合作伙伴网,因为这将成为决定其在未来计算机行业取得胜利的关键。 在近日于旧金山举行的英特尔开发 ...…

查看全部问答∨

从技术人员到老板的转变历程的几点考虑,仅供参考

要完成从技术人员到老板的转变,需要做以下的思考: 1、管理知识的准备 1)老板角色代入体验 先做好几年的角色代入体验,代入到你现在公司的老板角色,看看他是如何处理问题的; 开会 忽悠(也叫做激励) 设计员工职业生涯 处理工作中 ...…

查看全部问答∨

汽车爆震传感器测试系统的工作原理

  压电式爆震传感器广泛应用于发动机机体或气缸的爆震检测中。汽车防爆震系统通过检测出压电传感器的电压值来判断爆震强度。        因此,功能完善、性能稳定、操作简单、测试精度高,可满足大批量生产测试需要的爆震传感 ...…

查看全部问答∨

能源危机成为PV发展良机

纵观世界太阳能设备产业鼻祖也就三家:美国应用材料(AMAT)、爱发科(ULVAC,原日本真空)和瑞士Oerlikon。爱发科在FPD行业拥有丰富的经验,是日本能够设计和生产薄膜太阳能电池成套设备的最大的公司之一。爱发科在薄膜太阳能设备的发展领域早,是日本 ...…

查看全部问答∨

51汇编语言教程

里面有单片机概述和51汇编语言教程!…

查看全部问答∨

这是咋回事啊????

今天写了一个小程序,其中包括了按键和数码管,刚开始时一切正常,但是第二次用AS 下载时却发现数码管灭了,当时也没在意,然后再下一遍程序,数码管啥也不显示。最后我用最基本的 非门来验证,却发现所有没用的管脚都是3.2v。是不是我的芯片坏了 ...…

查看全部问答∨

奇怪的LoadImage()失败

   我用的是WinCE5.0, HPC部分在explorerbase.rc增加自己的图片 a. 如果是sysgen或build sysgen生成的image,执行LoadImage自己的图片时,失败,GetLastError()返回1814 b. 如果是sysgen或build sysgen HPC,然后再make run-time ima ...…

查看全部问答∨

小弟要毕业做题目请大侠们指点

小弟想在嵌入式方面做个无线的题目,正愁于选题,请大侠们帮忙。…

查看全部问答∨

windows ce 安装盘需要哪些组件啊? 请求各位大侠帮帮忙了!

windows ce 安装盘需要哪些组件啊 我想要购买一款windows ce 的安装盘,但是我是新手,不知道应该在这个安装盘中需要哪些组件。 比如需要BSP么 还有Platform Builder 这个是盘里面自带的么 请求各位大侠帮帮忙了…

查看全部问答∨

这是问题怎么解决

最近刚学习zigbee,出现一个问题,搞了很久,不懂,特请大虾解释一下。小弟不胜感激。 Error[e46]: Undefined external \"osal_int_enable\" referred in ZMain ( C:\\SerialApp1.3\\ZStack-1.4.2-1.1.0\\Projects\\zstack\\ Utilities\\SerialCoo ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved