不同type的heap需要不同的method例如ion_system_heap.c/ion_cma_heap.c去分配; 相同type的heap则需要使用heapid来进行区分 enum ion_heap_ids { INVALID_HEAP_ID = -1, ION_CP_MM_HEAP_ID = 8, ION_SECURE_HEAP_ID = 9, ION_SECURE_DISPLAY_HEAP_ID = 10, ION_SPSS_HEAP_ID = 13, /* Secure ...
ion_heap_type表⽰。[html]view plaincopy 1. /** 2. * enum ion_heap_types - list of all possible types of heaps 3. * @ION_HEAP_TYPE_SYSTEM: memory allocated via vmalloc 4. * @ION_HEAP_TYPE_SYSTEM_CONTIG: memory allocated via kmalloc 5. * @ION_HEAP_TYPE_CARVEOUT: mem...
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...
假如选中的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_CHUNK:对应⽂件ion_chunk_heap.c ION分配(以system heap为例)⽤户层打开/dev/ion,并通过ioctl调⽤传递分配内存需要的参数,主要是:struct ion_allocation_data { __u64 len; //需要分配的字节数 __u32 heap_id_mask; //需要从哪个heap中分配,heap id是在每个heap添加到ion dev...
.unmap_iommu = ion_system_heap_unmap_iommu, }; Heap ID: 同一种type的heap上当然可以分为若该干个chunk供用户使用,所以ION又使用ID来区分了。例如在type为ION_HEAP_TYPE_CARVEOUT的heap上,audio和display部分都需要使用,ION就用ID来区分。 Heap id用enumion_heap_ids表示。
#endifION_HEAP(ION_IOMMU_HEAP_ID) |ION_HEAP(ION_SYSTEM_CONTIG_HEAP_ID); result = ioctl(mem_info.ion_fd, ION_IOC_ALLOC, &ionAllocData);if(result){ perror("ION_IOC_ALLOC Failed "); close(mem_info.ion_fd);returnresult; }
system_contig_heap 创建和销毁 不同堆通过实现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...
ION_MM_FIRMWARE_HEAP_ID=29, ION_SYSTEM_HEAP_ID=30, ION_HEAP_ID_RESERVED=31 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ }; enumion_fixed_position{ NOT_FIXED, FIXED_LOW, /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ ...
ION_HEAP_TYPE_SYSTEM_CONTIG: 通过kmalloc分配内存 ION_HEAP_TYPE_CARVEOUT: 在保留内存块中(reserve memory)分配内存 ION_HEAP_TYPE_CUSTOM: 由客户自己定义 image 下图是两个client共享内存的示意图。图中有2个heap(每种heap都有自己的内存分配策略),每个heap中分配了若干个buffer。client的handle管理到对应的buf...