【问题标题】:Coherent DMA memory on ARMARM 上的相干 DMA 内存
【发布时间】:2016-03-14 14:51:43
【问题描述】:

我是 ARM/Linux 新手,有些事情我不清楚。 (我可能对此完全不感兴趣) 我正在尝试为我的设备驱动程序分配一个连贯的内存(即非缓存或直写的区域)。

所以我尝试在 Linux 中使用 dma_alloc_coherent 来做到这一点。 当我检查页表属性时,我注意到我得到了“可共享设备”内存类型。 缓存策略有几种内存类型,如下链接所示:

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0363e/Cacgehgd.html

我期待我会得到一个不可缓存或直写的内存。 “可共享设备”类型的缓存策略是什么?它与显式不可缓存和直写内存类型有何不同?

【问题讨论】:

    标签: caching memory-management arm


    【解决方案1】:

    实际上,取决于 ARM 架构版本,缓存的内存区域在 DMA 传输后可能是一致的。 AMBA 规范(AXI Coherent Extensions)中有一个扩展,它在另一个主控执行传输后保持缓存内存的一致性,换句话说,在另一个内核或 DMA 执行传输后,您的缓存将具有更新的值(或者至少标签被标记为无效)。

    这意味着,如果 linux 的内核知道您的 ARM 架构版本,它会信任一致性机制来更新缓存,因此页面被标记为可共享。

    有关详细信息,请参阅 ARM 网站上的 ACE 协议规范的问题 D(需要注册)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-14
      • 1970-01-01
      • 1970-01-01
      • 2015-04-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      • 2016-03-31
      相关资源
      最近更新 更多