专题1-MMU-lesson3-MMU配置与使用
1、段方式MMU

利用虚拟地址然后找到物理地址,通过物理地址访问到led,其过程如下:
一个段的大小是[19:0]总共有1M的地址空间。

从上面可知对应GPIO的段物理基地址是0x7f000000.那么要在虚拟地址当中找一个段与之形成对应关系,那么这个段是多少呢,假如是0xa0000000这个段,把这两个段关联起来,那么通过页表来建立这个关系。那么这个页表存放在内存的起始地址0x50000000。接下来就要建立该页表的页表项,要建立页表项就要知道它在页表当中的位置,它的位置实际上就是页表的起始地址+虚拟地址的高12位,

找具体表项里面的内容看芯片手册

[31:20]保存的段的物理基地址的高12位,[19:12]should be zero固定为零。[11:10]access permission控制访问权限的,[9]:也为0;[8:5]域,[4]固定为1,[3]是否使用cache

,[2]是否使用write buffer

,[1]固定为1,[0]固定为0.
表项中的第一个部分[31:20](0x7f000000&0xfff00000)
表项中的第二个部分[19:12]0b00000000
表项中的第三个部分[11:10]AP:
表项中的第四个部分[9]为0
表项中的第五个部分[8:5]domain
表项中的第六个部分[4]固定为1
表项中的第七个部分[3]c是否使用cache
表项中的第八个部分[2]b是否使用buffer
表项中的第九个部分[1:0]固定为0b10段的模式
域和AP来共同决定访问权限的:


有疑问???怎么把域写到对应页表项,是直接把对应数字域写到[8:5]位吗?比如要域3,将3写到[8:5]这里??,视频里面使用的域0,将0左移5位保存在[8:5]这里。那么下面的3-11表是什么意思??
ARM系统把整个的存储空间分为了16个域,每一个域可以有一个权限,你可以选择你访问的区域放到哪一个域里面去,假如我们放到我们的域0里面,放到哪个域都没有关系,那么放到域0之后,那么这个区域的访问权限怎么来决定呢,

可以将其设置为11对应table3-11
"mvn r0,#0\n"
"mcr p15,0,r0,c3,c0,0\n"把全部域设置为11,


由三个因素AP、S、R来决定的;S、R由域里面的S、R来决定的,在cp15里面每一个域都有一个S和R设置,当把AP设置为11的时候,就不管S和R了,都可以进行读写操作。
1、建立一级页表

建立好了页表项之后,要写入TTB。
2、写入TTB
TTB是保存在CP15的c2寄存器,
3、打开MMU

别忘了当我们打开了MMU之后,所有的地址都要经过一个转换的过程,不管是访问内存还是外设,故

代码如下:



