【海思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 解码处理器用户指南.pdfSS626ReleaseDoc\zh\01.software\board\SS626V100 SDK 安装以及升级使用说明.pdfSS626ReleaseDoc\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 内存,可以使用free、cat /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内存详解
相关文章:
【海思SS626 | 内存管理】海思芯片的OS内存、MMZ内存设置
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...
linux crontab没有按照规则执行排查
配置了cron规则,但是一段时间后任务没有按预期执行,记录一次修复过程 检查crond服务 systemctl status crond规则正常 crontab -l脚本有执行权限 查看日志 第一种:journalctl journalctl -u crond | grep 03:00 -C 3-u 指定crond.serv…...
Cloudflare的D1使用技巧
总文档:https://developers.cloudflare.com/workers/wrangler/commands/#d1查询某个数据库中哪些命令占用资源最大: To find top 10 queries by execution count: npx wrangler d1 insights <database_name> --sort-typesum --sort-bycount --co…...
解决端口号被占用问题
第一种: 最简单有效的方法,重启一下电脑,占用此端口的程序就会释放端口。 第二种: 使用命令找到占用端口的程序,把它关闭。 1、打开运行窗口输入:CMD ,进入命令窗口。 2、输入:n…...
如何在linux上部署zabbix监控工具
<1>搭建服务机 1)首先我们先执行 sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config #然后我们再把防火墙开机自启关掉 马上生效 systemctl disable --now firewalld 2)我们获得rpm包 rpm -Uvh https://mirrors.aliyun.com/…...
vulnhub系列:sp eric
vulnhub系列:sp eric 靶机下载 一、信息收集 nmap扫描存活,根据mac地址寻找IP nmap 192.168.23.0/24nmap扫描端口,开放端口:22、80 nmap 192.168.23.189 -p- -A -sV -Pndirb 扫描目录,.git 源码,admin…...
JVM二:JVM类加载机制
目录 前言 1.什么是类加载? 2.类加载整体流程 3.一个类什么时候被加载? 4.双亲委派模型 4.1 JVM默认提供了三个类加载器 4.1.1 BootstrapClassLoader 4.1.2 ExtensionClassLoader 4.1.3 ApplicationClassLoader 4.2 破坏双亲委派模型 前言 在上一篇文章中…...
对于springboot无法连接redis解决方案
对于springboot无法连接redis解决方案 一、测试是否能在本地应用上访问到你的redis(如果是部署在linux上的话)1. 开启telnet功能2. 开始测试端口是否能访问到(适用于所有,包括MQ)3. 开放6379端口4. 看spring的配置文件…...
关于android中的各种尺寸与计算
--张学友《心如刀割》很好听 先说几个术语: Screen size(屏幕尺寸): 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸 摩托罗拉milestone手机是3.7英寸 Aspect Ratio(宽高比率)&am…...
MySQL避免索引失效的方法详细介绍
避免索引失效 在MySQL中,索引是帮助MySQL高效获取数据的数据结构。它就像一本书的目录,通过索引可以快速定位到数据的具体位置,从而减少对数据库的扫描量,提高查询速度。索引可以存储在表中的一个或多个列上,创建索引…...
【Java】深入了解 Java 的 charAt() 方法
我最爱的那首歌最爱的angel 我到什么时候才能遇见我的angel 我最爱的那首歌最爱的angel 我不是王子也会拥有我的angel 🎵 张杰《云中的angel》 在 Java 编程中,字符串(String)是我们经常处理的数据类型之一。…...
Linux 下 ETCD 安装、配置与命令使用总结
大家好,我是程序员小羊! 前言: Linux 下 ETCD 安装、配置与命令使用总结 ETCD 是一个分布式键值存储系统,广泛用于服务发现、分布式锁、配置管理等场景,特别是在 Kubernetes 集群中发挥着至关重要的作用。ETCD 的高…...
C++笔试练习笔记【7】:力扣 91. 解码方法 动态规划练习
文章目录 题目题目分析思路解法正常解法优化解法 题目 题目链接:力扣 91. 解码方法 备用链接:https://leetcode.cn/problems/decode-ways/description/ 题目分析 1.首先我们知道题目给定A~Z编码为1 ~26 ,而数字十一字符串的形式给出所以…...
【antd】antd3的表单校验不提示报错信息
描述 不是网上所谓的自定义校验方法的问题。 今天在写一个antd3的业务的时候,封装一个组件,把校验和请求事件放在一个方法里面,用回调或者promise进行异步处理。 发现原因是在校验错误的判断,进行callback之后,页面…...
Game AI ——游戏人工智能(逻辑及剧情生成)
一、Game AI 的介绍 "Game AI"(游戏人工智能)通常指的是在电子游戏中使用的各种人工智能技术和算法,用于控制游戏中的非玩家角色(NPC)、敌人、队友等,以及为玩家提供有挑战性的对手或有趣的互动…...
算法基础知识——核函数
简介:个人学习分享,如有错误,欢迎批评指正 核函数(Kernel Function)是机器学习中一种重要的工具,特别是在支持向量机(SVM)、核岭回归、核主成分分析(KPCA)等核…...
安卓xml乱码/加密转换:abx2xml和xml2abx使用及源码介绍
背景: 上一篇文章 android系统中data下的xml乱码无法查看问题剖析及解决方法 发布后,想要寻找一个可以直接把二进制xml和普通xml进行相互转换的,当时还写了相关的方案,但是当时没有找到现成的开源工具,后来经过相关粉…...
slice 截取
JavaScript中的一个数组方法。然而,在Vue 3的应用开发中,slice 方法经常被用于处理数组数据,特别是在需要实现分页、数据截取或数据展示等场景时。 slice 方法的基本用法 slice() 方法返回一个新的数组对象,这一对象是一个由 be…...
XReparentWindow踩坑分析
X11是Linux发行系统中广泛采用的显示协议,各个系统基本上都支持XLib库,作为底层接口,XReparentWindow接口的功能就是重新设置父窗口,注意这个可以跨进程设置父窗口,例如将已经运行的进程的父窗口设置自己的程序Wid&…...
OpenAI动荡,将走向何方、GPT5或许将近、毒舌AI轻松破防网友、最新版 GPT-4o AI 模型得满分 | AGI视界周刊第 4 期
AI 视界周刊由战场小包维护,每周一更新,包含热点聚焦、应用破局、学术前沿、社区热议、智见交锋、跨界 AI、企业动态和争议 AI 八大板块,后续板块划分和内容撰写在周刊迭代过程中持续优化,欢迎大家提出建议。 欢迎大家来到《AI 视…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
