《海思中内存分配和优化》

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内存分配情况

  该目录下SDKHi3521D V100R001C02SPC040ReleaseDoczh1.softwareoardHi3521DV100,有一个《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”。
原文地址:https://www.cnblogs.com/zhuangquan/p/12021983.html