内存分配 "Hi3559AV100" 平台会把内存分为多段进行各种用途,本节主要介绍内存分配结 构和如何调整。 内存划分 "Hi3559AV100" 的 DDR 主要划分为如下几个部分: 核间通信共享内存( A73BL、A53UP、Cortex-M7、DSP 之间 ) DSP0/1/2/3 Huawei LiteOS 系统内存 A73BL Linux 系统内存 A53UP Huawei LiteOS 系统内存 A73BL 使用的 MMZ 区域 A53UP 使用的 MMZ 区域。 设备不同的 DDR 大小分为不同的固件版本,主要原因在于不同大小分配的策略 不同,用户也可以根据自己的需求修改分配策略。 PS: 我们一般情况下只需要调整A53UP和A73BL的OS和MZZ内存分配。 MMZ 内存主要用于媒体处理。 内存调整 官方固件和源码中的分配策略("4G"版本) 异构: 非异构: 以非异构为例,由于非异构模式下 A53UP 不会分配硬件资源,不需要媒体处理 仅仅运行用户的应用程序,所以 A53UP 分配的 OS 和 MMZ 内存都很少。相反异 构情况下,A53UP 需要管理 Vi、Vo、Vdec这些需要 VB 视频缓存池的硬件模块 ,所以需要分配很大的内存。 在源码中内存分配调整由"osdrv/osdrv_mem_cfg.sh"脚本进行配置,如果需要了 解可以详细参考此脚本。我们对内存分配脚本进行了封装,编译只需要修改配置 文件中的各项内存大小就可以了。 daijh@daijh:~/hisi/buildroot-sdk/board/configs$ cat Firefly3559A4G-multi-core_defconfig FCONFIG_CHIP=hi3559av100 FCONFIG_V_MEM_SIZE=4G FCONFIG_BOARD=Firefly-3559A # emmc,spi,nand,ufs FCONFIG_BOOT_MEDIA=emmc # linux or linux_liteos FCONFIG_AMP_TYPE=linux FCONFIG_BUILDROOT_CONFIG=hi3559a_smp_defconfig FCONFIG_KERNEL_CONFIG=Firefly_defconfig FCONFIG_KERNEL_DTB=hi3559av100-firefly-jd4.dts FCONFIG_UBOOT_CONFIG=hi3559av100_emmc_defconfig FCONFIG_REG_CONFIG=Hi3559AV100-MBJD4-LPDDR4_2664M_4or2GB_32bitx2-A73_1608M.xlsm # Memory configure FCONFIG_DDR_MEM_BASE=0x40000000 // DDR 起始地址 不需要修改 FCONFIG_DSP_MEM_SIZE=0x04000000 // DSP 分配内存大小 不需要修改 FCONFIG_LINUX_MEM_SIZE=0x20000000 // A73BL 运行的 Linux OS 分配大小 FCONFIG_LINUX_MMZ_BASE=0x64000000 // A73BL MMZ 的起始地址 FCONFIG_LINUX_MMZ_SIZE=0xCC000000 // A73BL MMZ 的内存大小 FCONFIG_LITEOS_TEXT_OFFSET=0x01000000 // 地址偏移 不需要修改 FCONFIG_LITEOS_SYS_MEM_SIZE=0x0B000000 // A53UP Huawei LiteOS 分配的内存大小 FCONFIG_LITEOS_MMZ_MEM_LEN=0x04000000 // A53UP MMZ 内存分配大小 PS: 内存分配根据配置文件从基地址开始,从上往下顺序分配。 地址偏移是用户在进入系统后加载 A53UP Huawei LiteOS 时需要的。如 PDF 文 档中" load_liteos 0 0x131000000 ./sample_liteos_a53.bin " 0x131000000 就是偏移之后得到的地址,OS 需要加载在此地址之上 内存使用 OS 内存分配的内存可以正常分配使用。 MMZ 内存需要调用对应的接口来申请分配,所有的接口文档都会在 PDF 文档中 详细介绍。 通过 free 等其他手段查看的内存情况只能查看 OS 管理的内存,并不能查看其 他部分内存,通过 "cat /proc/media-mem" 可以查看 MMZ 的使用情况。 ~ # cat /proc/media-mem +---ZONE: PHYS(0x64000000, 0x12FFFFFFF), GFP=0, nBYTES=3342336KB, NAME="anonymous" |-MMB: phys(0x64000000, 0x6400BFFF), kvirt=0xFFFFFF800A090000, flags=0x00000001, length=48KB, name="sys_scale_coef" |-MMB: phys(0x6400C000, 0x6402BFFF), kvirt=0x00000000, flags=0x00000000, length=128KB, name="TDE_MEMPOOL_MMB" |-MMB: phys(0x6402C000, 0x6407CFFF), kvirt=0xFFFFFF800A500000, flags=0x00000001, length=324KB, name="gdc_node_buf" |-MMB: phys(0x6407D000, 0x641A0FFF), kvirt=0xFFFFFF800A800000, flags=0x00000001, length=1168KB, name="VGS_NodeBuf" |-MMB: phys(0x641A1000, 0x641C1FFF), kvirt=0xFFFFFF800A700000, flags=0x00000001, length=132KB, name="dis_node_buf" |-MMB: phys(0x641C2000, 0x643AAFFF), kvirt=0xFFFFFF800B000000, flags=0x00000001, length=1956KB, name="vo0_coef_buf" |-MMB: phys(0x643AB000, 0x6634EFFF), kvirt=0x00000000, flags=0x00000000, length=32400KB, name="hifb_layer0" |-MMB: phys(0x6634F000, 0x67320FFF), kvirt=0x00000000, flags=0x00000000, length=16200KB, name="hifb_layer1" |-MMB: phys(0x67321000, 0x67360FFF), kvirt=0x00000000, flags=0x00000000, length=256KB, name="hifb_layer2" |-MMB: phys(0x67361000, 0x67390FFF), kvirt=0xFFFFFF800AFC0000, flags=0x00000001, length=192KB, name="HIFB COEF" |-MMB: phys(0x67391000, 0x67410FFF), kvirt=0x00000000, flags=0x00000000, length=512KB, name="jpegd0_emar" |-MMB: phys(0x67411000, 0x67445FFF), kvirt=0xFFFFFF800BA00000, flags=0x00000001, length=212KB, name="IVE_QUEUE" |-MMB: phys(0x67446000, 0x67446FFF), kvirt=0xFFFFFF800A069000, flags=0x00000003, length=4KB, name="IVE_TEMP_NODE" |-MMB: phys(0x67447000, 0x67466FFF), kvirt=0xFFFFFF800BAA0000, flags=0x00000001, length=128KB, name="SVP_NNIE_QUEUE" |-MMB: phys(0x67467000, 0x6746DFFF), kvirt=0xFFFFFF800A108000, flags=0x00000003, length=28KB, name="SVP_NNIE_MODLE_" |-MMB: phys(0x6746E000, 0x67A5CFFF), kvirt=0x00000000, flags=0x00000000, length=6076KB, name="vb_pool" |-MMB: phys(0x67A5D000, 0x67A5DFFF), kvirt=0xFFFFFF800AA31000, flags=0x00000001, length=4KB, name="vb_pool_sup_nc" |-MMB: phys(0x67A5E000, 0x6804CFFF), kvirt=0x00000000, flags=0x00000000, length=6076KB, name="vb_pool" |-MMB: phys(0x6804D000, 0x6804DFFF), kvirt=0xFFFFFF800AA33000, flags=0x00000001, length=4KB, name="vb_pool_sup_nc" |-MMB: phys(0x6804E000, 0x6863CFFF), kvirt=0x00000000, flags=0x00000000, length=6076KB, name="vb_pool" |-MMB: phys(0x6863D000, 0x6863DFFF), kvirt=0xFFFFFF800AA35000, flags=0x00000001, length=4KB, name="vb_pool_sup_nc" |-MMB: phys(0x6863E000, 0x864D5FFF), kvirt=0x00000000, flags=0x00000000, length=490080KB, name="vb_pool" |-MMB: phys(0x864D6000, 0x864DFFFF), kvirt=0xFFFFFF800AEF0000, flags=0x00000001, length=40KB, name="vb_pool_sup_nc" |-MMB: phys(0x864E0000, 0x8C3CBFFF), kvirt=0x00000000, flags=0x00000000, length=97200KB, name="vb_pool" |-MMB: phys(0x8C3CC000, 0x8C3CCFFF), kvirt=0xFFFFFF800AA37000, flags=0x00000001, length=4KB, name="vb_pool_sup_nc" ---MMZ_USE_INFO: total size=3342336KB(3264MB),used=659252KB(643MB + 820KB),remain=2683084KB(2620MB + 204KB),zone_number=1,block_number=25