目录
- 1. 内存管理单元(MMU)基础
- 1.1 ARM MMU架构概述
- 1.2 TF-A中的MMU初始化流程
- 2. 页表配置与管理
- 3. 内存属性配置
- 4. 安全扩展支持
- 4.1 安全与非安全内存隔离
- 4.2 Stage-1与Stage-2转换
- 5. 动态内存管理
- 6. 常见问题与调试
- 7. 平台移植注意事项
- 7.1 平台特定配置
- 7.2 大物理地址(PA)支持

1. 内存管理单元(MMU)基础
1.1 ARM MMU架构概述
- ARMv8/ARMv9 MMU核心组件:
- 地址转换表管理单元(TTB)
- 转换旁路缓冲器(TLB)
- 属性控制单元(MAIR)
- 支持的多级页表机制:
- 4KB/16KB/64KB粒度页表
- 48位/52位虚拟地址空间
1.2 TF-A中的MMU初始化流程
bl1_plat_arch_setup() → enable_mmu_el3() → __enable_mmu()
2. 页表配置与管理
2.1 页表描述符格式
位域 | 功能描述 |
---|
[1:0] | 块/页表描述符类型 |
[63:52] | 物理地址高位(PA[47:36]) |
[47:12] | 输出地址(OA) |
[10] | AF(访问标志) |
[7] | AP(访问权限) |
[6] | NS(非安全位) |
2.2 TF-A页表初始化
mmap_add_region(BASE_ADDR, BASE_ADDR, SIZE, MT_DEVICE | MT_RW | MT_SECURE);
mmap_add_region(NS_DRAM_BASE, NS_DRAM_BASE, NS_DRAM_SIZE, MT_MEMORY | MT_RW | MT_NS);
3. 内存属性配置
3.1 MAIR寄存器配置
属性索引 | 内存类型 | 典型配置值 |
---|
0 | 设备内存(Device-nGnRnE) | 0x00 |
1 | 普通内存(Normal WB) | 0xFF |
// MAIR_EL3设置示例:
mov x0, #0x000000000000FF00
msr mair_el3, x0
3.2 内存类型与属性
- MT_DEVICE:设备内存(无缓存)
- MT_MEMORY:普通内存(Write-Back)
- MT_NON_CACHEABLE:非缓存内存
- MT_RO/MT_RW:只读/读写权限
4. 安全扩展支持
4.1 安全与非安全内存隔离
4.2 Stage-1与Stage-2转换
- EL3使用Stage-1转换
- 虚拟化环境下需配合Stage-2转换
5. 动态内存管理
5.1 运行时页表修改
int xlat_change_mem_attributes(uintptr_t base_va, size_t size, uint32_t attr)
{return xlat_arch_change_mem_attributes(base_va, size, attr);
}
5.2 TLB维护操作
6. 常见问题与调试
6.1 典型MMU故障分析
异常类型 | 可能原因 |
---|
Translation Fault | 页表项不存在/权限不足 |
Permission Fault | 访问权限配置错误 |
Alignment Fault | 非对齐访问 |
6.2 MMU调试技巧
7. 平台移植注意事项
7.1 平台特定配置
const mmap_region_t plat_mmap[] = {MAP_REGION_FLAT(DEVICE0_BASE, DEVICE0_SIZE, MT_DEVICE | MT_RW | MT_SECURE),MAP_REGION_FLAT(DRAM_BASE, DRAM_SIZE, MT_MEMORY | MT_RW | MT_SECURE),{0}
};
7.2 大物理地址(PA)支持
- 配置
ARM_PA_BITS_48
或ARM_PA_BITS_52
- 检查
ID_AA64MMFR0_EL1.PARange
字段
注意:实际MMU配置需根据具体平台安全需求调整,建议参考ARM架构参考手册(ARM DDI 0487)和TF-A官方文档。