3.MMU的配置和使用

3.MMU的配置和使用

前面的基础知识中使用了物理地址来点亮LED灯的,现在,学习了MMU的有关知识,下面就是利用MMU的知识,用虚拟地址来点亮LED灯。而且前面还关闭了MMU所以接下来要使用MMU就得打开MMU。

在前面的学习知道,从虚拟地址映射成物理地址有三种方式的:

  1. 段的方式
  2. 粗页的方式
  3. 细页的方式

接下来就是使用段的映射方式来实现虚拟地址到物理地址的转化。

段的方式的实现步骤:

1、建立一张Translation table:

可以看到段的方式的表的信息。

2、建立了这张表之后,还要把这张表的基地址TTB(Translation Table Base)写到CP15的c2寄存器里,这样MMU才能找得到这张表。

3、就是打开MMU。

过程是通过虚拟地址访问物理地址来实现点亮LED灯,而不是像前面一样用物理地址点亮。

代码操作流程:

手册资料:

上面C和B的功能略图:

接下来是看AP位和Domain位:

可以看到ARM结构中把存储空间分为了16个域,每一个域都有它的访问权限。我们可以指定要访问的区域是放在哪个域里面。

这里选用的是域0,Domain是在位置5,所以(0<<5)即可。

AP的访问:

上面可以看到,当设置AP为11的时候,无论S位和R位如何设置,都是可读可写的。现在就设置AP为11即可。0b11=0x3,所以实现代码(3<<10)即可。

最后建立页表的代码:

2.把建立好的表的基地址写入到CP15的c2寄存器(写入TTB)里:

根据芯片手册的资料,在C程序里嵌入汇编实现写入TTB的操作:

这样就把段的基地址写入到CP15的c2寄存器里,完成了设置TTB的工作。

3.接着是使能MMU:

芯片资料ARM Architecture Reference Manual.pdf里:

底板手册资料:

可以看到要使能MMU需要将CP15的c1寄存器的最后一位置为1即可。

实现:

注意:到这里其实我们还没设置好,这是因为我们在前面的学习知道:段是有访问权限的,它的访问权限是由AP这两位决定的。然后由于段是属于某一个域的,而每一个域的访问权限是由CP15的c3寄存器决定的。

上面可以看到如果我们把CP15的c3寄存器的值设置为11的时候,访问就不需要权限,所以就设置c3为全1即可.

到这里其实还没完成,因为前面我们只是完成了GPIO到物理内存的映射,没有内存虚拟地址到物理地址的映射。接下来就是实现虚拟地址到物理地址的映射。还有在C程序里使用的都是虚拟地址,而不是物理地址。

我们接下来是以虚拟地址和物理地址一致的值进行映射操作:

实现代码:

接下来main.c代码实现:

编译make后烧写到开发板:

时间: 2024-10-11 19:31:19

3.MMU的配置和使用的相关文章

第三十五天:Tiny4412驱动开发之配置MMU

MMU表示内存管理单元,负责虚拟内存映射到物理内存. 虚拟地址映射到物理地址的关键是构建映射表.MMU就是利用映射表格将虚拟地址转换成物理地址.虚拟地址在32系统中为4G,地址占4字节,如果映射表格中虚拟地址和物理地址是一一对应的关系,一条记录就占8字节,那么映射表就要32G.这明显是不合理的. 于是通过二级映射解决这个问题.地址共32位,把前12位作为基地址,后20位作为偏移量,将虚拟地址和物理地址作为的前12位一一对应,12位就是2的12次方为4k. 一条记录8字节,那么映射表格就只有32k

13.ARM协处理器的知识

13.ARM协处理器的知识 在处理器中有协处理器来辅助处理器完成部分功能的,主要是协助作用. 协处理器: 协处理器用于执行特定的处理任务,如:数学协处理器可以控制数字处理,以减轻处理器的负担.ARM可支持多达16个协处理器,其中CP15是最重要的一个. ? 在ARM9.ARM11.cortexa8等核中,CP15的功能都是一样的. 在ARM11核的文档看到图1-1: The section gives an overall view of the system control coprocess

powerpc-linux内核start_kernel之前启动分析(1)-开门见山

前段时间做了公司内核从arm处理器到一款powerpc处理器的移植(公司处理器换核,前期用FPGA仿真板进行了芯片验证和软件移植),借这个机会也学习了powerpc处理器的一些知识,对powerpc的内核启动也有所了解. 完成了arm版本内核start_kernel之前汇编分析,也想尝试写几篇文章对powerpc的启动进行分析,与大家分享. 在分析之前,首先罗嗦几句,这次移植工作之前我从来没有接触过powerpc相关的知识,因此是作为一个初学者来完成这次移植工作的. 初学者要完成一次完整的内核移

CPU-如何开始在新的CPU上编程

https://mp.weixin.qq.com/s/rNXDPR53m--XuvJLE1CDvA 新在哪里?从未接触过.比如之前一直在x86.ARM上写程序,C比较多,汇编也调过.MIPS可能零零星星也看过几篇资料.然后来了个用PowerPC的项目,或者RISC-V的项目,茫茫然无可奈何不知所措. 这里介绍CPU相关的概念,需要哪些资料,可以没有概念上的缺口,踏踏实实的开始为一个于己而言全新的CPU编写代码. 一. CPU CPU即中央处理器,执行一系列指令,完成处理任务.CPU即是指令执行器

课标2-2-1-3 :MMU配置与使用

void create_page_table(void){ unsigned long *ttb = (unsigned long *)0x20000000; unsigned long vaddr, paddr; vaddr = 0xA0000000;                                                                        //  虚拟地址 paddr = 0xE0200000;                      

【转】高通平台android 环境配置编译及开发经验总结

原文网址:http://blog.csdn.net/dongwuming/article/details/12784535 1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通开发板上烧录文件系统 建立高通平台开发环境 高通平台,android和 modem 编译流程分析 高通平台 7620 启动流程分析 qcril 流程分析,设置sim卡锁 python scons 语法学习 Python 语言之 scons 工具流程分析: 1.2 搭建高通平台环境开发环境 高通and

u-boot分析(十一)----MMU简单分析|u-boot分析大结局|学习规划

u-boot分析(十一) 通过前面十篇博文,我们已经完成了对BL1阶段的分析,通过这些分析相信我们对u-boot已经有了一个比较深入的认识,在BL2阶段大部分是对外设的初始化,并且有的我们已经分析过,在这篇博文我打算对BL1阶段没有分析到的重要外设进行简单分析,并结束对u-boot的分析,同时对后面自己的博文进行简单的规划,希望有兴趣的朋友跟我一块学习和研究嵌入式. 今天我们会分析到以下内容: 1.      MMU分析(内容出自我以前的博客) 2.      裸机开发总结 3.      后期

u-boot分析(五)----I/D cache失效|关闭MMU和cache|关闭看门狗

u-boot分析(五) 上篇博文我们按照210的启动流程,对u-boot启动中的设置异常向量表,设置SVC模式进行了分析,今天我们继续按照u-boot的启动流程对以下内容进行分析. 今天我们会用到的文档: Arm9内核手册:http://download.csdn.net/detail/wrjvszq/8358867 Arm11内核手册:http://download.csdn.net/detail/wrjvszq/8358877 Arm a8内核手册:http://download.csdn.

基于oSIP开源库PartySIP服务器之uClibc库的移植和配置[二]

*************************************************************************************************************************** 作者:EasyWave                                                时间:2014.09.19 类别:Linux应用-SIP代理服务器PartySIP         声明:转载,请保留链接 注意:如有