rk基于linux/android内存管理

电子说

1.4w人已加入

描述

一、内存分布

 

U-Boot 由前级 Loader 加载到 CONFIG_SYS_TEXT_BASE 地址,初始化时会探明当前系统的总内存容 量,32位平台上认为最大4GB可用(但是不影响内核对容量的识别),64位平台上认为所有内存都可用。然后通过一系列reserve_xxx() 接口从内存末尾往前预留需要的内存,最后把自己relocate到某段 reserve的空间上。内存整体使用布局如下,以ARM64为例(常规情况):

 

内存

 

上表中的 Start Addr Offset 一栏表示基于 DDR base 的地址偏移;Fastboot地址和大小由配置决定:CONFIG_FASTBOOT_BUF_ADDRCONFIG_FASTBOOT_BUF_SIZEVideo FB/U-Boot/Malloc/Board/Gd/Fdt/Sp 由顶向下根据实际需求大小来分配;64 位平台:ATF ARMv8 必需的,OP-TEE 是可选项;32 位平台:只有 OP-TEEkernel fdt/kernel/ramdisk U-Boot 需要加载的固件地址,由 ENV_MEM_LAYOUT_SETTINGS 义;Fastboot 功能需要的 buffer 地址和大小在 defconfig 中定义;OP-TEE 占据的空间需要根据实际需求而定,最大为 30M;其中 RK1808/RK3308 OP-TEE 放在低地址,不在 0x8400000

 

部分宏定义偏移地址:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
#define ENV_MEM_LAYOUT_SETTINGS "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该分区表可以动态生成,也可以固定。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分