MMAP layout布局说明
1. 整个系统内存分布¶

从 图1 可以看出来,整个SOC内存分为Linux Kernel内存,MMA 内存和BL31内存。MMA内存,就是专门划出一块区域供MI各个硬件IP使用的,比如HDMI、编解码、摄像头等模块,都需要用到MMA内存。我们主要关注的是如何配置Linux内存和MMA内存。
2. 内存配置¶
配置/aosp/device/sigmastar/pioneer5/product/BoardConfig.mk文件中的BOARD_KERNEL_CMDLINE:
BOARD_KERNEL_CMDLINE += LX_MEM=0x1000000000,0x7FE00000 mma_heap=mma_heap_name0,miu=0,sz=0xC000000 mma_memblock_remove=0
各个区域内存大小是通过修改BOARD_KERNEL_CMDLINE变量来配置的,解释如下:
LX_MEM=0x1000000000,0x7FE00000
:0x1000000000表示DDR地址0对应的虚拟地址,0x7FE00000表示当前DDR SIZE大小
mma_heap_name, miu=0, sz=0xC000000
:配置mma heap size
所以如上CMDLINE就表示,2GB DDR = BL31(2MB) + KERNEL(1854MB) + MMA(192MB)
3. 配置位置¶
Android平台对应的配置位置为:/aosp/device/sigmastar/pioneer5/product/BoardConfig.mk
这里的product目前有pioneer5_ad/pioneer5_sdp/pioneer5_sdp_lr/pioneer5_voip
4. 设备上查看当前配置¶
在设备上可以通过命令来查看当前系统的配置:
-
查看Linux kernel可用内存
free -m
-
查看mma heap配置和使用情况
cat /proc/mi_modules/mi_sys_mma/mma_heap_name0
图2: mma heap配置和使用情况
length节点就是 图2 配置mma_heap=mma_heap_name0,miu=0,sz=0xC000000值,也就是mma heap size。avail表示当前剩余可用内存。
5. 配置建议¶
mma heap size的配置大小需要根据实际使用场景需要来配置,具体可以咨询FAE。