MMU = memory management unit

1、把虚拟地址转化成物理地址,防止地址冲突

2、访问权限管理

MMU把一个虚拟地址的20位到31位作为取出来,建立

一张表,叫做translation table base,也叫做一级页表

索引,根据每个地址的最后两位进行分类,在进行段式

转换、粗叶地址转换和细叶地址转换。

段式转换是将最后两位是10的虚拟地址的高12位作为基

地址,剩余20位作为偏移地址

细叶地址转换是将最后两位是11的虚拟地址的高12位作为

一级页表,第10到第19位作为二级页表,0到11位作为偏移

地址。

#define GPBCON (volatile unsigned long *)0xA0000010
#define GPBDAT (volatile unsigned long *)0xA0000014 #define MMU_FULL_ACCESS (3<<10)  // 访问权限
#define MMU_DOMAIN    (0<<5)  // 属于哪个域
#define MMU_SPECIAL (1<<4)  // 必须是1
#define MMU_CACHEENABLE (1<<3)  // cacheable
#define MMU_BUFFERABLE (1<<2)  // bufferable
#define MMU_SECTION (2<<0)  // 表示这是段描述符 #define SECDESC (MMU_SECTION|MMU_SPECIAL|MMU_SPECIAL|MMU_FULL_ACCESS)
#define SECDESC_WB (MMU_SECTION|MMU_SPECIAL|MMU_SPECIAL|MMU_FULL_ACCESS|MMU_CACHEENABLE|MMU_BUFFERABLE) void creat_page_table()
{
unsigned long *ttb = (unsigned long *)0x30000000;
unsigned long vaddr,paddr; vaddr = 0xA0000000;
paddr = 0x56000000; *(ttb + (vaddr >> )) = ((paddr & 0xfff00000)|SECDESC); vaddr = 0x30000000;
paddr = 0x30000000; while(vaddr += 0x34000000)
{
*(ttb + (vaddr >> )) = ((paddr & 0xfff00000)|SECDESC);
vaddr += 0x10000;
paddr += 0x10000;
}
} void mmu_init()
{
__asm__(
  //设置TTB
"ldr r0, =0x3000000\n"
"mcr p15,0,r0,c2,c0,0\n"   //不进行权限检查
"mvn r0,#0\n"
"mcr p15,0,r0,c3,c0,0\n"   //使能MMU
"mrc p15,0,r0,c1,c0,0\n"
"orr r0,r0,#0x0001\n"
"mcr p15,0,r0,c0,c1,0\n"
:
:
);
} int gboot_main()
{
creat_page_table();
mmu_init(); *(GPBCON) = 0x15400;
*(GPBDAT) = 0x0; return ;
}

MMU功能解析、深入剖析、配置与使用的更多相关文章

  1. [国嵌攻略][047][MMU功能解析]

    MMU功能解析 1.Memory Management Unit(存储器管理单元) 2.两个进程读取同一个地址能读到不同的值.因为进程访问的是虚拟地址,通过MMU转换成不同的物理地址.不同的进程通过M ...

  2. springmvc 项目完整示例06 日志–log4j 参数详细解析 log4j如何配置

    Log4j由三个重要的组件构成: 日志信息的优先级 日志信息的输出目的地 日志信息的输出格式 日志信息的优先级从高到低有ERROR.WARN. INFO.DEBUG,分别用来指定这条日志信息的重要程度 ...

  3. Lemon OA第2篇:功能解析方法

    Lemon OA,整个系统功能也算是比较丰富,OA的很多功能都能看见影子,虽然做得不是很强大 接触Lemon OA,起源于Activiti的学习热情,既然这样,研究Lemon OA的目标有3: 1.L ...

  4. java -D 参数功能解析

    我们都知道在启动tomcat或直接执行java命令的时候可以通过参数-XX等来配置虚拟机的大小,同样,也应该留意到java -Dkey=value的参数.那么这个参数是什么作用呢? 使用案例 其实,在 ...

  5. 菜鸟nginx源代码剖析 配置与部署篇(一) 手把手实现nginx &quot;I love you&quot;

    菜鸟nginx源代码剖析 配置与部署篇(一) 手把手配置nginx "I love you" Author:Echo Chen(陈斌) Email:chenb19870707@gm ...

  6. SQL Server 数据加密功能解析

    SQL Server 数据加密功能解析 转载自: 腾云阁 https://www.qcloud.com/community/article/194 数据加密是数据库被破解.物理介质被盗.备份被窃取的最 ...

  7. 微信小程序0.11.122100版本新功能解析

    微信小程序0.11.122100版本新功能解析   新版本就不再吐槽了,整的自己跟个愤青似的.人老了,喷不动了,把机会留给年轻人吧.下午随着新版本开放,微信居然破天荒的开放了开发者论坛.我很是担心官方 ...

  8. Unity5 新功能解析--物理渲染与standard shader

    Unity5 新功能解析--物理渲染与standard shader http://blog.csdn.net/leonwei/article/details/48395061 物理渲染是UNITY5 ...

  9. 【原创】Matlab中plot函数全功能解析

    [原创]Matlab中plot函数全功能解析 该帖由Matlab技术论(http://www.matlabsky.com)坛原创,更多精彩内容参见http://www.matlabsky.com 功能 ...

随机推荐

  1. flutter 延时函数delay Loading页面

    loading 页面 import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class Lo ...

  2. AES256位加密

    目录 1.    算法简介 2.    算法流程 2.1 扩展密钥 2.2 轮密钥加 2.3 字节代替 2.4 行位移 2.5 列混淆 3.    总结 附录A 运算示例 1.算法简介高级加密标准(英 ...

  3. JavaScript高级编程学习笔记(第三章之一)

    继续记笔记,JavaScript越来越有意思了. 继续... 第三章:JavaScript基础 ECMAScript语法在很大程度上借鉴了C和其它类似于C的语言,比如Java和Perl. 大小写敏感: ...

  4. 【HANA系列】SAP HANA SQL查找字符串位置

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL查找字符 ...

  5. 生成器send方法、递归、匿名函数、内置函数

    今日内容 1.生成器的send方法. 2.递归:函数自己调用自己 3.匿名函数 4.内置函数 生成器send方法 send的工作原理 1.send发生信息给当前停止的yield 2.再去调用__nex ...

  6. @lazy注解

    默认情况下,Spring会在应用程序上下文的启动时创建所有单例bean 主要针对单实例 Bean ,容器启动时不创建对象,仅当第一次使用Bean的时候才创建 @Lazy @Bean public Pe ...

  7. TensorFlow自编码器(AutoEncoder)之MNIST实践

    自编码器可以用于降维,添加噪音学习也可以获得去噪的效果. 以下使用单隐层训练mnist数据集,并且共享了对称的权重参数. 模型本身不难,调试的过程中有几个需要注意的地方: 模型对权重参数初始值敏感,所 ...

  8. JDK下bin文件夹常见几个可执行文件

    bin目录下有很多的可执行文件: java.exe:运行Java程序,就是启动JVM,让JVM执行指定的编译后的代码: javac.exe:Java的编译器,它用于把Java源码文件(以.java后缀 ...

  9. PTA(Basic Level)1041.考试座位号

    每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位.正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考 ...

  10. bochs 2.6.8 常用命令集合

    b addr 在物理地址处设置断点 addr为物理内存地址,不加段基址 lb 在线性地址处设置断点  addr为线性物理地址,不加基址 vb 在虚拟地址上设置断点 addr为段基址:偏移地址, cs段 ...