您的位置:首页 > 新闻 > 资讯 > 【海思SS626 | 内存管理】海思芯片的OS内存、MMZ内存设置

【海思SS626 | 内存管理】海思芯片的OS内存、MMZ内存设置

2024/10/6 18:34:49 来源:https://blog.csdn.net/wkd_007/article/details/141034536  浏览:    关键词:【海思SS626 | 内存管理】海思芯片的OS内存、MMZ内存设置

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣:🍭介绍海思芯片内存管理 🍭
😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭
⏰发布时间⏰: 2024-08-12 09:03:58

本文未经允许,不得转发!!!

目录

  • 🎄一、概述
    • ✨1.1 芯片内存地址范围
  • 🎄二、海思芯片内存管理
  • 🎄三、怎样设置 OS内存 和 MMZ内存
  • 🎄四、怎样查看 OS内存 和 MMZ内存
    • ✨4.1 查看 OS 内存
    • ✨4.2 查看 MMZ 内存
  • 🎄五、总结


在这里插入图片描述

在这里插入图片描述

🎄一、概述

海思芯片的物理内存被划分为两个部分,一块供OS(Operating system,操作系统)使用,另一块就是MMZ(Media Memory Zone,多媒体内存区域)。

本文以海思SS626(22AP20 解码处理器)芯片为例,介绍海思芯片内存管理的相关概念。内存管理相关的SDK文档如下:

  • SS626ReleaseDoc\zh\00.hardware\chip\22AP20 解码处理器用户指南.pdf
  • SS626ReleaseDoc\zh\01.software\board\SS626V100 SDK 安装以及升级使用说明.pdf
  • SS626ReleaseDoc\zh\02.only for reference\software\内存布局调整指南.pdf

✨1.1 芯片内存地址范围

海思SS626的文档 SS626ReleaseDoc\zh\00.hardware\chip\22AP20 解码处理器用户指南.pdf 给出了内存地址范围:0x40000000 ~ 0x23FFFFFFF,最大支持8G内存。
在这里插入图片描述


在这里插入图片描述

🎄二、海思芯片内存管理

海思芯片的物理内存被划分为两个部分,一块供OS(Operating system,操作系统)使用,另一块就是MMZ(Media Memory Zone,多媒体内存区域)。

  • OS(Operating system)内存:就是分配给Linux内核管理的内存,分配给内核和应用程序使用;
  • MMZ(Media Memory Zone)内存:是海思芯片独有的,专门用来处理音视频的内存。因为海思芯片是专门用来做音视频编解码的芯片,需要使用大量内存,为了编解码的速度,海思驱动底层会管理一部分内存,专门用于音视频编解码;这部分内存无法使用 malloc 等应用接口申请,必须使用海思提供的SDK接口申请。

在这里插入图片描述

🎄三、怎样设置 OS内存 和 MMZ内存

