在 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文章
754瀏覽量
69105 -
Linux
+關注
關注
88文章
11758瀏覽量
219009 -
內存
+關注
關注
9文章
3209瀏覽量
76358
發布評論請先 登錄
瑞芯微DDR Bin工具詳解:輕松配置DDR參數,助力系統穩定運行
【「Linux 設備驅動開發(第 2 版)」閱讀體驗】+讀深入理解Linux內核內存分配
Hbirdv2移植到Nexys4 DDR和Nexys Video開發板
如何為蜂鳥添加DDR內存擴展
DDR存儲拓展教程
DDR200T中DDR的使用與時序介紹
E203分享之DDR擴展方案實施流程(下)
DDR200T中的DDR3的使用配置
AD設計DDR3時等長設計技巧
Linux系統查看及修改設備型號信息,觸覺智能RK3562開發板演示
Linux修改uboot啟動延時方法詳細攻略,觸覺智能RK3568開發板演示
Linux中如何修改ddr的分配容量
評論