我目前正在尝试开发 Linux 驱动程序以使用在 FPGA 中开发的自定义模块。为此,我使用带有 Linux 发行版的 Xilinx Zynq SoC,该发行版在 2 个 ARM 内核上运行,我的 VHDL 模块在 FPGA 部分上实现,但这对于理解我的问题并不重要。
我的 FPGA 模块直接写入 RAM,我想用驱动程序读取它写入的内容,但由于高速缓存,我遇到了问题。驱动程序从缓存中读取而不是从 RAM 中读取,因此它读取较旧的数据。
为了定义 FPGA 可以写入的内存空间,我使用了 kmalloc 函数。你知道是否存在我可以用来强制从 RAM 内存而不是缓存读取的标志吗?
我看到了 2 个可能是我正在寻找的标志,但我并不真正了解它们的作用:
__GFP_COLD :请求缓存冷页面而不是尝试返回缓存热页面。--> 我认为它只是强制使用尚未缓存的页面,但之后会对其进行缓存。那是对的吗 ?
GFP_DMA :看起来我正在寻找的东西我读它只强制使用与 DMA 兼容的部分内存。
如何禁用对使用 kmalloc 创建的数组的缓存?或者至少我怎样才能强制处理器从 RAM 中读取而不是从缓存中读取?
谢谢您的帮助 !