Android Pmem相关介绍
http://fangjian0518.blog.163.com/blog/#m=0
Android Pmem相关介绍
2011-10-18 09:40:26| 分类: Android PMEM |字号 订阅
基本原理
Android Pmem是为了实现共享大尺寸连续物理内存而开发的一种机制,该机制对dsp,gpu等部件非常有用。Pmem相当于把系统内存划分出一部分单独管理,即不被linux mm管理,实际上linux mm根本看不到这段内存。(reserved physical memory)
Pmem与Ashmem的区别
Pmem和Ashmem都通过mmap来实现共享内存,其区别在于Pmem的共享区域是一段连续的物理内存,而Ashmem的共享区域在虚拟空间是连续的,物理内存却不一定连续。dsp和某些设备只能工作在连续的物理内存上,这样cpu与dsp之间的通信就需要通过Pmem来实现。
Pmem的实现
Pmem的源代码在drivers/misc/pmem.c中,Pmem驱动依赖于linux的misc device和platform driver框架,一个系统可以有多个Pmem,默认的是最多10个。Pmem暴露4组操作,分别是platform driver的probe和remove操作; misc device的fops接口和vm_ops操作。模块初始化时会注册一个platform driver,在之后probe时,创建misc设备文件,分配内存,完成初始化工作。
Pmem通过pmem_info,pmem_data,pmem_region三个结构体维护分配的共享内存,其中pmem_info代表一个Pmem设备分配的内存块,pmem_data代表该内存块的一个子块,pmem_region则把每个子块分成多个区域。 pmem_data是分配的基本单位,即每次应用层要分配一块Pmem内存,就会有一个pmem_data来表示这个被分配的内存块,实际上在open的时候,并不是open一个pmem_info表示的整个Pmem内存块,而是创建一个pmem_data以备使用。一个应用可以通过ioctl来分配 pmem_data中的一个区域,并可以把它map到进程空间;并不一定每次都要分配和map整个pmem_data内存块。
上面三个数据结构的关系可以用下面的图来表示
Pmem驱动会创建/dev/pmem、/dev/adsp,实现了pmem_open,pmem_mmap,pmem_release和pmem_ioctl,应用层可以通过open,mmap,close,ioctl来操作Pmem设备文件。其中ioctl支持的命令如下:
l PMEM_GET_PHYS获取物理地址
l PMEM_MAP映射一段内存
l PMEM_GET_SIZE返回pmem分配的内存大小
l PMEM_UNMAPunmap一段内存
l PMEM_ALLOCATE分配pmem空间,len 是参数,如果已分配则失败
l PMEM_CONNECT将一个pmem file与其他相连接
l PMEM_GET_TOTAL_SIZE返回pmem device内存的大小
用户接口
一个进程首先打开Pmem设备,通过ioctl(PMEM_ALLOCATE)分配内存,它mmap这段内存到自己的进程空间后,该进程成为 master进程。其他进程可以重新打开这个pmem设 备,通过调用ioctl(PMEM_CONNECT)将自己的pmem_data与master进程的pmem_data建立连接关系,这个进程就成为client进程。Client进程可以通过mmap将master Pmem中的一段或全部重新映射到自己的进程空间,这样就实现了共享Pmem内存。如果是GPU或DSP则可以通过ioctl(PMEM_GET_PHYS)获取物理地址进行操作
转载于:https://www.cnblogs.com/yuzaipiaofei/archive/2011/10/24/4124308.html
Android Pmem相关介绍相关推荐
- Android O 前期预研之二:HIDL相关介绍
在上一篇博客里,大致介绍了下Android O 中treble计划的一些背景与相关基本架构,这一篇中跟大家一起来探讨下HIDL相关的内容. Android HAL类型 在此之前的ANDROID版本当 ...
- Android Service服务的相关介绍
文章目录 Android Service服务的相关介绍 创建方式 启动方式 生命周期 onStartCommand参数及返回值的理解 ServiceConnection 场景说明 前台服务 问答 st ...
- Android Fragment 基本介绍
Android Fragment 基本介绍 Android Fragment 基本介绍 Fragment Android是在Android 3.0 (API level 11)开始引入Fragment ...
- Android Canvas类介绍和Android Draw Rect 坐标图示
当我们调整好画笔之后,现在需要绘制到画布上,这就得用Canvas类了.在Android中既然把Canvas当做画布,那么就可以在画布上绘制我们想要的任何东西.除了在画布上绘制之外,还需要设置一些关于画 ...
- android 内核内存管理,Android内核相关内容总结
要想充分掌握Android这一操作系统的应用,首先需要我们从Android内核的相关内容开始了解.在这里就为大家详细介绍一下相关的知识. Android操作系统是由谷歌推出的一款基于Linux平台开源 ...
- Android项目工程结构介绍
Android项目工程结构介绍 (1)gradle和.idea Android Studio自动生成的文件,打包的时候一般会删掉再进行打包 (2)app 项目的代码资源都在其中,也是我们工作的核心目录 ...
- 阿里MNN推理框架相关介绍
一.参考资料 MNN官网 中文文档-语雀 欢迎使用MNN文档 - MNN-Doc 2.1.1 documentation) 英文文档 MNN知识库 MNN 官方仓库 二.相关介绍 1. MNN简介 M ...
- Android 系统简单介绍
Android 系统简单介绍 2011年11月20日 写这篇文章的目的是为了给那些刚刚入手安 卓手机的新手们一些参考,希望他们能快速的上手 [第一期]ANDROID基础知识1~20 [第二期]继续泡! ...
- Android 指纹相关调研
Android 指纹相关调研 背景:公司产品同学提出要接入指纹,用于登录场景,提高转化率,由于之前没接触过指纹,接下来就是指纹的相关调查. 一:指纹的优势 我们传统的登录方式,需要用户输入用户名和密码 ...
最新文章
- 方法总比困难多_只是为了生活
- 高清SDI编码器|上海视涛科技
- JS 二级菜单栏的tab切换
- EMNLP 2020 | 通过Contrast Set评估模型的局部决策边界
- Tomcat中server.xml文件内各节点详解
- 09-03-06 FreeEIM 姗姗来迟
- 服务器网口正在验证身份6,无法使用基本身份验证进行身份验证(示例代码)
- 如何将网格式报表打印成其它样式
- 医疗AI市场三年内规模可达66亿美元,哪些应用最有潜力?| 报告
- 苹果公司的企业文化_标志设计对于企业的重要性,性价比高的标志设计公司分享...
- java socket调试工具_SocketToolV1.0-Java网络TCP调试助手
- mysql-入门教程
- CDIO工程实践 无线充电智能循迹小车制作
- Android学习笔记之百度地图基础知识
- 给Ubuntu配置静态IP地址
- 点滴:日内交易规则参考
- 我做产品的三大思维:发散思维、纵横思维和表里思维(下篇)
- 成为一个好的PHP工程师需要掌握什么技能
- c语言文件断电保护,.如果计算机突然断电,存放在()的信息会丢失。
- 微信公众号运营助手,可以在手机上回复粉丝留言