TF-M BL2 RAM 布局

文章目录

MPS2 AN521 BL2 RAM 布局

RAM 地址

BL2 使用 Secure RAM alias,基地址是 S_RAM_ALIAS_BASE = 0x38000000。region_defs.h 将 BL2 的 RAM 定义为:

text 复制代码
BL2_DATA_START = 0x38000000
BL2_DATA_SIZE  = 0x00200000

因此 BL2 可用 RAM 范围是 0x38000000 到 0x381FFFFF,总大小 2 MB。链接脚本 platform/ext/common/gcc/tfm_common_bl2.ld 中的 MEMORY 定义如下:

ld 复制代码
RAM (rwx) : ORIGIN = BL2_DATA_START, LENGTH = BL2_DATA_SIZE

已分配区域

以下地址和大小来自当前 build_an521_ninja/bin/bl2.map。表中的地址是运行时 VMA;.data 的初始值仍然保存在 Flash 中,启动代码会把它复制到表中的 RAM 地址。

段 RAM 起始地址 大小 RAM 结束地址 作用
.tfm_bl2_shared_data 0x38000000 0x400,1 KB 0x380003FF BL2 与 TF-M 之间的共享数据
.data 0x38000400 0x48 0x38000447 已初始化的可写全局变量
.bss 0x38000448 0x36C0 0x38003B07 未初始化的全局变量和静态变量
对齐填充 0x38003B08 0x18 0x38003B1F 段对齐空间
.msp_stack 0x38003B20 0x1800,6 KB 0x3800531F BL2 主栈
.heap 0x38005320 0x1000,4 KB 0x3800631F BL2 堆

.heap 之后直到 0x381FFFFF 的空间没有被当前 BL2 链接结果使用。

各段内容

共享数据

链接脚本预留 .tfm_bl2_shared_data,大小由 BOOT_TFM_SHARED_DATA_SIZE 定义为 0x400。该区域位于 RAM 起始位置,用于 BL2 和后续 TF-M 固件共享启动数据,不能作为普通 BL2 变量空间使用。

.data

.data 使用 > RAM AT > FLASH 放置。当前 map 中的地址如下:

text 复制代码
VMA:0x38000400
LMA:0x1000C080
大小:0x48

LMA 是镜像中保存初始值的位置,VMA 是 BL2 运行时访问变量的位置。启动代码根据链接脚本生成的 copy table,将 .data 从 LMA 复制到 VMA。

.bss

.bss 不在 Flash 中保存初始数据,启动代码根据 zero table 将这段 RAM 清零。当前 .bss 中可以看到以下较大的对象:

对象 大小
mbedtls_mem_buf 0x2000,8 KB
sector_buffers 0x1000,4 KB
MCUboot loader 状态和临时缓冲区 由多个对象组成

镜像验签使用的 mbedTLS 缓冲区、MCUboot 的镜像加载状态和 Flash sector 缓冲区都在 .bss 中分配。

栈和堆

region_defs.h 定义 BL2 的主栈大小为 BL2_MSP_STACK_SIZE = 0x1800,堆大小为 BL2_HEAP_SIZE = 0x1000。链接脚本分别创建 .msp_stack 和 .heap,两者都是 NOLOAD 段,不需要从 Flash 装载内容。

当前链接结果中,栈顶为 0x38005320,堆顶为 0x38006320。Cortex-M 启动时使用栈顶作为初始 MSP。

相关文件

text 复制代码
platform/ext/target/arm/mps2/an521/partition/region_defs.h
platform/ext/common/gcc/tfm_common_bl2.ld
build_an521_ninja/bin/bl2.map
相关推荐
tyustli3 天前
TF-M 使用 make 构建
qemu·make·mcuboot·tf-m·mps2-an521
张一西1 个月前
QEMU 模拟器学习(二)之 USB 设备之BOT & UAS协议
qemu·uas·bot
张一西1 个月前
QEMU 模拟器学习(二)之 USB 设备模拟与协议学习
qemu·usb·uas·bot
shimly1234561 个月前
(undone) 解析 qemu-6.0.0 源码 (4) 添加 niubi board - 2
qemu
冰山一脚20131 个月前
cirrus显卡驱动笔记
qemu·drm
shimly1234561 个月前
(done) 解析 qemu-6.0.0 源码 (2) 寻找入口函数 main
qemu
ggaofeng2 个月前
QEMU中硬盘用哪种协议读写速度快
qemu·磁盘类型
GKxx2 个月前
在 HarmonyOS 上给 QEMU 搭一个最小 aarch64 Linux guest(内核 + busybox initramfs)
linux·华为·qemu·harmonyos·鸿蒙·鸿蒙pc
k4m7v2pz3 个月前
在Arch Linux笔记本上搭建ReactOS 0.4.15虚拟机:从Mac远程开发调试Windows XP风格应用的完整指南
qemu·虚拟机·kvm·交叉编译·mingw-w64·reactos