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,它可以允许导出器决定是否需要迁移后备存储,以及根据仍然连接的设备的更新需求对缓冲区做出类似的决定。
ma