一个ion_heap红黑树,用于管理所有类型ion_heap。ion_heap 持有一个ion_page_pool,在这个资源池子里面控制不同规格的内存块。当heap需要申请的内存时候,将会从ion_page_pool找到对应index下的内存页page划分给heap进行ion_buffer的申请。 ion_client是用户进程在内核层的抽象,即代表一个用户进程。保存了用户进程的名...
int (*phys) (struct ion_heap *heap, struct ion_buffer *buffer, ion_phys_addr_t *addr, size_t *len); struct scatterlist *(*map_dma) (struct ion_heap *heap, struct ion_buffer *buffer); void (*unmap_dma) (struct ion_heap *heap, struct ion_buffer *buffer); void * (*map_kernel...
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:在启动的时候...
假如选中的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...
简单来说,接口的各个函数功能如下:allocate()和free()分别用来从heap中分配或者者释放一个ion_buffer对象 对于物理连续的内存,phys()用来得到ion_buffer对象的物理内存地址及其大小。假如heap没有提供物理连续的内存,那么它也可以不用提供这个接口。其中,ion_phys_addr_t将来会被定义在/include/linux/types.h中的phys...
ION_HEAP_TYPE_SYSTEM: memory allocated via vmalloc_user() ION_HEAP_TYPE_SYSTEM_CONTIG: memory allocated via kzalloc . ION_HEAP_TYPE_CARVEOUT: carveout memory is physically contiguous and set aside at boot. 开发者可以自己实现更多的ION heaps。比如NVIDIA就提交了一种ION_HEAP_TYPE_IOMMU的heap,这种...
allocate()和free()分别用来从heap中分配或者释放一个ion_buffer对象 对于物理连续的内存,phys()用来得到ion_buffer对象的物理内存地址及其大小。如果heap没有提供物理连续的内存,那么它也可以不用提供这个接口。其中,ion_phys_addr_t将来会被定义在/include/linux/types.h中的phys_addr_t替代。
allocate()和free()分别用来从heap中分配或者释放一个ion_buffer对象 对于物理连续的内存,phys()用来得到ion_buffer对象的物理内存地址及其大小。如果heap没有提供物理连续的内存,那么它也可以不用提供这个接口。其中,ion_phys_addr_t将来会被定义在/include/linux/types.h中的phys_addr_t替代。
int (*allocate)(struct ion_heap *heap, struct ion_buffer *buffer, unsigned long len, unsigned long flags); void (*free)(struct ion_buffer *buffer); int (*shrink)(struct ion_heap *heap, gfp_t gfp_mask, int nr_to_scan); long (*get_pool_size)(struct ion_heap *heap); ...
Kernel for the Samsung Galaxy Fold 5G (F907B). Use this to boot TWRP and Magisk-rooted Android. - winnerx/drivers/staging/android/ion/ion.h at master · ianmacd/winnerx