Linux内存从0到1学习笔记(8.10 dma-buf导出器和导入器使用示例 一)

Posted 高桐@BILL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux内存从0到1学习笔记(8.10 dma-buf导出器和导入器使用示例 一)相关的知识,希望对你有一定的参考价值。

    前面的博客提到过,dma-buf的使用包括导出器(exporter)和导入器(importer),导出器需要实现并管理dma_buf_ops<dma_buf_ops>中定义的操作,而导入器的操作由结构体dma_buf_attachment<dma_buf_attachment>来提供。

    下面我们以mock_dmabuf_exp.c和mock_dmabuf_imp.c两个驱动模块来理解下dma-buf的极简使用。

一,dma_buf_ops解读

include/linux/dma-buf.h

/**
 * 该结构体中主要定义了针对结构体dma_buf的操作,其中vmap将会为缓冲区创建到内核地址空间的虚拟映射,反之vunmap表示从缓冲区取消vmap映射。
 */
struct dma_buf_ops
    /**
     * 如果为 true,则框架将缓存为每个附件(attachment)创建的第一个映射。这样可以避免多次为附件创建映射。
     */
    bool cache_sgt_mapping;

    /**
     * 用于dma_buf_attach() 调用,以确保给定的 &dma_buf_attachment.dev可以访问提供的 &dma_buf。支持在特殊位置(如 VRAM 或特定设备的分拆区域)缓冲区对象的导出器应检查缓冲区是否可以移动到系统内存(或由提供的设备直接访问),否则需要使附加(attach)操作失败。导出器还应在常规检查中检查当前分配是否满足新设备的 DMA 约束。如果不是这种情况,则无法移动分配&#

以上是关于Linux内存从0到1学习笔记(8.10 dma-buf导出器和导入器使用示例 一)的主要内容,如果未能解决你的问题,请参考以下文章

Linux内存从0到1学习笔记(8.10 dma-buf导出器和导入器使用示例 一)---更新中

Linux内存从0到1学习笔记(8.13 dma内存调试一)

Linux内存从0到1学习笔记(8.13 dma内存调试一)

Linux内存从0到1学习笔记(8.13 dma内存调试一)

Linux内存从0到1学习笔记(8.7 DMA-BUF代码解读)

Linux内存从0到1学习笔记(8.7 DMA-BUF代码解读)