在 U-Boot 中修改 DDR 容量通常涉及以下几个步骤,尤其是在嵌入式系统中,当更换或升级DDR内存芯片后:
硬件配置更新:
如果你实际更换了物理DDR模块以增大容量,首先要确保新的DDR模块与SoC兼容,并且主板的电路设计能够支持新内存的规格。
2. 设备树(Device Tree)调整:
对于基于Device Tree的Linux内核系统,需要在设备树(DTS或DTB文件)中正确描述DDR内存的大小和参数。这意味着要更新内存节点中的大小信息和其他相关属性,以便内核能识别并使用全部的新内存。
3. U-Boot 配置及编译:
在U-Boot源代码中,如果存在DDR初始化相关的代码或者宏定义,需要检查并根据实际情况修改这些配置,如DDR控制器的设置、时序参数等。
重新编译U-Boot,确保它包含对更大容量DDR的支持。
4. 启动参数调整:
在某些情况下,可能需要通过U-Boot环境变量来传递给内核正确的内存大小参数,例如修改bootargs环境变量中的mem=部分来指定系统的总内存大小。
5. 保存环境变量:
修改完启动参数后,务必用saveenv命令将新的环境变量保存到非易失性存储器中,比如SPI Flash上的环境变量分区。
以下介绍rk是如何修改DDR容量的:
开机时DDR初始化代码会把DDR容量传递给U-Boot,U-Boot会去除一些安全内存后再传递给内核。用户可以在U-Boot阶段修改传递给内核的DDR容量。 传递范例:
......// 传递给内核的可用内存块(已去除安全内存块)。Adding bank: 0x00200000 - 0x08400000 (size: 0x08200000)Adding bank: 0x0a200000 - 0x40000000 (size: 0x35e00000)Total: 895.411 msStarting kernel ...[ 0.000000] Booting Linux on physical CPU 0x0
代码位置:
arch/arm/mach-rockchip/param.c
修改位置:
struct memblock *param_parse_ddr_mem(int *out_count){......// 这里就是ddr传递给U-Boot的容量信息。// 因为可能出现不连续的地址,所以会分块传递,分别指明各个内存块的起始地址和大小。// PS: 一般情况下都是连续内存,不会需要分块。for (i = 0, n = 0; i < count; i++, n++) {// 比如2GB容量(连续地址),则:count=1, base = 0,size = 0x80000000。// 用户调试时可以在这里按需修改。base = t->u.ddr_mem.bank[i];size = t->u.ddr_mem.bank[i + count];/* 0~4GB */if (base < SZ_4GB) {mem[n].base = base;mem[n].size = ddr_mem_get_usable_size(base, size);if (base + size > SZ_4GB) {n++;mem[n].base_u64 = SZ_4GB;mem[n].size_u64 = base + size - SZ_4GB;}} else {/* 4GB+ */mem[n].base_u64 = base;mem[n].size_u64 = size;}assert(n < count + MEM_RESV_COUNT);}......}
-
DDR
+关注
关注
11文章
764浏览量
69676 -
Linux
+关注
关注
88文章
11860浏览量
219834 -
内存
+关注
关注
9文章
3258浏览量
76597
发布评论请先 登录
容量与性能兼备,绫龙DDR5 6000 C28 24GB内存评测
瑞芯微DDR Bin工具详解:轻松配置DDR参数,助力系统稳定运行
【「Linux 设备驱动开发(第 2 版)」阅读体验】+读深入理解Linux内核内存分配
高速DDR开关TS3DDR4000的技术解析与应用实践
Hbirdv2移植到Nexys4 DDR和Nexys Video开发板
如何为蜂鸟添加DDR内存扩展
DDR存储拓展教程
DDR200T中DDR的使用与时序介绍
E203分享之DDR扩展方案实施流程(下)
DDR200T中的DDR3的使用配置
AD设计DDR3时等长设计技巧
涨价!部分DDR4与DDR5价差已达一倍!
Linux系统查看及修改设备型号信息,触觉智能RK3562开发板演示
Linux修改uboot启动延时方法详细攻略,触觉智能RK3568开发板演示
Linux中如何修改ddr的分配容量
评论