在这篇博客里提到:一个简单的想法就是,我们在做 DMA 传输的时候,这段 buffer 我把 cache 给关闭了,这个就是 kernel 实现的一致性的 DMA buffer mapping 的(英文叫做:Consistent DMA mappings )。这里 consistent 的意思是 synchronize 或者 conherent 的意思,CPU 和 DMA 这两个哥们都能同时看到数据的改变,不需要软件做额外的一些 flush 动作。
当然了,对特定的 buffer 关闭了 cache 功能,就会导致 CPU 写时会直接写到 ddr 里而不是写到 cache 里,读时总是从 ddr 里面读而不是 cache 里读。
但我想知道使用dma_alloc_coherent得到的地址,真的底层原理这么简单吗?是不是直接看dma_alloc_coherent的源码实现就能找到答案,但现在看起来有点费劲。