当前位置: 首页 > news >正文

【海思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内存详解

相关文章:

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

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…...

linux crontab没有按照规则执行排查

配置了cron规则&#xff0c;但是一段时间后任务没有按预期执行&#xff0c;记录一次修复过程 检查crond服务 systemctl status crond规则正常 crontab -l脚本有执行权限 查看日志 第一种&#xff1a;journalctl journalctl -u crond | grep 03:00 -C 3-u 指定crond.serv…...

Cloudflare的D1使用技巧

总文档&#xff1a;https://developers.cloudflare.com/workers/wrangler/commands/#d1查询某个数据库中哪些命令占用资源最大&#xff1a; To find top 10 queries by execution count: npx wrangler d1 insights <database_name> --sort-typesum --sort-bycount --co…...

解决端口号被占用问题

第一种&#xff1a; 最简单有效的方法&#xff0c;重启一下电脑&#xff0c;占用此端口的程序就会释放端口。 第二种&#xff1a; 使用命令找到占用端口的程序&#xff0c;把它关闭。 1、打开运行窗口输入&#xff1a;CMD &#xff0c;进入命令窗口。 2、输入&#xff1a;n…...

如何在linux上部署zabbix监控工具

<1>搭建服务机 1&#xff09;首先我们先执行 sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config ​ #然后我们再把防火墙开机自启关掉 马上生效 systemctl disable --now firewalld 2&#xff09;我们获得rpm包 rpm -Uvh https://mirrors.aliyun.com/…...

vulnhub系列:sp eric

vulnhub系列&#xff1a;sp eric 靶机下载 一、信息收集 nmap扫描存活&#xff0c;根据mac地址寻找IP nmap 192.168.23.0/24nmap扫描端口&#xff0c;开放端口&#xff1a;22、80 nmap 192.168.23.189 -p- -A -sV -Pndirb 扫描目录&#xff0c;.git 源码&#xff0c;admin…...

JVM二:JVM类加载机制

目录 前言 1.什么是类加载? 2.类加载整体流程 3.一个类什么时候被加载? 4.双亲委派模型 4.1 JVM默认提供了三个类加载器 4.1.1 BootstrapClassLoader 4.1.2 ExtensionClassLoader 4.1.3 ApplicationClassLoader 4.2 破坏双亲委派模型 前言 在上一篇文章中&#xf…...

对于springboot无法连接redis解决方案

对于springboot无法连接redis解决方案 一、测试是否能在本地应用上访问到你的redis&#xff08;如果是部署在linux上的话&#xff09;1. 开启telnet功能2. 开始测试端口是否能访问到&#xff08;适用于所有&#xff0c;包括MQ&#xff09;3. 开放6379端口4. 看spring的配置文件…...

关于android中的各种尺寸与计算

--张学友《心如刀割》很好听 先说几个术语&#xff1a; Screen size(屏幕尺寸)&#xff1a; 指的是手机实际的物理尺寸&#xff0c;比如常用的2.8英寸&#xff0c;3.2英寸&#xff0c;3.5英寸&#xff0c;3.7英寸 摩托罗拉milestone手机是3.7英寸 Aspect Ratio(宽高比率)&am…...

MySQL避免索引失效的方法详细介绍

避免索引失效 在MySQL中&#xff0c;索引是帮助MySQL高效获取数据的数据结构。它就像一本书的目录&#xff0c;通过索引可以快速定位到数据的具体位置&#xff0c;从而减少对数据库的扫描量&#xff0c;提高查询速度。索引可以存储在表中的一个或多个列上&#xff0c;创建索引…...

【Java】深入了解 Java 的 charAt() 方法

我最爱的那首歌最爱的angel 我到什么时候才能遇见我的angel 我最爱的那首歌最爱的angel 我不是王子也会拥有我的angel &#x1f3b5; 张杰《云中的angel》 在 Java 编程中&#xff0c;字符串&#xff08;String&#xff09;是我们经常处理的数据类型之一。…...

Linux 下 ETCD 安装、配置与命令使用总结

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; Linux 下 ETCD 安装、配置与命令使用总结 ETCD 是一个分布式键值存储系统&#xff0c;广泛用于服务发现、分布式锁、配置管理等场景&#xff0c;特别是在 Kubernetes 集群中发挥着至关重要的作用。ETCD 的高…...

C++笔试练习笔记【7】:力扣 91. 解码方法 动态规划练习

文章目录 题目题目分析思路解法正常解法优化解法 题目 题目链接&#xff1a;力扣 91. 解码方法 备用链接&#xff1a;https://leetcode.cn/problems/decode-ways/description/ 题目分析 1.首先我们知道题目给定A~Z编码为1 ~26 &#xff0c;而数字十一字符串的形式给出所以…...

【antd】antd3的表单校验不提示报错信息

描述 不是网上所谓的自定义校验方法的问题。 今天在写一个antd3的业务的时候&#xff0c;封装一个组件&#xff0c;把校验和请求事件放在一个方法里面&#xff0c;用回调或者promise进行异步处理。 发现原因是在校验错误的判断&#xff0c;进行callback之后&#xff0c;页面…...

Game AI ——游戏人工智能(逻辑及剧情生成)

一、Game AI 的介绍 "Game AI"&#xff08;游戏人工智能&#xff09;通常指的是在电子游戏中使用的各种人工智能技术和算法&#xff0c;用于控制游戏中的非玩家角色&#xff08;NPC&#xff09;、敌人、队友等&#xff0c;以及为玩家提供有挑战性的对手或有趣的互动…...

算法基础知识——核函数

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正 核函数&#xff08;Kernel Function&#xff09;是机器学习中一种重要的工具&#xff0c;特别是在支持向量机&#xff08;SVM&#xff09;、核岭回归、核主成分分析&#xff08;KPCA&#xff09;等核…...

安卓xml乱码/加密转换:abx2xml和xml2abx使用及源码介绍

背景&#xff1a; 上一篇文章 android系统中data下的xml乱码无法查看问题剖析及解决方法 发布后&#xff0c;想要寻找一个可以直接把二进制xml和普通xml进行相互转换的&#xff0c;当时还写了相关的方案&#xff0c;但是当时没有找到现成的开源工具&#xff0c;后来经过相关粉…...

slice 截取

JavaScript中的一个数组方法。然而&#xff0c;在Vue 3的应用开发中&#xff0c;slice 方法经常被用于处理数组数据&#xff0c;特别是在需要实现分页、数据截取或数据展示等场景时。 slice 方法的基本用法 slice() 方法返回一个新的数组对象&#xff0c;这一对象是一个由 be…...

XReparentWindow踩坑分析

X11是Linux发行系统中广泛采用的显示协议&#xff0c;各个系统基本上都支持XLib库&#xff0c;作为底层接口&#xff0c;XReparentWindow接口的功能就是重新设置父窗口&#xff0c;注意这个可以跨进程设置父窗口&#xff0c;例如将已经运行的进程的父窗口设置自己的程序Wid&…...

OpenAI动荡,将走向何方、GPT5或许将近、毒舌AI轻松破防网友、最新版 GPT-4o AI 模型得满分 | AGI视界周刊第 4 期

AI 视界周刊由战场小包维护&#xff0c;每周一更新&#xff0c;包含热点聚焦、应用破局、学术前沿、社区热议、智见交锋、跨界 AI、企业动态和争议 AI 八大板块&#xff0c;后续板块划分和内容撰写在周刊迭代过程中持续优化&#xff0c;欢迎大家提出建议。 欢迎大家来到《AI 视…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...

Unity VR/MR开发-VR开发与传统3D开发的差异

视频讲解链接&#xff1a;【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...