Lazy loaded image
IMX6ULL 完整内存映射布局表
Words 947Read Time 3 min
2025-9-11
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选择依据:
  1. 硬件要求: ARM异常向量必须32字节对齐
  1. 性能考虑: 位于DDR中,访问速度快
  1. 安全隔离: 远离内核和用户数据
  1. 调试便利: 固定地址便于开发调试
  1. 兼容性: 符合ARM AAPCS调用约定

4.4 布局优势

  1. 启动效率: OCRAM→DDR平滑过渡
  1. 内存保护: 各组件间充足间隔,防止覆盖
  1. 扩展性: 为内核和应用预留充足空间
  1. 调试友好: 固定地址便于问题定位
  1. 安全性: 关键代码位于高地址,不易被意外修改
 
上一篇
宏的用法
下一篇
Guide to Linux System

Comments
Loading...