在enable mmu之前可以使用mmu吗? 很多人也许都没用思考过这个问题,或者认为太简单了,这不废话吗,在enable mmu之前,怎么可能使用mmu呢…

其实这就是大家的一个误区。事实上只要Core一上电,MMU就可以使用的,只不过是如果你没用开启SCTLR.M比特,PE发起的读写不会自动经过MMU翻译,当然这个时候你是可以手动执行AT指令进行翻译的,在翻译的时候如果你没用配置也页表、基地址、TCR等寄存器,MMU在翻译也会报错。

下面我们以optee os代码为例,展示一下在enable MMU之前,就使用了地址翻译的这种情况:

 void core_init_mmu_regs(struct core_mmu_config *cfg){uint64_t ips = get_physical_addr_size_bits();uint64_t mair = 0;uint64_t tcr = 0;cfg->ttbr0_el1_base = virt_to_phys(l1_xlation_table[0][0]);cfg->ttbr0_core_offset = sizeof(l1_xlation_table[0][0]);mair  = MAIR_ATTR_SET(ATTR_DEVICE, ATTR_DEVICE_INDEX);mair |= MAIR_ATTR_SET(ATTR_IWBWA_OWBWA_NTR, ATTR_IWBWA_OWBWA_NTR_INDEX);cfg->mair_el1 = mair;tcr = TCR_RES1;tcr |= TCR_XRGNX_WBWA << TCR_IRGN0_SHIFT;tcr |= TCR_XRGNX_WBWA << TCR_ORGN0_SHIFT;tcr |= TCR_SHX_ISH << TCR_SH0_SHIFT;tcr |= ips << TCR_EL1_IPS_SHIFT;tcr |= 64 - CFG_LPAE_ADDR_SPACE_BITS;/* Disable the use of TTBR1 */tcr |= TCR_EPD1;/** TCR.A1 = 0 => ASID is stored in TTBR0* TCR.AS = 0 => Same ASID size as in Aarch32/ARMv7*/cfg->tcr_el1 = tcr;}

在enable mmu之前可以使用mmu了相关推荐

  1. [mmu/cache]-ARM MMU的学习笔记-一篇就够了

    ★★★ 个人博客导读首页-点击此处 ★★★ . 说明: 在默认情况下,本文讲述的都是ARMV8-aarch64架构,linux kernel 64位 . 相关文章 1.ARM cache的学习笔记-一 ...

  2. [mmu/cache]-ARMV8 MMU内存管理中的Memory attributes和Cache policies

    快速链接: .

  3. [mmu/cache]-ARM MMU/TLB的学习笔记和总结

    快速链接: .

  4. 内存管理单元——MMU

    一.基本概念介绍 MMU是Memory Management Unit的缩写,中文名是内存管理单元,有时称作分页内存管理单元(英语:paged memory management unit,缩写为PM ...

  5. 【嵌入式开发】 ARM 关闭 MMU ( 存储体系 | I/D-Cache | MMU | CP15 寄存器 | C1 控制寄存器 | C7 寄存器 | 关闭 MMU )

    一. MMU 概念 1. ARM 存储 (1) ARM 的存储体系 (2) Cache 由来 (3) Cache 定义 2. MMU (1) 虚拟地址 与 物理地址 (2) MMU 作用 及 关闭原因 ...

  6. CE5.0 - eboot汇编Startup.s中MMU设置流程详细分析

    CE5.0 - eboot汇编Startup.s中MMU设置流程详细分析   以下为SMDK开发板startup.s部分启动代码.   ;------------------------------- ...

  7. Linux内存管理:MMU那些事儿

    <ARM SMMU原理与IOMMU技术("VT-d" DMA.I/O虚拟化.内存虚拟化)> <Linux内存管理:分页机制> <Linux内存管理:内 ...

  8. 深入了解Linux内核MMU管理机制

    MMU:存储器管理单元 *虚拟内存空间到物理存储空间的映射.在ARM中采用了页式虚拟内存管理.它把虚拟地址空间分为一个个大小固定的块,每一块称为一页,把物理内存的地址空间也分成同样大小的页.页的大小可 ...

  9. 04.ARM-mini2440-内存管理单元(MMU)

    ARM-mini2440-内存管理单元MMU 建立映射 程序解析 04.ARM-mini2440-内存管理单元(MMU) 图中第1种没有使用MMU 图中第2种使用MMU Created with Ra ...

最新文章

  1. static_cast
  2. 14、ORACLE下的基本SQL操作
  3. Java 主流垃圾收集器
  4. java 假设当前时间_Java中与日期和时间相关的类和方法
  5. 川菜中,你觉得哪道菜能称为“经典之菜”呢?
  6. template.js的用法
  7. python中run函数作用_python3多线程中如何改写run()函数?
  8. oracle用户权限管理
  9. vector容器,容量和大小的操作
  10. 手机怎么在线拍照翻译英语?这个方法不能不知道
  11. 深度ip转换器手机版app_优优手机管家app手机版-优优手机管家免费下载v1.0.0
  12. 在windows10上安装texlive的参考文档
  13. 驱动启动时遇到:打开服务失败(错误码=6):句柄无效 解决方案
  14. [爬虫笔记01] Ajax爬取今日头条文章
  15. Altium Designer入门学习笔记和快捷键整理
  16. 使用Java动态数组的实现
  17. 三种批量插入数据的方法
  18. 数据库mysql---NUMERIC数据类型
  19. 开关电源补偿环路设计(1):基础部分-以Buck 为例
  20. learining user's intrinsic and extrinsic interests for point of interest recommendation IJCAI17

热门文章

  1. 64位java怎么安装使用_如何在64位Windows计算机上安装rJava与64位R一起使用?
  2. 如何利用传感器控制数据中心能耗
  3. AI:2020年6月23日北京智源大会演讲分享之智能信息检索与挖掘专题论坛——09:55-10:40刘兵教授《Open-World AI and Continual Learning》
  4. Python语言学习之打印输出那些事:python输出图表和各种吊炸天的字符串或图画、版权声明(如README.md)等之详细攻略
  5. DL框架之TensorFlow:深度学习框架TensorFlow Core(低级别TensorFlow API)的简介、安装、使用方法之详细攻略
  6. BigData之matplotlib:爬虫2018年福布斯中国富豪榜进行数据统计分析,大数据告诉你一些不可思议的事情
  7. C# List的使用
  8. iview area 遇到的坑
  9. ubuntu14.04LS中安装sogouPingyin
  10. HDU 4630 No Pain No Game 树状数组+离线操作