历史上的今天
返回首页

历史上的今天

今天是:2024年09月26日(星期四)

正在发生

2021年09月26日 | ARM内存管理单元--MMU

2021-09-26 来源:eefocus

前言

我们在学习4412的时候,我们原本的中断地址已经被IROM和IRAM占据了,并且不允许被修改,所以我们只能去选取高端地址0xffff 0000高端地址,但是这一片地址属于虚拟地址,所以我们需要开启MMU


MMU定义

MMU功能,(memory management unit) 内存管理单元,MMU是硬件的内存管理器件,使用硬件方式对内存进行映射管理。


将物理内存 0X4000 0000 - 0X8000 0000,的某些指定地址,映射到虚拟内存地址上。 虚拟内存地址总计大小 0X0000 0000 – 0X FFFF FFFF 总计4GB ,他包含了0xffff 0000这地址,我们就可以去开启异常,其中异常包含着硬件最重要的中断


同样的,MMU的存在可以让计算机多出很多的空间,他要配合协处理器寄存器等方式来实现,所以我们需要使用到内联汇编

他是一种多对一的方式,虚拟地址很多存储在相同的物理空间中,它通过走表的方式获得物理内存,下面我们详细介绍他的走表过程


MMU的走表过程

上图就是完整的走表过程,他经过非常精细的设计,下面我们来介绍一下他这个过程


Input address,先获取一个虚拟地址,然后去掉后面的20位,只留前面的12位,

First-level descriptor address,将他和从C2寄存器中取出来的28位拼在一起,并且在后面加上00代替,表示使用的部分流的方式,刚才虚拟地址的前12位就被当作了偏移量

First-level Section descriptor,通过图中Translation flow for a Section找到了对应的地址,

Output address,这时候取他的前16位就是他的真实物理地址

协处理器来查表

协助核心工作的协处理了,他的内部有16个寄存器,cp0–cp15,他的名字是c1-c15,其中我们要用到的是c1,c2,c3,起始表项写到c2,c1是用来使能mmu,c是用来设置使能内存的权限


extern void enable_mmu(u32 *ttb)

{

    __asm__ __volatile__(

        "nopnt"

        //将TTB基地址写入C2

        "mcr p15, 0, %[ttb], c2, c0, 0nt"


        //设置C3的内存访问权限为最大权限,全部设为11

        "mvn r0, #0nt"

        "mcr p15, 0, r0, c3, c0, 0nt"

        //设置C1,使能MMU,顺便设置异常向量表存储在高端地址

        

        "mrc p15, 0, r0, c1, c0, 0nt"

        "orr r0, r0, #(0x1 << 13)nt"

        "orr r0, r0, #0x1nt"

        "mcr p15, 0, r0, c1, c0, 0nt"

        "nopnt"

        :

        :[ttb]"r"(ttb)

        :"r0"

    );


}


MMU功能的实现

由于频繁使用,所以我们将走表过程写成宏函数


/*

    TTB 由C2给定的转换表的基地之,看成一个数组

    VA 要映射的虚拟地址的基地址, 取高12位,可以配合TTB基地址当成数组寻找表项

    PA 表项中需要指定的物理基地址,管理本地址上1M的物理地址空间的映射

*/

#define CREAT_DESCRIPTOR(TTB, VA, PA)

    TTB[VA>>20] = ((PA&0xfff0000)|(0x2))


同时我们查手册,我们需要将板子出场的地址占用,还有真实的物理地址,不能让他映射,方法就是自己映射自己


memset(ttb, 0x0, 4096*4);


    section_map(ttb, 0x0, 0x0cd00000,0x0);


    section_map(ttb,0x0ce00000,0x14000000,0x0ce00000);


    section_map(ttb, 0x40000000,0x80000000,0x40000000);


同时我们应该注意,我们映射的时候使用的是段映射,所以我们的低20位要和映射地址的低20位相同,因为在走表的时候,他们的偏移量是相同的

推荐阅读

史海拾趣

Good-Ark公司的发展小趣事
声控报警电路应安装在需要监控的区域附近,并确保声音传感器能够充分接收环境声音。同时,应避免将传感器安装在有强风、机械振动等干扰源的地方。
General Electronic Devices公司的发展小趣事
负责产生控制信号,驱动开关元件按一定频率和占空比工作。
Henkel公司的发展小趣事
提供稳定的直流电压。
诚润电子(CHEVRON)公司的发展小趣事

在电子行业中,产品质量是企业生存和发展的关键。诚润电子深知这一点,因此在生产过程中严格把控每一个环节,确保产品质量的稳定性和可靠性。这种对品质的执着追求,使得诚润电子的产品在市场上赢得了广泛的认可和信任。许多知名品牌都选择了诚润电子作为他们的合作伙伴,共同为消费者提供优质的电子产品。

