3

我正在考虑为 DMA 事务分配缓冲区。我读到有两种方法可以做到这一点 - 连贯映射或流映射。

现在,我们想要缓存一致的缓冲区。但是,我们没有做任何分散/收集,所以我们想要dma_map_single调用的好处。我们在 bootargs 中留出了一些连续的内存,所以我们总是有足够的连续内存可用。

所以我想知道,我们可以调用dma_alloc_coherent然后dma_map_single在它之后使用返回的虚拟地址dma_alloc_coherent吗?map single 的返回物理地址将被设置为dma_alloc_coherent在其调用中返回的 dma 句柄。

这有意义吗?或者这样做是多余的/不正确的?

4

1 回答 1

7

你不能同时使用两者。但是您也在尝试解决一个不存在的问题。只需使用dma_alloc_coherent(),它会为您提供一个包含虚拟地址和物理地址的连续 DMA 内存缓冲区。DMA 到物理地址,从 CPU 用虚拟地址访问它。有什么问题?

于 2013-08-02T13:00:48.143 回答