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


    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”。
  • 相关阅读:
    170110-学习MoveIt!
    12.29-ros-gazebo高级
    12.27-ros-gazebo基础
    4.9-Simulation in gazebo or webots
    6.28-机器人模拟器Gazebo基础
    4.8-URDF in ROS
    Win32双缓冲画图原理
    Win32 计时器
    最简化的DirectX 11开发环境的配置 VS2010
    VS2010 C++编译报错LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
  • 原文地址:https://www.cnblogs.com/zhuangquan/p/12021983.html
Copyright © 2020-2023  润新知