gpt4 book ai didi

linux - 如何在内核模块中禁用高速缓存

转载 作者:太空狗 更新时间:2023-10-29 12:12:50 26 4
gpt4 key购买 nike

我目前正在尝试开发一个 Linux 驱动程序以使用在 FPGA 中开发的自定义模块。为此,我使用 Xilinx Zynq SoC,其 Linux 发行版在 2 个 ARM 内核上运行,我的 VHDL 模块在 FPGA 部分实现,但这对于理解我的问题并不重要。

我的FPGA模块是直接写RAM的,我想用驱动读取它写的东西,但是因为缓存内存问题。驱动程序从缓存中读取而不是从 RAM 中读取,因此它读取的是较旧的数据。

为了定义 FPGA 可以写入的内存空间,我使用了 kmalloc 函数。你知道我可以用来强制从 RAM 内存而不是缓存读取的标志是否存在吗?

我看到了 2 个可能是我正在寻找的标志,但我并不真正理解它们的作用:

__GFP_COLD :请求缓存冷页面而不是尝试返回缓存热页面。 --> 我认为它只是强制使用尚未缓存的页面,但随后会缓存它。对吗?

GFP_DMA : 看来我正在寻找 exect 我读到它只强制使用与 DMA 兼容的内存部分。

如何禁用对使用 kmalloc 创建的数组的缓存?或者至少我如何强制处理器从 RAM 中读取而不是从缓存中读取?

感谢您的帮助!

最佳答案

我想我今天早上找到了我要找的东西。

我发现了函数 dma_alloc_coherent(),它似乎完全符合我的要求。

有关此功能的更多信息可在此处找到:

https://www.kernel.org/doc/Documentation/DMA-API.txt

在这里:

https://www.kernel.org/doc/Documentation/DMA-API-HOWTO.txt .

关于linux - 如何在内核模块中禁用高速缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36130121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com