内存管理单元 (MMU)
IC:
概述
内存管理单元 (Memory Management Unit,MMU) 是 Arm Cortex-A 系列 MCU 提供的一个组件,通过虚拟地址映射到物理地址来实现内存保护。MMU 的主要功能包括:
地址转换:将虚拟地址转换为物理地址,SDK中主要使用长描述符格式;
权限检查:检查访问权限,确保只有授权的进程可以访问特定的内存区域;
内存隔离:通过虚拟地址空间的划分,确保不同进程之间的内存隔离;
缓存管理:控制缓存的行为,以提高内存访问性能。
使用说明
系统 Boot 时,ameba_xlat_table.c
的 setupMMUTable()
函数会初始化 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 实际是同一个值。
备注
StartAddr_PA 和 size_bytes 的大小,都必须是 4KB 的整数倍;
在
setupMMUTable()
中添加的所有区域,只允许区域 A 完全覆盖区域 B,而不允许区域 A 和区域 B 存在其他形式的重叠;