我是ARM / Linux的新手,有些事情我不清楚。 (我可能完全不在此) 我正在尝试为我的设备驱动程序分配一个连贯的mem(即,一个非缓存或直写的区域)。
所以我尝试在Linux中使用 dma_alloc_coherent 来做到这一点。 当我检查页面表属性时,我注意到我得到了“可共享设备”内存类型。 有关缓存策略的内存类型如下所示:
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0363e/Cacgehgd.html
我原以为我会得到一个不可缓存或直写的内存。 “可共享设备”类型的缓存策略是什么?它与显式非可缓存和直写内存类型有何不同?
答案 0 :(得分:0)
实际上,取决于ARM体系结构,在DMA传输之后,缓存的内存区域可能是一致的。 AMBA规范(AXI Coherent Extensions)中有一个扩展,它在另一个主机执行传输后保持缓存内存的一致性,换句话说,在另一个核心或DMA执行传输后,您的缓存将具有更新的值(或者至少标签被标记为无效。)
这意味着,如果linux的内核知道您的ARM体系结构版本,它会信任更新缓存的一致性机制,因此页面被标记为可共享。
有关详细信息,请参阅ARM网站上ACE协议规范的问题D(需要注册)。