DMA缓存共享机制

DMA缓存共享机制
一、共享的DMA缓存
应用:1.将视频流解码成适合图像渲染和显示的缓存格式。
2.相机捕获到适合编码和渲染的缓冲区。
要求:
1.支持添加到现存的内核子系统。
2.有允许将常见像素格式和页映射到多设备的硬件。
二、为什么要用DMA缓存共享机制
在不同设备和子系统间共享DMA缓存的统一机制目前还没有形成
不同的解决方案:
1.V4l2拥有“USERPTR”机制,对于不同的设备的内存的访问需要进行用户空间进行映射。
2.同样,wayland和x11拥有他们自己的机制,不过仅仅是在 client and compositor之间共享缓存。
3.其他的SoC提供商,框架和子系统也有他们自己的共享缓存的方法。
存在的问题:
1.在V4l2中,用户空间映射可能是必须的,但是这可能会因为内核空间和用户空间的来回震荡造成overkill。
2.目前还没有统一的共享API,因此没有统一的共享方式。
三、什么是 dma_buf API
用于共享缓冲区的通用内核级框架。
定义新的缓冲区对象,该对象提供导出和使用共享缓冲区的机制。
提供统一的API,允许与缓冲区共享相关的各种操作。

四、dma_buf中定义的operations
attach()
这是一个可选的op,它可以允许导出器收集有关连接设备的信息,它们对缓冲区的需求(如支持存储约束等),然后相应地做出决定。
如果导出器无法满足请求设备的需要,也可以用于返回错误。
detach()
这是一个可选的op,它可以允许导出器决定是否需要迁移后备存储,以及根据仍然连接的设备的更新需求对缓冲区做出类似的决定。

map_dma_buf()
强制性dma_buf_op。
导入设备用于向导出器指示启动DMA访问的请求。
返回已分配的分散页面列表,映射到设备地址空间中。
在调用map_dma_buf()之前,必须至少调用一个attach。
应该增加这个缓冲区的引脚数。

unmap_dma_buf()

强制性dma_buf_op。
导入设备用于向出口商指示DMA访问的结束。
应减少此缓冲区的使用次数。
可能取消固定缓冲区(允许它在内存中移动,换出等)…虽然出于性能原因预计导出器不会不必要地迁移缓冲区。
一旦所有当前用户都放弃了访问权限,导出器可能会决定在平台上根据需要和可能迁移缓冲区存储
五、Buffer Exporter

实现和管理缓冲区上的所有操作
允许其他用户使用dma_buf共享API共享缓冲区
管理内存后备存储的实际分配
可选地,如果可能,在平台上,如果需要,负责散布列表的迁移。
六、Buffer Importer (user)
是一个(可能很多)共享缓冲区的用户。
不关心缓冲区分配的情况和方法。
需要一种机制来访问构成内存中此缓冲区的分散列表,以便它可以访问它。
七、API
dma_buf_export():
●用于宣布导出缓冲区的愿望
●连接导出器的缓冲区私有元数据,此缓冲区的缓冲区操作实现以及关联文件的标志。
●返回dma_buf对象的句柄以及上述所有相关信息。
dma_buf_fd():
●返回与dma_buf对象关联的FD。
●然后,用户空间将FD传递给参与共享此dma_buf对象的其他设备/子系统。
dma_buf_get():
由导入设备用于获取与FD关联的dma_buf对象
dma_buf_attach():

导入设备可以使用dma_buf对象附加自身。
在dma_buf对象共享开始时调用一次。
如果由出口商提供,可以调用attach()dma_buf_op。
返回struct dma_buf_attachment ptr
dma_buf_map_attachment():
由导入设备用于请求访问缓冲区,以便它可以执行DMA。
内部调用exporter提供的map_dma_buf()dma_buf_op。
返回一个sg_table,其中包含映射在导入设备地址空间中的分散列表。
dma_buf_unmap_attachment():
DMA访问完成后,设备会告诉导出器当前
通过调用此API完成请求的访问。
内部调用导出器提供的unmap_dma_buf()dma_buf_op。
dma_buf_detach():

在需要访问此dma_buf对象时,导入器设备会告诉导出器其意图从当前共享中“分离”。
如果出口商提供,可以调用detach()dma_buf_op。
dma_buf_put():
调用dma_buf_detach()后,通过调用dma_buf_put()减少此缓冲区的引用计数。
八、dma_buf usage flow

在这里插入图片描述
————————————————
版权声明:本文为CSDN博主「stoneboy_z」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/stoneboy_z/article/details/88615561

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值