海思内存分为两部分,一部分由操作系统管理,称为os内存,一部分由MMZ模块管理,由海思媒体处理业务使用,称为MMZ内存。
设置mmz内存
在海思sdk目录mpp/ko中的load35xx文件中定义了os和mmz内存分配参数,具体由下面几个参数定义:
mem_total: 总内存大小
mem_start:物理内存起始位置
os_mem_size:分配操作系统os的内存大小
mmz_start:mmz内存起始地址
mmz_size:mmz内存大小
已3516dv300硬件为例:
#!/bin/sh
# Useage: ./load3516av300 [ -r|-i|-a ] [ sensor0~1 ]
# -r : rmmod all modules
# -i : insmod all modules
# -a : rmmod all moules and then insmod them
# e.g: RAW: ./load3516av300 -i -sensor0 imx335 -sensor1 imx335
# e.g: BT1120/DC : ./load3516av300 -i -sensor0 imx327 -sensor1 imx327 -osmem 128 -yuv0 1
# e.g: BT656 : ./load3516av300 -i -sensor0 imx327 -sensor1 imx327 -osmem 128 -yuv0 2
####################Variables Definition##########################
SNS_TYPE0=imx335; # sensor type
SNS_TYPE1=NULL; # sensor type
YUV_TYPE0=0; # 0 -- raw, 1 -- bt1120/DC, 2 --bt656
CHIP_TYPE=hi3516av300; # chip type
#DDR start:0x80000000, kernel start:0x80000000, OS(128M); MMZ start:0x88000000
mem_total=512 # 512M, total mem
mem_start=0x80000000 # phy mem start
os_mem_size=128 # 128M, os mem
mmz_start=0x88000000; # mmz start addr
mmz_size=384M; # 384M, mmz size
##################################################################
mem_total=512:总物理内存512M
mem_start=0x80000000:物理内存起始地址0x80000000
os_mem_size=128:操作系统os内存大小128M
mmz_start=0x88000000:mmz内存起始地址,计算方式:mem_start + os内存大小, 0x80000000 + 128 * 1024 * 1024 = 0x80000000 + 0x8000000 = 0x88000000
mmz_size=384M:mmz内存大小384M
运行load3516av300后,
insmod hi_osal.ko anony=1 mmz_allocator=hisi mmz=anonymous,0, m m z s t a r t , mmz_start, mmzstart,mmz_size || report_error
hi_osal.ko会根据上面的定义设置mmz_start和mmz_size
设置os内存
os内存大小在uboot启动参数中通过 setenv bootargs 'mem=128M…进行设置,例如:
设置os内存为128M
setenv bootargs ‘mem=128M console=ttyAMA0,115200 root=/dev/mmcblk0p3 rootfstype=ext4 rw rootwait blkdevparts=mmcblk0:1M(boot),10M(kernel),256M(rootfs),10M(config),7000M(data)’
saveenv
查看内存情况
- 使用cat /proc/meminfo命令查看内存信息
- 使用free -m命令查看内存信息