《海思 —— 内存分配和优化》
1.海思中的内存
海思中的内存分为OS内存和MMZ内存。OS是给系统使用的,MMZ是MMP使用的。
2.MMZ内存分配 /proc/media-mem
这里记录了当前MMZ内存被分配至哪些模块,被谁使用了。
3.查看系统内存
free [-b/k/m/g] 后面跟的是以什么单位显示
https://www.cnblogs.com/ultranms/p/9254160.html
或者:
cat /proc/meminfo # 查看 linux 系统内存使用
4.修改OS内存和MMZ内存
4.1 在uboot命令行模式下:
setenv bootargs 'mem=512M console=ttyAMA0,115200 rw root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),4M(kernel),27M(rootfs)' saveenv
设置os内存为512M。
4.2 直接修改uboot源码
u-boot/common/main.c,修改mem参数为你想要设置的os内存大小,(以修改为768M为例) setenv("bootargs", "mem=512M console=ttyAMA0,115200 root=/dev/mmcblk0p3,rootfstype=ext4 rw rootwait blkdevparts=mmcblk0:1(boot),4M(kernel),27M(rootfs)");
4.3 修改/ko里面的load3521d
#DDR start:0x80000000, kernel start:0x80000000, OS(512M); MMZ start:0x88000000 mem_total=1024 # 512M, total mem mem_start=0x80000000 # phy mem start os_mem_size=512# 512M, os mem mmz_start=0xA0000000; # mmz start addr mmz_size=512; # 512M, mmz size
其实mmz_start的大小是由1024*1024(也就是1M)*512 + 0x8000 0000得到的。
5.查看OS和MMZ内存分配情况
该目录下\SDK\Hi3521D V100R001C02SPC040\ReleaseDoc\zh\01.software\board\Hi3521DV100,有一个《Hixxx SDK安装以及升级使用说明.txt》中的第六章描述了“地址空间分配与使用”
第六章 地址空间分配与使用 1、DDR内存管理说明 1)所有DDR内存中,一部分由操作系统管理,称为OS内存;另一部分由MMZ模块管理,供媒体业务单独使用,称为MMZ内存。 2)OS内存起始地址为0x40000000,内存大小可通过bootargs进行配置,例如第三章中的setenv bootargs 'mem=64M ... ',表示分配给操作系统内存为64M,您可以根据实际情况进行调整。 3)MMZ内存由MMZ内核模块管理(mpp/ko_hi35xx目录下的mmz.ko),加载mmz模块时,通过模块参数指定其起始地址及大小,load脚本中根据osmem大小来进行计算,例如: ./load3521d -a -ad 6134 -osmem 64 您也可以通过修改mpp/ko目录下load3521d脚本中的mmz模块参数,来修改其起始地址和总大小。 4)请注意MMZ内存地址范围不能与OS内存重叠。 2、DEMO板DDR内存管理示意 以容量为512MBytes的DDR内存为例,以下为根据本文档和SDK默认配置得到的内存管理示意图: DDR: -----|-------| 0x40000000 # Memory managed by OS. 64M | OS | | | -----|-------| 0x44000000 # Memory managed by MMZ block anonymous. 442M | MMZ | | | -----|-------| 0x5FA00000 # Memory managed by MMZ block jpeg. 6M | jpeg | | | -----|-------| 0x60000000 # End of memory managed by MMZ. 注意: (1)用户在配置启动参数时需要设置OS的管理内存为64M,“setenv bootargs 'mem=64M ...”。 (2)系统启动后,配置load3521d脚本中指定总内存为512(mem_total=512),加载时指定osmem为64(-osmem 64),则MMZ管理的内存为448M。 (3)如果有特殊应用,可以自行修改load3521d脚本,进行mmz区域划分,如“insmod hi_osal.ko mmz=anonymous,0,0x44000000,442M:jpeg,0,0x5FA00000,6M anony=1”。