我目前正在尝试开发Linux驱动程序以使用FPGA开发的自定义模块。为此,我使用Xilinx Zynq SoC和Linux发行版,它运行在2个ARM内核上,我的VHDL模块在FPGA部分上实现,但这对理解我的问题并不重要。
我的FPGA模块直接写入RAM,我想阅读它用驱动程序写的内容,但由于缓存内存,我遇到了问题。驱动程序从缓存而不是RAM读取,因此它读取旧数据。
要定义FPGA可以写入的存储空间,我使用kmalloc函数。你知道我是否可以使用强制读取RAM内存而不是缓存的标志吗?
我看到了两面可能正在寻找的旗帜,但我并不真正理解他们的所作所为:
__ GFP_COLD:请求缓存冷页面,而不是尝试返回缓存热页面。 - >我认为它只是强制使用一个尚未缓存的页面,但之后会缓存它。这是对的吗?
GFP_DMA:看起来我正在寻找exect我读它只会强制使用与DMA兼容的部分内存。
如何禁用使用kmalloc创建的数组的缓存?或者至少如何强制处理器从RAM读取而不是从缓存中读取?
感谢您的帮助!
答案 0 :(得分:2)
我想我今天早上找到了我要找的东西。
我发现了函数dma_alloc_coherent(),它似乎正是我正在寻找的东西。
有关此功能的更多信息,请访问:
https://www.kernel.org/doc/Documentation/DMA-API.txt
在这里: