一、內存分布
U-Boot 由前級 Loader 加載到 CONFIG_SYS_TEXT_BASE 地址,初始化時會探明當前系統的總內存容 量,32位平臺上認為最大4GB可用(但是不影響內核對容量的識別),64位平臺上認為所有內存都可用。然后通過一系列reserve_xxx() 接口從內存末尾往前預留需要的內存,最后把自己relocate到某段 reserve的空間上。內存整體使用布局如下,以ARM64為例(常規情況):

上表中的 Start Addr Offset 一欄表示基于 DDR base 的地址偏移;Fastboot地址和大小由配置決定:CONFIG_FASTBOOT_BUF_ADDR,CONFIG_FASTBOOT_BUF_SIZE。Video FB/U-Boot/Malloc/Board/Gd/Fdt/Sp 由頂向下根據實際需求大小來分配;64 位平臺:ATF 是 ARMv8 必需的,OP-TEE 是可選項;32 位平臺:只有 OP-TEE;kernel fdt/kernel/ramdisk 是 U-Boot 需要加載的固件地址,由 ENV_MEM_LAYOUT_SETTINGS 定義;Fastboot 功能需要的 buffer 地址和大小在 defconfig 中定義;OP-TEE 占據的空間需要根據實際需求而定,最大為 30M;其中 RK1808/RK3308 上 OP-TEE 放在低地址,不在 0x8400000;
部分宏定義偏移地址:
"scriptaddr=0x00c00000" "pxefile_addr_r=0x00e00000" "fdt_addr_r=0x0a100000" "kernel_addr_r=0x00280000" "kernel_addr_c=0x04080000" "ramdisk_addr_r=0x0a200000"
二、存儲布局
RK linux方案的存儲布局如下,Android方案除了boot/rootfs的定義跟linux平臺有差異,其它基本一致,可借鑒參考。

圖片來源:http://opensource.rock-chips.com/wiki_Partitions
三、基于rk3568的分區表
FIRMWARE_VER: 12.0MACHINE_MODEL: rk3568_sMACHINE_ID: 007MANUFACTURER: rockchipMAGIC: 0x5041524BATAG: 0x00200800MACHINE: rk3568_sCHECK_MASK: 0x80PWR_HLD: 0,0,A,0,1TYPE: GPTCMDLINE:mtdparts=rk29xxnand:0x00002000@0x00002000(security),0x00002000@0x00004000(uboot),0x00002000@0x00006000(trust),0x00002000@0x00008000(misc),0x00002000@0x0000a000(dtbo),0x00000800@0x0000c000(vbmeta),0x00014000@0x0000c800(boot),0x00036000@0x00020800(recovery),0x000ba000@0x00056800(backup),0x000c0000@0x00110800(cache),0x00008000@0x001d0800(metadata),0x00010000@0x001d8800(yyjcust),0x00614000@0x001e8800(super),-@0x007fc800(userdata:grow)
路徑:rockdev/Image-rk3568_s/parameter.txt parameter.txt該分區表可以動態生成,也可以固定。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
Android
+關注
關注
12文章
3989瀏覽量
133209 -
Linux
+關注
關注
88文章
11641瀏覽量
218195 -
內存
+關注
關注
9文章
3174瀏覽量
76168
發布評論請先 登錄
相關推薦
熱點推薦
RK3588 Android+Linux雙系統方案的實現
RK3588雙系統啟動流程如下圖 ? uboot根據按鍵來識別要啟動的系統,這里可以使用撥碼開關來代替。 uboot在加載分區的時根據分區名字來區分加載android或者linux的分區,所以在
走進Linux內存系統探尋內存管理的機制和奧秘
Linux 內存是后臺開發人員,需要深入了解的計算機資源。合理的使用內存,有助于提升機器的性能和穩定性。本文主要介紹Linux 內存組織結構
基于Linux內存管理與Android內存分配機制
Android采取了一種有別于Linux的進程管理策略,有別于Linux的在進程活動停止后就結束該進程,Android把這些進程都保留在

rk基于linux/android內存管理
評論