13-U-Boot内存布局与链接脚本

发布时间:2026/9/25 5:07:22
13-U-Boot内存布局与链接脚本 文章目录一、概述二、形象比喻:一栋 128 层大楼的施工图三、RK3506 完整 DDR 内存布局四、关键地址宏定义五、链接脚本详解六、重定位(Relocation)机制重定位的必要性七、各内存区域的实际大小参考八、内存布局相关的常见问题📝 本章小结🏠 课后练习前面几章把 U-Boot 的架构、配置、编译都过了一遍,大家应该能独立把uboot.img编出来了。但编出来只是第一步–真要调启动问题、往 U-Boot 里加功能(比如 reserve 一块内存给 DSP、改 FIT 镜像加载地址),就绕不开一个核心问题:U-Boot 到底在内存的哪个位置?它的代码、数据、堆栈、环境变量各占哪一块?这就是本章的主题–内存布局与链接脚本。这一章是 U-Boot 阶段的"地基",后面设备树、启动流程那几章都会回头引用本章的地址。开讲前建议先在 U-Boot 命令行敲一遍bdinfo,对照着看内存布局会更有感觉。一、概述链接脚本(Linker Script,.lds)决定了 U-Boot 各段在内存中的精确位置。理解内存布局对于调试启动问题、添加新功能(如 reserve 内存区域、FIT 镜像加载)至关重要。说白了,链接脚本就是 U-Boot 在 DDR 里的"施工图纸"–代码段放哪、数据段放哪、堆栈放哪、环境变量放哪,全在这张图上。图看不懂,出了地址冲突的 bug 你就无从下手。这一章地址多、偏移多、容易晕,但只要把第三节的布局图记住,其他都是围绕它展开的。学完本章你将能回答:RK3506 的 DDR 内存是如何划分的(SPL/U-Boot/内核/DTB)?链接脚本如何组织.text、.data、.bss段?CONFIG_SYS_TEXT_BASE