本文介绍: 首先需要明确DMA-BUF,Dma buffer,ION和DMA-BUF Heap是不同的概念。在Android 多媒体系统中为了减少因不同进程之间内存的多次拷贝而产生的不必要的开销,最直接的想法是希望跟硬件设备进行交互的应用能有一个内存能跟设备驱动程序共享数据,理想情况是这个buffer能够直接是通过memory map得到,并且是物理连续的,这样就能让DMA直接读写这块buffer,减少CPU或者外设来访问内存的开销。
一、DMA-BUF等概念的介绍
首先需要明确DMA-BUF,Dma buffer,ION和DMA-BUF Heap是不同的概念。
在Android 多媒体系统中为了减少因不同进程之间内存的多次拷贝而产生的不必要的开销,最直接的想法是希望跟硬件设备进行交互的应用能有一个内存能跟设备驱动程序共享数据,理想情况是这个buffer能够直接是通过memory map得到,并且是物理连续的,这样就能让DMA直接读写这块buffer,减少CPU或者外设来访问内存的开销。
为此kernel引入了DMA-BUF这个框架(或者说是子系统),来解决CPU和各种不同外设驱动之间buffer共享的问题。
DMA-BUF框架实现了一个dma–buf的文件系统(filesystem),这个文件系统直接通过调用挂载接口挂载到了内核(没有提供挂载节点),每个dma–buf实例,会在文件系统中创建出inode及file,并将fd返回给调用者。调用者通过对file的ioctrl、map等操作,来操作dma–buffer。
也就是说为了实现buffer的共享,DMA-BUF将buffer与file关联起来,通过file来间接的引用和共享buffer, 即 dma–buf 既是块物理 buffer,又是个 linux file。buffer 是内容,file 是媒介,只有通过 file 这个媒介才能实现同一 buffer 在不同驱动之间的流转。
二、基于DMA-BUF框架的内存分配器
三、ION heap和 DMA-BUF heap的区别
对于HEAP堆类型的简单说明:
参考
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。