一个ion_heap红黑树,用于管理所有类型ion_heap。ion_heap 持有一个ion_page_pool,在这个资源池子里面控制不同规格的内存块。当heap需要申请的内存时候,将会从ion_page_pool找到对应index下的内存页page划分给heap进行ion_buffer的申请。 ion_client是用户进程在内核层的抽象,即代表一个用户进程。保存了用户进程的名...
1.内存heap 1.1 heap类型 enum ion_heap_type { ION_HEAP_TYPE_SYSTEM,//分配的物理页面不保证是连续的.类似于vmalloc的实现 ION_HEAP_TYPE_SYSTEM_CONTIG,//分配连续的物理页面,类似与kmalloc的实现 ION_HEAP_TYPE_CARVEOUT,//从保留内存分配连续物理页面,且把内存添加到memory pool管理 ION_HEAP_TYPE_CHUNK,...
假如选中的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...
ION_HEAP_TYPE_SYSTEM:头文件中说是通过vmalloc分配,代码中看是直接通过alloc_pages分配的,对应文件ion_system_heap.c。 ION_HEAP_TYPE_SYSTEM_CONTIG:通过kmalloc进行分配,对应文件ion_system_heap.c ION_HEAP_TYPE_DMA:从代码中看是对接的cma分配器,对应文件ion_cma_heap.c ION_HEAP_TYPE_CARVEOUT:对应文件ion...
ion_chunk_heap.c chunk_heap_ops 提供给ion_heap去管理chunk堆的操作接口 chunk_heap创建和销毁 ion_cma_heap.c ion_cma_ops 提供给ion_heap去管理cma堆的操作接口 ion_cma_heap创建和销毁 注:cma所管理的dma内存实际是由另一个模块cma去管理的 ion_heap.c ion_heap map到内核/用户空间接口 堆空闲列...
主要的heap: ION_HEAP_TYPE_SYSTEM: 使用vmalloc分配,这个对应ion_heap_ops中的map_user函数 ION_HEAP_TYPE_SYSTEM_CONTIG: 通过kmalloc分配 ION_HEAP_TYPE_CARVEOUT: 在启动的时候就保留的物理上连续的内存块 另外还有两种,这里不关注: ION_HEAP_TYPE_CHUNK ...
1. ION_HEAP_TYPE_SYSTEM:使用vmalloc分配,这个对应ion_heap_ops中的map_user函数。 2.ION_HEAP_TYPE_SYSTEM_CONTIG:通过kmalloc分配。 3. ION_HEAP_TYPE_CARVEOUT:在启动的时候就保留的物理上连续的内存块。 每个heap中可分配若干个buffer,每个client通过handle管理对应的buffer。每个buffer只能有一个handle对应,每...
主要的heap: ION_HEAP_TYPE_SYSTEM: 使用vmalloc分配,这个对应ion_heap_ops中的map_user函数 ION_HEAP_TYPE_SYSTEM_CONTIG: 通过kmalloc分配 ION_HEAP_TYPE_CARVEOUT: 在启动的时候就保留的物理上连续的内存块 另外还有两种,这里不关注: ION_HEAP_TYPE_CHUNK ...
在ION中,用不同heap代表不同类型的内存,每种heap有自己的内存分配策略。 主要的heap: ION_HEAP_TYPE_SYSTEM: 使用vmalloc分配,这个对应ion_heap_ops中的map_user函数,多页不连续 ION_HEAP_TYPE_SYSTEM_CONTIG: 通过kmalloc分配,伙伴系统 ION_HEAP_TYPE_CARVEOUT: 在启动的时候就保留的物理上连续的内存块 ...
内核驱动也可以注册为一个ION的客户端(client),可以选择使用哪种类型的heap来申请内存。 ion_client_create: 分配一个客户端。 ion_client_destroy: 释放一个客户端及绑定在它上面的所有ion handle. ion handle: 这里每个ion handle映射到一个buffer中,每个buffer关联一个heap。也就是说一个客户端可以操作多块buff...