目录
代码引入
5.6内核后引入
drivers\dma-buf\heaps\cma_heap.c
| kernel\drivers\dma-buf\dma-heap.c | 分配内存的入口 |
| /drivers/dma-buf/rk_heaps/rk-dma-heap.c | 瑞芯微分配内存的入口 |
| \kernel\drivers\dma-buf\dma-buf.c | dma buf mmap的入口 |
以下通过调用链来查看其主要功能。
调用链示例
核心结构体 dma_buf_ops
通过这个结构体,可以了解,cma_heap 作为dma buf的其中一个底层实现,实现了dma buf所要求的各个功能接口,进而在dma buf操作时回调cma heap的接口。
dma buf的底层实现有很多,cma heap只是其中一个。
此结构体的功能接口为: cma buf的应用,包括buffer的attach,用户态映射,内核态映射,以及cache 同步。
static const struct dma_buf_ops cma_heap_buf_ops = {
.attach = cma_heap_attach,
.detach = cma_heap_detach,
.map_dma_buf = cma_heap_map_dma_buf,
.unmap_dma_buf = cma_heap_unmap_dma_buf,
.begin_cpu_access = cma_heap_dma_buf_begin_cpu_access,
.end_cpu_access = cma_heap_dma_buf_end_cpu_access,
.begin_cpu_access_partial = cma_heap_dma_buf_begin_cpu_access_partial,
.end_cpu_access_partial = cma_heap_dma_buf_end_cpu_access_partial,
.mmap = cma_heap_mmap,
.vmap = cma_heap_vmap,
.vunmap = cma_heap_vunmap,
.release = cma_heap_dma_buf_release,
};

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



