uboot 内存地址分配与临时数据存储策略解析

1. 初识uboot内存布局

刚接触嵌入式开发时,我最困惑的就是:通过tftp下载的bin文件到底该放在内存的哪个位置?这个问题看似简单,却涉及到uboot内存管理的核心机制。以OrangePi PC(H3芯片)为例,当我们执行bdinfo命令时,会看到类似这样的输出:

DRAM bank = 0x00000000 -> start = 0x40000000 -> size = 0x40000000

这段信息告诉我们,开发板的物理内存起始地址是0x40000000,总大小为1GB(0x40000000字节)。但uboot并不会使用全部内存空间,它像一位精打细算的管家,会把内存划分成不同的功能区。

关键发现:通过对比/proc/iomem的内核输出可以验证,0x40000000-0x7FFFFFFF确实是系统可用的物理内存范围。这个地址范围不是随意设定的,而是由SoC芯片手册的Memory Mapping章节明确规定。比如全志H3芯片的DRAM物理地址范围就是0x40000000-0xBFFFFFFF,最大支持2GB内存。

2. uboot自身的藏身之处

你一定好奇:uboot自己会被加载到内存的哪个位置?是紧挨着起始地址0x40000000吗?通过分析uboot源码的链接脚本,真相逐渐浮出水面。

在uboot的编译配置中,有个关键宏CONFIG_SYS_TEXT_BASE,它定义了代码段的入口地址。例如在OrangePi的配置中:

CONFIG_SYS_TEXT_BASE=0x4a000000

arm-linux-readelf -h u-boot查看编译生成的uboot镜像,会看到Entry point address确实指向0x4a000000。这意味着uboot像一位先遣队员,选择在内存的中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值