专题1-MMU-lesson3-MMU配置与使用的更多相关文章
- Oracle研究专题:Oracle系统安装与配置
最近开始研究Oracle数据库,盖因公司的系统要么Oracle要么是mysql吧. 作为一个IT工作者,没有碰过Oracle是一件很匪夷所思得事情. 想到过去几年,乃至接触IT行业开始就只有玩过sql ...
- java架构之路(MQ专题)kafka集群配置和简单使用
前面我们说了RabbitMQ和RocketMQ的安装和简单的使用,这次我们说一下Kafka的安装配置,后面我会用几个真实案例来说一下MQ的真实使用场景.天冷了,不愿意伸手,最近没怎么写博客了,还请见谅 ...
- Maven 专题(八):配置(一)常用修改配置
修改配置文件 通常我们需要修改解压目录下conf/settings.xml文件,这样可以更好的适合我们的使用. 此处注意:所有的修改一定要在注释标签外面,不然修改无效.Maven很多标签都是给的例子, ...
- ok6410,mmu,内存管理
MMU 一.MMU学习 MMU其实就是一个页表.将虚拟地址通过查表的方式,对应到物理地址去他由一个或一组芯片组成,一般存在与协处理器中. 1.将虚拟地址转化为物理地址 2.访问权限管理 1.1得出mm ...
- 内存管理单元(MMU)和协处理器CP15介绍(转)
内存管理单元(MMU)和协处理器CP15介绍内存管理单元(MMU)介绍嵌入式系统中,存储系统差别很大,可包含多种类型的存储器件,如FLASH,SRAM,SDRAM,ROM等,这些不同类型的存储器件速度 ...
- MMU(why)
在ARM中,MMU几个主要作用: 1. I/D Cache 管理 -> 大幅提高代码运行效率. 2. PA/VA 重映射 -> 实现多进程内存空间映射. 3. 内存 ...
- u-boot移植(八)---代码修改---存储控制器--MMU
一.MMU介绍 1.1 虚拟地址与物理地址 建立两个应用程序,hello1.c和hello2.c,然后运行: hello1.c hello2.c 运行结果如下: 可以看到两个结果打印的地址是一样的,都 ...
- 硬件篇之MMU
<背景> MMU即内存管理单元(Memory Manage Unit),是一个与软件密切相关的硬件部件,也是理解linux等操作系统内核机制的最大障碍之一.可以说,不懂MMU使很多人一直停 ...
- u-boot分析(十一)----MMU简单分析|u-boot分析大结局|学习规划
u-boot分析(十一) 通过前面十篇博文,我们已经完成了对BL1阶段的分析,通过这些分析相信我们对u-boot已经有了一个比较深入的认识,在BL2阶段大部分是对外设的初始化,并且有的我们已经分析过, ...
- u-boot分析(五)----I/D cache失效|关闭MMU和cache|关闭看门狗
u-boot分析(五) 上篇博文我们按照210的启动流程,对u-boot启动中的设置异常向量表,设置SVC模式进行了分析,今天我们继续按照u-boot的启动流程对以下内容进行分析. 今天我们会用到的文 ...
随机推荐
- 转载论文关于fir滤波器的fpga实现
摘 要 本文讨论的FIR滤波器因其具有严格的线性相位特性而得到广泛的应用.在工程实践中,往往要求信号处理具有实时性和灵活性,本论文研究FIR的FPGA解决方案正体现了电子系统的微型化和单片化. 本论文 ...
- vuejs angularjs 框架的一些比较(vue项目重构四)
使用Angularjs和Vue.js对比 首先需要说明的是:现在默认angularjs指angular1.0+版本,angular默认指2.0以上版本.本文的名词也默认指定angular的1.0+版本 ...
- 在centos6.6中mysql5.5的编译、安装、配置
今天根据需求要在centos6.6上编译安装mysql5.5,因为以前编译安装过感觉很简单,但是今天还是出现了点小问题,所以把过安装过程总结了一下: 好像从mysql5.5开始编译安装mysql需要用 ...
- 在 Docker 中运行 MySQL
首先启用 Windows 10 的容器功能,然后去 Docker 的官网,下载安装包. 跟着安装程序走完流程,Docker 就在 Windows 上愉快的游起来啦~ 设置镜像地址 Docker 在创建 ...
- git常用命令小结
1.ssh连接方式 公钥生成ssh-keygen -t rsa -C "764432054@qq.com"在用户家目录下的.ssh目录下生成 id_rsa ,id_rsa.pub ...
- java使用array.copy复制数组
总结:理解理解.重要啊 package com.a; import java.util.Arrays; public class FJKDLS { public static void main(St ...
- java代码switch语句求分数等级
总结:从键盘输入分数----- 如果在0到100内,则输出等级 小于0或者是大于100都不能输出,这里用if-else条件判断. package com.c2; import java.util.Sc ...
- Mybatis拦截器介绍及分页插件
1.1 目录 1.1 目录 1.2 前言 1.3 Interceptor接口 1.4 注册拦截器 1.5 Mybatis可拦截的方法 1.6 利用拦截器进行分页 1.2 前言 拦截器的一 ...
- Java-Runoob:Java 对象和类
ylbtech-Java-Runoob:Java 对象和类 1.返回顶部 1. Java 对象和类 Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载 ...
- python学习(六) 抽象
6.1 懒惰即美德 斐波那契数列: >>> fabs = [0, 1]>>> for i in range(8): fabs.append(fabs[-1] + f ...