【海思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 内存,可以使用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 视…...

RCE---无字母数字webshell
<?php if(isset($_GET[code])){$code $_GET[code];if(strlen($code)>35){die("Long.");}if(preg_match("/[A-Za-z0-9_$]/",$code)){die("NO.");}eval($code); }else{highlight_file(__FILE__); } 分析代码:传参不大于35&…...

有意思的漏洞复现与分析一
目录 一、Linux命令长度限制突破方法 1.在二进制漏洞利用中,某师傅遇到可控数据只有8字节的情况,去掉字符 串尾的\0,限制在7个字符。 一、Linux命令长度限制突破方法 1.在二进制漏洞利用中,某师傅遇到可控数据只有8字节的情况&a…...

力扣题解(按身高排序)
2418. 按身高排序 给你一个字符串数组 names ,和一个由 互不相同 的正整数组成的数组 heights 。两个数组的长度均为 n 。 对于每个下标 i,names[i] 和 heights[i] 表示第 i 个人的名字和身高。 请按身高 降序 顺序返回对应的名字数组 names 。 思路&…...

Redis的六种淘汰策略详解
Redis作为一种高性能的键值对存储系统,其数据全部存储在内存中,因此内存管理对Redis的性能至关重要。当Redis的内存使用达到上限时,就需要通过淘汰策略来释放内存空间,以便存储新的数据。Redis提供了六种不同的淘汰策略࿰…...

vue3中 ref 和 reactive 的区别
相同:均是声明响应式对象。且声明的响应式对象是深层的 1. 数据类型不同:ref用于包装JavaScript基本类型的数据(如字符串、数字、布尔值等),而reactive可以用于包装JavaScript对象和数组等复杂类型的数据。 2.访问方式…...

《单例模式的深度解读:实现方式、破坏情况与利弊权衡》
单例模式 一、单例模式的定义 单例模式(Singleton Pattern)是一种常见的软件设计模式,确保一个类只有一个实例存在,并提供一个全局访问点来获取该实例。 二、单例模式的实现方式 1.懒汉式单例 public class LazySingle…...

010607电压源和电流源受控源
电源的理论部分 1.6电压源和电流源1.理想电压源: 1.6电压源和电流源 1.理想电压源: 其两端电压总能保持定值或一定的时间函数,其值与流过它的电流i无关的元件叫理想电压源。 电路符号:中间与导线直通的圆圈 电压源:…...

快乐数求解
编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1,…...

运维高级内容--为端口做标记、制定调度规则
rs: yum install mod_ssl -y #安装mod_ssl模块 让rs支持https systemctl restart http lvs: cd /boot/ ls less config-5.14.0-427.13.1.el9_4.x86_64 ipvsadm -A -t 192.168.0.200:80 -s rr ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1 #轮询调度一次…...

后端Web之HTTP协议基础介绍
目录 1.HTTP概念 2.HTTP请求协议 3.HTTP响应协议 4.HTTP协议解析 1.HTTP概念 HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。它是万维网数据通信的基础,允许将超…...