不同堆通过实现ion_heap_ops让上层去管理 ion用户空间主要操作流程 发送端 fd = open("/dev/ion") // 打开文件设备 "/dev/ion" ioctl(fd, ION_IOC_ALLOC, alloc_data) //分配内存 ioctl(fd, ION_IOC_MAP/ION_IOC_SHARE, fd_data) //把buff映射为文件 mmap(fd_data.fd) // 将映射为文件的buffer...
map_kernel()和unmap_kernel()回调函数将物理内存映射(或unmap)到内核虚拟地址空间。调用map_user()将内存映射到用户空间。没有unmap_user(),因为映射在用户空间中表示为文件描述符。文件描述符的关闭将导致内存从调用进程中被取消映射。 每个heap中可分配若干个buffer,每个client通过handle管理对应的buffer。每个buffer...
假如选中的heap为system heap(ION_HEAP_TYPE_SYSTEM),那么接下来会调用它的allocate函数: static struct ion_heap_ops system_heap_ops = { .allocate = ion_system_heap_allocate, .free = ion_system_heap_free, .map_kernel = ion_heap_map_kernel, .unmap_kernel = ion_heap_unmap_kernel, .map_user...
假如选中的heap为system heap(ION_HEAP_TYPE_SYSTEM),那么接下来会调用它的allocate函数: static struct ion_heap_ops system_heap_ops = {.allocate= ion_system_heap_allocate,.free= ion_system_heap_free,.map_kernel= ion_heap_map_kernel,.unmap_kernel= ion_heap_unmap_kernel,.map_user= ion_heap_m...
int (*map_user) (struct ion_heap *mapper, struct ion_buffer *buffer, struct vm_area_struct *vma); }; ION debug ION 在/sys/kernel/debug/ion/ 提供一个debugfs 接口。 每个heap都有自己的debugfs目录,client内存使用状况显示在/sys/kernel/debug/ion/<<heap name>> ...
http://android.googlesource.com/kernel/omap.git ION 框架[1] ION 定义了四种不同的heap,实现不同的内存分配策略。 ION_HEAP_TYPE_SYSTEM : 通过vmalloc分配内存 ION_HEAP_TYPE_SYSTEM_CONTIG: 通过kmalloc分配内存 ION_HEAP_TYPE_CARVEOUT: 在保留内存块中(reserve memory)分配内存 ...
Heap: ⽤来表⽰内存分配的相关信息,包括id, type, name等。⽤struct ion_heap表⽰。Client: Ion的使⽤者,⽤户空间和内核控件要使⽤ION的buffer,必须先创建⼀个client,⼀个client 可以有多个buffer,⽤struct ion_buffer表⽰。Handle: 将buffer该抽象出来,可以认为ION⽤handle来管理buffer,...
void (*unmap_kernel)(struct ion_heap *heap, struct ion_buffer *buffer); int (*map_user)(struct ion_heap *mapper, struct ion_buffer *buffer, struct vm_area_struct *vma); int (*shrink)(struct ion_heap *heap, gfp_t gfp_mask, int nr_to_scan); ...
void (*unmap_kernel) (struct ion_heap *heap, struct ion_buffer *buffer); int (*map_user) (struct ion_heap *heap, struct ion_buffer *buffer, struct vm_area_struct *vma); }; 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
struct ion_buffer *buffer); void (*unmap_kernel) (struct ion_heap *heap, struct ion_buffer *buffer); int (*map_user) (struct ion_heap *heap, struct ion_buffer *buffer, struct vm_area_struct *vma); }; 简单来说,接口的各个函数功能如下: ...