内存管理单元 (MMU)

IC:

概述

内存管理单元 (Memory Management Unit,MMU) 是 Arm Cortex-A 系列 MCU 提供的一个组件,通过虚拟地址映射到物理地址来实现内存保护。MMU 的主要功能包括:

  • 地址转换:将虚拟地址转换为物理地址,SDK中主要使用长描述符格式;

  • 权限检查:检查访问权限,确保只有授权的进程可以访问特定的内存区域;

  • 内存隔离:通过虚拟地址空间的划分,确保不同进程之间的内存隔离;

  • 缓存管理:控制缓存的行为,以提高内存访问性能。

使用说明

系统 Boot 时,ameba_xlat_table.csetupMMUTable() 函数会初始化 MMU。 该函数中如下代码将 已定义的非缓存数据缓冲区 配置成非缓存数据缓冲区。

mmap_add_region((uint64_t)((int)__ram_nocache_start__), (uintptr_t)__ram_nocache_start__, (size_t)__ram_nocache_end__ - (size_t)__ram_nocache_start__,  \
            MT_NON_CACHEABLE | MT_RW | MT_NS);

如果想要借助 MMU 区域只读属性来辅助分析,可以在 setupMMUTable() 增加下述代码:

mmap_add_region((uint64_t)(StartAddr_PA, (uintptr_t)StartAddr_VA, (size_t)size_bytes, MT_MEMORY | MT_RO | MT_NS);

由于 SDK 中虚拟地址和物理地址一一对应,所以 StartAddr_PA 和 StartAddr_VA 实际是同一个值。

备注

  1. StartAddr_PA 和 size_bytes 的大小,都必须是 4KB 的整数倍;

  2. setupMMUTable() 中添加的所有区域,只允许区域 A 完全覆盖区域 B,而不允许区域 A 和区域 B 存在其他形式的重叠;