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

Posted 高桐@BILL

tags:

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

        除了前面介绍的非常重要的导出器操作管理结构体dma_buf_ops,我们再来了解下设备缓冲区的附着数据(attachment data)的结构体以及共享缓冲区对象的构成结构体dma_buf。

一,dma_buf_attachment解读

dma_buf_attachment结构体中持有设备缓冲区的附件数据。

include/linux/dma-buf.h(linux 5.18)

/**
 * 此结构保存dma_buf缓冲区与其用户设备之间的附件信息或连接信息。该列表包含附加到缓冲区的每个设备的一个附件结构。
 * 通过调用 dma_buf_attach() 创建附件,并通过调用 dma_buf_detach() 再次释放。启动传输所需的 DMA 映射本身由 dma_buf_map_attachment() 创建,并通过调用dma_buf_unmap_attachment() 再次释放。
 */
struct dma_buf_attachment 
	struct dma_buf *dmabuf;//当前设备附件所对应的缓冲区
	struct device *dev;//附件上面缓冲区的设备
	struct list_head node;//dma_buf_attachment的列表,受dmabuf的dma_resv锁保护。
	struct sg_table *sgt;//缓存的映射
	enum dma_data_direction dir;//缓存的映射的目录
	bool peer2peer;//如果导入器可以在没有内存页的情况下处理对等资源,则为 true
	const struct dma_buf_attach_ops *importer_ops;//表示导入器针对当前附件的操作,如果提供dma_buf_map/unmap_attachment()&

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

Linux内存从0到1学习笔记(8.11 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代码解读)