前面解释了使用dma_buf所涉及的几个重要的结构体,今天我们来介绍下dma_buf使用的具体示例。
mock_dmabuf_exp.c示例
#include <linux/dma-buf.h>
#include <linux/module.h>
#include <linux/slab.h>struct dma_buf *dmabuf_of_exporter;
EXPORT_SYMBOL(dmabuf_of_exporter);//EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,不用修改内核代码就可以在您的内核模块中直接调用,即使用EXPORT_SYMBOL可以将一个函数以符号的方式导出给其他模块使用。
/* mock_dmabuf定义了共享dma_buf对象中,相应的导出器特有的私有数据部分。*/
struct mock_dmabuf {
int npages;
struct page *pages[];
};static struct mock_dmabuf *to_mock(struct dma_buf *buf)
{
return buf->priv;
}static struct sg_table *mock_map_dma_buf(struct dma_buf_attachment *attachment,
enum dma_data_direction dir)
{
struct mock_dmabuf *mock &#