设置 OS内存 和 MMZ内存有如下几个步骤:

  • 1、在SS626中,OS内存起始地址为0x40000000。首先通过是uboot启动参数设置操作系统内存,例如setenv bootargs 'mem=512M ... ',表示分配给操作系统内存为512M。设置完进入系统后,可以通过下面命令查看 bootargs 信息:
    # cat /proc/cmdline 
    mem=1024M console=ttyAMA0,115200n8 root=/dev/mmcblk0p3 rootfstype=ext4 rw rootwait blkdevparts=mmcblk0:1M(boot),15M(kernel),300M(rootfs),1M(mdc),3400M(data)
    
  • 2、修改加载驱动的 loadxxxx 脚本,该脚本里有几个与内存相关的参数,mem_total表示总的物理内存,mem_start表示物理内存起始地址(22AP20 解码处理器用户指南.pdf有说明),os_mem_size表示OS内存总大小,mmz_start表示mmz内存物理起始地址,mmz_size表示mmz内存总大小。
    #DDR start:0x40000000;ipcm(0x40000000, 2M); LiteOS(0x40200000, 62M); Linux OS(0x44000000, 1024M); MMZ start:0x84000000
    mem_total=4096                # 4096, total mem
    mem_start=0x40000000          # phy mem start
    ipcm_mem_size=2               # 2M, ipcm size
    liteos_mem_size=62            # 62M, liteos size
    os_mem_size=1024              # 1024M, os memmmz_start=0x84000000;         # mmz start addr; 0x40000000+2M+62M+1024M=0x84000000
    mmz_size=3008M;               # 3008M, mmz size; mem_total - (mmz_start - mem_start)= 4096M-1088M = 3008M
    
  • 3、加载 ot_osal.ko 驱动时,通过参数设置mmz内存。MMZ内存由osal内核模块管理(amp/a55_linux/mpp/out/ko目录下的
    ot_osal.ko),加载osal模块时,通过模块参数指定其起始地址及大小。
    insmod ot_osal.ko anony=1 mmz_allocator=ot mmz=anonymous,0,$mmz_start,$mmz_size || report_error
    # 格式:mmz=<name>,<gfp>,<phys_start_addr>,<size>:<name>,<gfp>,<phys_start_addr>:
    # mmz= : 开始设置mmz内存
    # <name>:名称,这里是 anonymous
    # <gfp>:mmz的属性,目前一般都直接将该值置为0
    # <phys_start_addr>:mmz 内存物理起始地址
    # <size>:mmz内存总大小
    # 如果有多个mmz分配池,可以公共冒号隔开
    
  • 4、请注意,MMZ内存地址范围不能与OS内存重叠,且两者之和不能超过物理内存大小。

在这里插入图片描述

🎄四、怎样查看 OS内存 和 MMZ内存

✨4.1 查看 OS 内存

系统起来后,查看 os 内存,可以使用freecat /proc/meminfo 命令,下面是运行后显示的结果:

运行 free 命令查看os内存情况:

~ # freetotal        used        free      shared  buff/cache   available
Mem:         907180      125328      741436          20       40416      752816
Swap:             0           0           0

运行 cat /proc/meminfo 命令查看os内存情况:

~ # cat /proc/meminfo 
MemTotal:         907180 kB
MemFree:          744148 kB
MemAvailable:     755528 kB
Buffers:            4568 kB
Cached:            31240 kB
SwapCached:            0 kB
Active:            15856 kB
Inactive:          24828 kB
Active(anon):         52 kB
Inactive(anon):     4844 kB
Active(file):      15804 kB
Inactive(file):    19984 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 8 kB
Writeback:             0 kB
AnonPages:          4944 kB
Mapped:            10000 kB
Shmem:                20 kB
KReclaimable:       4608 kB
Slab:              29220 kB
SReclaimable:       4608 kB
SUnreclaim:        24612 kB
KernelStack:        2176 kB
PageTables:          620 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      453588 kB
Committed_AS:     110776 kB
VmallocTotal:   262930368 kB
VmallocUsed:       15384 kB
VmallocChunk:          0 kB
Percpu:              704 kB
CmaTotal:           4096 kB
CmaFree:               0 kB

✨4.2 查看 MMZ 内存

可以使用 cat /proc/umap/media-mem 命令查看 mmz 内存。

下面是运行 cat /proc/umap/media-mem 后的结果显示:
在这里插入图片描述

  • ZONE行:展示一个内存区域的信息,(0x84000000, 0x13FFFFFFF)是物理起始地址-终止地址,nBYTES=3080192KB是这个ZONE内存总大小,NAME="anonymous"是名称。
  • MMB:Media-Memory-Block,媒体内存块,后面描述了每块的信息。
  • MMZ_USE_INFO:mmz使用情况,总大小、已使用、剩余、mmz个数、mmb个数。

在这里插入图片描述

🎄五、总结

👉本文介绍了海思芯片内存管理相关知识,包括OS内存、MMZ内存的概念,怎样设置OS内存、MMZ内存,怎样查看OS内存、MMZ内存。

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

参考:
1、海思sdk文档
2、设置海思芯片MMZ内存、OS内存详解

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com