【发布时间】:2014-07-05 08:01:31
【问题描述】:
我正在编写我的第一个 linux 设备驱动程序,但遇到了问题。我想防止一个内存区域被缓存,所以我一直在尝试使用flush_cache_range() 和flush_tlb_range() 来刷新这个内存区域的缓存。一切都编译得很好,但是当我尝试加载内核模块时,出现以下错误:
Unknown symbol flush_cache_range (err 0)
Unknown symbol flush_tlb_range (err 0)
我觉得这很奇怪。它们不应该在内核中定义吗?
我知道我也可以使用dma_alloc_coherent() 来分配非缓存内存区域。但我没有设备结构,为此参数传递 NULL 不会导致任何错误,但我也看不到任何应该存在的数据。
关于我的系统的一些信息:我正试图让它在带有集成 FPGA(Xilinx Zynq)的 ARM 微控制器上运行。 FPGA 将一些数据复制到 CPU 指定的内存位置。现在我想在不从缓存中获取旧数据的情况下访问此内存。
非常感谢任何帮助。
【问题讨论】:
标签: linux-kernel linux-device-driver