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_infopmem_datapmem_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相关介绍相关推荐

  1. Android O 前期预研之二:HIDL相关介绍

    在上一篇博客里,大致介绍了下Android O 中treble计划的一些背景与相关基本架构,这一篇中跟大家一起来探讨下HIDL相关的内容. Android HAL类型  在此之前的ANDROID版本当 ...

  2. Android Service服务的相关介绍

    文章目录 Android Service服务的相关介绍 创建方式 启动方式 生命周期 onStartCommand参数及返回值的理解 ServiceConnection 场景说明 前台服务 问答 st ...

  3. Android Fragment 基本介绍

    Android Fragment 基本介绍 Android Fragment 基本介绍 Fragment Android是在Android 3.0 (API level 11)开始引入Fragment ...

  4. Android Canvas类介绍和Android Draw Rect 坐标图示

    当我们调整好画笔之后,现在需要绘制到画布上,这就得用Canvas类了.在Android中既然把Canvas当做画布,那么就可以在画布上绘制我们想要的任何东西.除了在画布上绘制之外,还需要设置一些关于画 ...

  5. android 内核内存管理,Android内核相关内容总结

    要想充分掌握Android这一操作系统的应用,首先需要我们从Android内核的相关内容开始了解.在这里就为大家详细介绍一下相关的知识. Android操作系统是由谷歌推出的一款基于Linux平台开源 ...

  6. Android项目工程结构介绍

    Android项目工程结构介绍 (1)gradle和.idea Android Studio自动生成的文件,打包的时候一般会删掉再进行打包 (2)app 项目的代码资源都在其中,也是我们工作的核心目录 ...

  7. 阿里MNN推理框架相关介绍

    一.参考资料 MNN官网 中文文档-语雀 欢迎使用MNN文档 - MNN-Doc 2.1.1 documentation) 英文文档 MNN知识库 MNN 官方仓库 二.相关介绍 1. MNN简介 M ...

  8. Android 系统简单介绍

    Android 系统简单介绍 2011年11月20日 写这篇文章的目的是为了给那些刚刚入手安 卓手机的新手们一些参考,希望他们能快速的上手 [第一期]ANDROID基础知识1~20 [第二期]继续泡! ...

  9. Android 指纹相关调研

    Android 指纹相关调研 背景:公司产品同学提出要接入指纹,用于登录场景,提高转化率,由于之前没接触过指纹,接下来就是指纹的相关调查. 一:指纹的优势 我们传统的登录方式,需要用户输入用户名和密码 ...

最新文章

  1. 方法总比困难多_只是为了生活
  2. 高清SDI编码器|上海视涛科技
  3. JS 二级菜单栏的tab切换
  4. EMNLP 2020 | 通过Contrast Set评估模型的局部决策边界
  5. Tomcat中server.xml文件内各节点详解
  6. 09-03-06 FreeEIM 姗姗来迟
  7. 服务器网口正在验证身份6,无法使用基本身份验证进行身份验证(示例代码)
  8. 如何将网格式报表打印成其它样式
  9. 医疗AI市场三年内规模可达66亿美元,哪些应用最有潜力?| 报告
  10. 苹果公司的企业文化_标志设计对于企业的重要性,性价比高的标志设计公司分享...
  11. java socket调试工具_SocketToolV1.0-Java网络TCP调试助手
  12. mysql-入门教程
  13. CDIO工程实践 无线充电智能循迹小车制作
  14. Android学习笔记之百度地图基础知识
  15. 给Ubuntu配置静态IP地址
  16. 点滴:日内交易规则参考
  17. 我做产品的三大思维:发散思维、纵横思维和表里思维(下篇)
  18. 成为一个好的PHP工程师需要掌握什么技能
  19. c语言文件断电保护,.如果计算机突然断电,存放在()的信息会丢失。
  20. 微信公众号运营助手,可以在手机上回复粉丝留言

热门文章

  1. HashMap、TreeMap、Hashable和LinkedHashMap
  2. MyBatis mapper文件中使用常量
  3. Handler Bundle Runnable
  4. 函数的作用域(嵌套函数的运行)
  5. 虚拟机网络设置方法——转载
  6. jquery-validation插件
  7. python文件压缩
  8. 《Java程序书面采访猿收藏》之 instanceof的作用是什么
  9. std::string用法总结
  10. 虚拟主机传奇服务器,虚拟主机市场迅猛发展 演绎网络产品传奇