ION是建立在DMA-BUF的基础之上的,ION能够在进程之间、进程和内核之间、设备之间共享内存都归功于DMA-BUF。ION自身有许多heap,不同的heap用来分配不同类型的内存,ION默认使用system heap。内核里的代码可以直接使用ION的接口,为了让用户空间也能使用ION,ION创建了一个设备文件/dev/ion。用户空间可以用各种ioctl命令来...
ION在内核空间和用户空间分别有一套接口,除了作为内存池管理器之外,ION还允许其客户端共享缓冲区,因此它与Linaro (DMABUF)的DMA缓冲区共享框架所处的位置相同。 综上,ION主要功能: 内存管理器:提供通用的内存管理接口,通过heap管理各种类型的内存。 共享内存:可提供驱动之间、用户进程之间、内核空间和用户空间之间的...
分配完内存后返回的handle,CPU不可以直接访问这个buf,因此需要调用ion_share→ion_ioctl通过给定一个handle最终获得这个buffer的唯一id(用于share这个buf的mBufFd);ION_IOC_SHARE 及ION_IOC_IMPORT是基于DMABUF实现的,所以当共享进程获取文件描述符后,可以直接调用mmap来操作共享内存。 ret = ion_share(fd, handle, ...
创建ion_client这里使用的是高通的内核,封装的函数msm_ion_client_create获取ion_client ion_import_dma_buf把shared_fd转化为ion_handle 通过ion_map_kernel传入ion_handle获取到虚拟地址,与用户态的mmap函数功能类似 用户态不同进程共享内存 写一个简单的例子介绍如何在不同进程中进行内存共享 创建socketpair,获取两...
ION. This article takes a look at ION, summarizing its interfaces to user space and to kernel-space drivers. Besides being a memory pool manager, ION also enables its clients to share buffers, hence it treads the same ground asthe DMA buffer sharing framework from Linaro(DMABUF). This ...
首先介绍dma_buf的2个角色,importer和exporter。importer是dma_buf驱动中的图元消费者,exporter是dma_buf驱动中的图元生产者。 这里借用大佬的图片: dma_buf.png ion是基于dma_buf设计完成的。经过阅读源码,其实不少思路和Android的匿名内存有点相似。阅读本文之前就算不知道dma_buf的设计思想也没关系,我不会仔细到每...
ION内存管理简介 https://www.jianshu.com/p/4f681f6ddc3b http://kernel.meizu.com/memory%20management%20-%20ion.html ION,最显著的特点是它可以被用户空间的进程之间或者内核空间的模块之间进行内存共享,而且这种共享可以是零拷贝的。在实际使用中,ION 和 VIDEOBUF2、DMA-BUF、V4L2 等结合的很紧密。本文...
ION_IOC_SHARE 及ION_IOC_IMPORT是基于DMABUF实现的,所以当共享进程获取文件描述符后,可以直接调用mmap来操作共享内存。mmap实现由DMABUF子系统调用ION子系统中mmap回调函数完成。 内核空间 API 内核驱动也可以注册为一个ION的客户端(client),可以选择使用哪种类型的heap来申请内存。
ION_IOC_CUSTOM: 调用用户自定义的ioctl ION_IOC_SHARE 及ION_IOC_IMPORT是基于DMABUF实现的,所以当共享进程获取文件描述符后,可以直接调用mmap来操作共享内存。mmap实现由DMABUF子系统调用ION子系统中mmap回调函数完成。 内核空间 API 内核驱动也可以注册为一个ION的客户端(client),可以选择使用哪种类型的heap来申请...
map_dma()和unmap_dma()分别来用使ion_buffer对象为DMA(Direct Memory Access,直接内存存取。顾名思义,不占用cpu资源,从一个硬件存储区域把一部分连续的数据复制到另一个硬件存储区域)做好准备或者取消做好准备 map_kernel()和unmap_kernel()分别用来把physical memory映射(map)到内核虚拟地址空间(kernel virtual ...