ION_HEAP_TYPE_SYSTEM_CONTIG:使用kmalloc分配,物理地址连续。 ION_HEAP_TYPE_CARVEOUT:从预留的堆中分配连续物理内存。 ION_HEAP_TYPE_CHUNK:分配的是固定大小的内存,按2^n * 4K(页面大小)对齐。 ION_HEAP_TYPE_DMA:通过DMA API操作。 ION_HEAP_TYPE_CMA_RESERVED:通过 CMA(Contiguous Memory Allocator)分配内...
ION_HEAP_TYPE_DMA,//cma ION_HEAP_TYPE_CUSTOM, //must be last so device specific heaps always are at the end of this enumare at the end of this enum }; ION_HEAP_TYPE_SYSTEM:通过vmalloc分配,代码中看是直接通过alloc_pages分配的,对应文件ion_system_heap.c。 ION_HEAP_TYPE_SYSTEM_CONTIG:...
* ion设备的heaps链表中,链接了ion设备等的所有heaps,比如system heap、cma heap、carveout heap等 * 通过遍历所有的heap,找到匹配上用户传递过来的参数中指定的heap(比如heap id),主要就是heap id。heap id在每个heap添加到ion dev时自动分配的。 * 表示中哪个heap去分配 */plist_for_each_entry(heap, &dev-...
flags字段是一个位掩码,指示要从中分配的一个或多个ION-heap,并根据在引导期间调用ion_device_add_heap()首次添加的ION-heap来排序回调。在默认实现中,ION_HEAP_TYPE_CARVEOUT被添加到ION_HEAP_TYPE_CONTIG之前。ION_HEAP_TYPE_CONTIG | ION_HEAP_TYPE_CARVEOUT的标志表明了从ION_HEAP_TYPE_CARVEOUT分配并回调...
ION是一个内存管理器,负责管理不同类型的内存堆(heap),每种类型的内存由不同的内存分配器进行分配。这些内存堆包括但不限于:系统内存(vmalloc)、连续系统内存(kmalloc)、预保留的物理连续内存(carveout)、DMA内存(cma)以及自定义内存。ION的类型定义在内核驱动中,位于`driver/staging/android/...
ION_HEAP_TYPE_DMA,//从伙伴系统分配连续物理内存,一般通过CMA内存来实现 ION_HEAP_TYPE_CUSTOM, /* //平台商自定义heap类型,可以自定义内存分配方式. * must be last so device specific heaps always * are at the end of this enum */ ION_NUM_HEAPS = 16, ...
Heap: ⽤来表⽰内存分配的相关信息,包括id, type, name等。⽤struct ion_heap表⽰。Client: Ion的使⽤者,⽤户空间和内核控件要使⽤ION的buffer,必须先创建⼀个client,⼀个client 可以有多个buffer,⽤struct ion_buffer表⽰。Handle: 将buffer该抽象出来,可以认为ION⽤handle来管理buffer,...
- cma-heap: 分配连续的物理内存域,reg的值需要是u32的整数 - reg0: cma 域的基地址 - reg1: cma 域的空间大小 - system-heap: 分配连续的虚拟内存域 3、例子 ion { compatible = "rockchip,ion"; #address-cells = <1>; #size-cells = <0>; ...
1.调用ion_heap的allocate 2.调用ion_heap的map_dma 3.ion_buffer_fault_user_mappings判断当前的buffer是否设置了GRALLOC_USAGE_SW_READ_RARELY,对应顶层就是USAGE_SW_READ_RARELY。也就是读写很少的图元GraphicBuffer。只有打开这个才会为buffer设置vmalloc在动态映射区映射内存(这个高端内存区域的物理内存不连续,虚拟...
内核驱动也可以注册为一个ION的客户端(client),可以选择使用哪种类型的heap来申请内存。 ion_client_create: 分配一个客户端。 ion_client_destroy: 释放一个客户端及绑定在它上面的所有ion handle. ion handle: 这里每个ion handle映射到一个buffer中,每个buffer关联一个heap。也就是说一个客户端可以操作多块buff...