linux ion 分配地址,Android ION内存分配

ION是Linux内核中的内存管理模块,主要用于管理预留的memory pools,以减少内存碎片并支持硬件间的zero-copy内存共享。在Android系统中,ION通过ION heaps提供不同类型的内存分配,如ION_HEAP_TYPE_SYSTEM、ION_HEAP_TYPE_SYSTEM_CONTIG和ION_HEAP_TYPE_CARVEOUT。ION的接口包括分配、释放、物理地址获取等功能。在用户空间,应用通过/dev/ion与ION交互,使用ioctl和mmap进行内存分配和映射。在kernel中,ION支持多客户端,并提供了验证机制防止未授权访问。
摘要由CSDN通过智能技术生成

ION设计的目标

为了避免内存碎片化,或者为一些有着特殊内存需求的硬件,比如GPUs、display controller以及camera等,在系统启动的时候,会为他们预留一些memory pools,这些memory pools就由ION来管理。通过ION就可以在硬件以及user space之间实现zero-copy的内存share。

ION的实现

ION通过ION heaps来展示presents它对应的memory pools。不同的Android硬件可能会要求不同的ION heaps实现,默认的ION驱动会提供如下三种不同的ION heaps实现: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,这种heap带有IOMMU功能。

不管哪一种ION heaps实现,他们都必须实现如下接口:struct ion_heap_ops {    int (*allocate) (struct ion_heap *heap,             struct ion_buffer *buffer, unsigned long len,             unsigned long align, unsigned long flags);    void (*free) (struct ion_buffer *buffer);    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) (struct ion_heap *heap,

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值