https://blog.csdn.net/rlk8888/article/details/120115477
在这篇博客里提到:一个简单的想法就是,我们在做 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
的源码实现就能找到答案,但现在看起来有点费劲。
1
zzz22333 2023-08-24 09:16:47 +08:00
可以通过 MMU 配置内存属性为 uncache
|
2
amiwrong123 OP |