1. 内部存储器映射OCRAM 详细布局 (启动阶段)2. 外部DDR3内存映射 (512MB)3. U-Boot详细内存布局 (0x87800000-0x87FFFFFF)4. 布局设计原因分析4.1 起始地址选择原因4.2 组件间距离设计4.3 异常向量表地址原因4.4 布局优势
The memory system consists of these components:
- Level 1 cache—32 KB instruction, 32 KB data cache
- Level 2 cache—unified instruction and data (128 KB)
- On-Chip Memory:
- Boot ROM, including High-Assurance Boot (HAB, 96 KB)
- Internal fast access RAM (OCRAM, 128 KB)
- External memory interfaces:
- 16-bit LP-DDR2, 16-bit DDR3-400, and LV-DDR3-400
- 8-bit NAND-flash, including support for Raw MLC/TLC, 2 KB ,4 KB, and 8 KB page size, BA-NAND, PBA-NAND, LBA-NAND, OneNAND™, and others
- BCH ECC up to 40 bits
- 16-bit NOR flash
- 16-bit PSRAM, Cellular RAM
- Dual-channel/single-channel QuadSPI flash
1. 内部存储器映射
| 起始地址 | 结束地址 | 容量 | 内容 | 说明 | 
| 0x00000000 | 0x00017FFF | 96KB | BootROM Code | CPU上电后执行的固化代码 | 
| 0x00900000 | 0x0091FFFF | 128KB | OCRAM (On-Chip RAM) | 内部高速缓存,启动时使用 | 
OCRAM 详细布局 (启动阶段)
| 起始地址 | 结束地址 | 容量 | 内容 | 用途 | 
| 0x00900000 | 0x00903FFF | 16KB | SPL Code | Secondary Program Loader | 
| 0x00904000 | 0x00907FFF | 16KB | SPL Stack | SPL运行时栈空间 | 
| 0x00908000 | 0x0091BFFF | 80KB | SPL Heap/BSS | SPL数据段和堆空间 | 
| 0x0091C000 | 0x0091FFFF | 16KB | BootROM数据 | ROM代码工作区域 | 
2. 外部DDR3内存映射 (512MB)
| 起始地址 | 结束地址 | 容量 | 内容 | 说明 | 
| 0x80000000 | 0x8007FFFF | 512KB | 保留区域 | 系统保留,避免冲突 | 
| 0x80080000 | 0x8077FFFF | ~119MB | Linux Kernel Image | 内核镜像加载区域 | 
| 0x80800000 | 0x8087FFFF | 512KB | Kernel解压缓冲区 | 内核解压临时空间 | 
| 0x83000000 | 0x8307FFFF | 512KB | Device Tree Blob | 设备树二进制文件 | 
| 0x84000000 | 0x85FFFFFF | 32MB | Initial Ramdisk | 初始化RAM磁盘 | 
| 0x87800000 | 0x87FFFFFF | 8MB | U-Boot运行区域 | 详见下表 | 
| 0x88000000 | 0x9FFFFFFF | 384MB | Linux运行时内存 | 内核运行时动态分配 | 
3. U-Boot详细内存布局 (0x87800000-0x87FFFFFF)
| 起始地址 | 结束地址 | 容量 | 内容 | 详细说明 | 
| 0x87800000 | 0x8780001F | 32B | 异常向量表 | ARM异常向量表(8个向量×4字节) | 
| 0x87800020 | 0x878003FF | 992B | 异常处理代码 | 各种异常的处理函数 | 
| 0x87800400 | 0x8785FFFF | ~384KB | U-Boot主代码段(.text) | 主要功能代码 | 
| 0x87860000 | 0x8787FFFF | 128KB | 只读数据段(.rodata) | 常量、字符串等 | 
| 0x87880000 | 0x878BFFFF | 256KB | 数据段(.data) | 已初始化全局变量 | 
| 0x878C0000 | 0x878FFFFF | 256KB | BSS段(.bss) | 未初始化全局变量 | 
| 0x87900000 | 0x879FFFFF | 1MB | 堆空间(Heap) | 动态内存分配 | 
| 0x87A00000 | 0x87BFFFFF | 2MB | 栈空间(Stack) | 函数调用栈 | 
| 0x87C00000 | 0x87DFFFFF | 2MB | 环境变量区 | U-Boot环境变量存储 | 
| 0x87E00000 | 0x87EFFFFF | 1MB | 设备树临时区 | 设备树修改缓冲区 | 
| 0x87F00000 | 0x87FFFFFF | 1MB | 命令缓冲区 | 命令行解析和缓存 | 
4. 布局设计原因分析
4.1 起始地址选择原因
BootROM (0x00000000)
- 原因: 硬件固定,CPU复位后PC指向0x00000000
- 特点: 不可修改,厂商固化代码
OCRAM (0x00900000)
- 原因: 内部高速RAM,无需DDR初始化即可使用
- 用途: 启动早期阶段,DDR未初始化前的代码执行
Kernel Image (0x80080000)
- 原因:
- 避开DDR起始地址,防止被覆盖
- 512KB偏移给系统保留空间
- 方便内核重定位和解压
U-Boot (0x87800000)
- 原因:
- 位于DDR高地址区域,避免与内核冲突
- 120MB偏移确保足够的内核空间
- 8MB空间满足U-Boot所有功能需求
4.2 组件间距离设计
4.3 异常向量表地址原因
0x87800020选择依据:
- 硬件要求: ARM异常向量必须32字节对齐
- 性能考虑: 位于DDR中,访问速度快
- 安全隔离: 远离内核和用户数据
- 调试便利: 固定地址便于开发调试
- 兼容性: 符合ARM AAPCS调用约定
4.4 布局优势
- 启动效率: OCRAM→DDR平滑过渡
- 内存保护: 各组件间充足间隔,防止覆盖
- 扩展性: 为内核和应用预留充足空间
- 调试友好: 固定地址便于问题定位
- 安全性: 关键代码位于高地址,不易被意外修改






