【问题标题】:DMA and Cache using at the same timeDMA和Cache同时使用
【发布时间】:2015-03-07 09:41:12
【问题描述】:

当我们同时使用 DMA 和缓存时会发生什么?程序员在使用 DMA 和缓存时需要注意哪些事项?

【问题讨论】:

  • 使用dma_alloc_coherent() 之类的函数,该函数记录在DMA-API-HOWTO.txt 中。请注意,大多数情况下,您可以将用于 DMA 的内存分配为不可缓存。可以缓存其他内存(程序数据)。你可以只缓存一部分内存;这不是全部或没有。

标签: c linux caching linux-kernel cpu-architecture


【解决方案1】:

DMA 将读取和写入内存,而不是缓存。例如,DMA 控制器可以更新一些当前缓存的内存,并且更改不会反映在数据缓存中。或者您可能已经修改了与 DMA 访问的区域相对应的缓存数据。
你必须告诉缓存控制器。它非常依赖于架构
例如,这是使用 ARM 架构上的 CP15 协处理器的寄存器来控制的(参见 http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0464f/CIHDGCBH.html

【讨论】:

  • x86 缓存是 DMA 一致的,这使得在那里开发驱动程序时很容易忽略错误。
猜你喜欢
  • 2018-09-28
  • 1970-01-01
  • 1970-01-01
  • 2019-04-21
  • 2021-08-17
  • 2021-12-31
  • 2010-10-26
  • 2016-09-04
  • 2021-07-19
相关资源
最近更新 更多