博林(BL)公司的发展小趣事

随着全球环保意识的不断提高,博林公司积极响应号召,将绿色环保理念融入到产品设计和生产过程中。公司采用环保材料和节能技术,努力降低产品的能耗和排放。同时,博林公司还加强了对废弃电子产品的回收和处理工作,实现了资源的循环利用。这些举措不仅提升了博林公司的品牌形象,也为其在可持续发展的道路上奠定了坚实基础。

需要强调的是,以上故事是基于一般性的行业知识和假设构建的,并不直接代表博林公司的实际发展经历。博林公司的具体发展历程和故事可能涉及更多的细节和复杂性,需要进一步的了解和研究。

Delkin Devices公司的发展小趣事

随着科技的不断进步,Delkin Devices始终保持着对新技术和新产品的敏感度和热情。公司投入大量资源进行技术研发和产品创新,不断推出具有竞争力的新产品。例如,在固态硬盘(SSD)技术兴起的时代,Delkin Devices迅速抓住机遇,成功开发出了一系列高性能、高可靠性的SSD产品,赢得了市场的广泛认可。此外,Delkin Devices还积极拓展产品线,推出了包括读卡器、存储卡等在内的多种存储配件,进一步巩固了其在电子行业中的领先地位。

问答坊 | AI 解惑

星巴克的赚钱利器——Embedded for Point of Service

对于爱喝咖啡的人来说,星巴克(Starbucks)是一个耳熟能详的名字。星巴克是市场经济的宠儿之一。公司在在世界28个国家共建有5689家连锁店。自从10年前挂牌上市之后,销售额以每年平均20%的速度递增,利润额每年的平均增长幅度为30%。 那么,星 ...…

查看全部问答>

【EEWORLD模块整理】+开关电源

本帖最后由 paulhyde 于 2014-9-15 03:35 编辑 开关电源07大赛刚刚做过,估计今年出题的概率很小了,不过相关的模块还是可能用得到的,有兴趣做电源类的可以看看~~~ [ 本帖最后由 open82977352 于 2009-8-4 09:53 编辑 ]  …

查看全部问答>

5年后的手机,你能想象到是什么样么?

也是看到网上有个朋友的猜想,于是转载过来,也请大家谈谈五年后手机的样子? 现在的手机功能已是五花八门,可能手机行业内的人也不一定了解手机的全部功能。五年后或八年后的手机会是什么样的呢??? 就是一小电脑?答案:是,也不全是。准确的 ...…

查看全部问答>

SATA AHCI模式怎么读硬盘序列号?

请不要告诉我在OS下读的方法。我要DOS的。要汇编的。 我看了AHCI的spec,只看到了发命令和读状态的register,可是不知道哪个register是读取那256个word的。请教大虾们。先谢了…

查看全部问答>

U盘问题

U盘被保护了,其属性变成了0KB,请问怎么解保护?请高手指点!…

查看全部问答>

WINCE芯片的驱动怎么做?

要开题了,今天老板给了个题目,基于WindowsCE手持式IPTV测试仪88e1111PHY芯片驱动程序的设计与实现: 平时我们做驱动一般都是和ARM直连的或者是arm的外扩,但是在这个项目里面,这块PHY芯片和FPGA相连,然后FPGA和ARM通过爽口RAM相连,请问ARM应 ...…

查看全部问答>

error C2061: syntax error : identifier 'IAuthenticate'

EVC下想通过OLE DB访问数据库,可编译时报错:error C2061: syntax error : identifier \'IAuthenticate\' 请问是什么原因?…

查看全部问答>

中嵌学院--FPGA (IC前端)Verilog 数字系统设计工程师培训班

中嵌学院 FPGA (IC前端)Verilog 数字系统设计工程师培训班 招生简章 中嵌学院(中嵌教育)再次以实干精神,以一流的高端技术服务于社会。中嵌学院(中嵌教育)联合北京神州龙芯IC设计公司、重庆EDA平台强势推出《FPGA (IC前端) Verilog 数 ...…

查看全部问答>

关于Sdram的PCB布线的问题

工作在100M或133M,与DSP进行数据交换。 1,地址线和DSP之间的阻抗匹配拟使用串接电阻的方式。其中数据线是双向传输的,请问电阻是串在DSP端好呢还是RAM端好呢?若两端都加电阻除了令布线复杂外,还有没有其他隐患? 2,除了RAM之外,还会扩展fla ...…

查看全部问答>

Cannot launch the remote executable 如何解决???大家帮帮忙吧

点击但步执行,出现下面对话框 Cannot launch the remote executable Error: File not found   Win32 error code : 2 点击该对话框上的按钮:确定 则出现下面提示: Please check the remote exectuable path and file neme ...…

查看全部问答>