MMAP layout布局说明

1. 整个系统内存分布

图1: MMAP layout

从 图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。