2

/dev/fb0我正在尝试在 Linux 机器上读取。

我只是open("/dev/fb0", O_RDWR),然后mmap,然后memcpy从映射的指针。

一切似乎都很好,除了我得到的图像的右上角来自上一帧。

对我来说,这似乎是一个缓存一致性问题。具体来说,我在 GPU 和 CPU 共享内存的 ARM 芯片上运行它。

这是真的吗?mmap在ing 到帧缓冲区之后使缓存无效是常见的做法吗?

如果我需要使内存失效,我应该使用哪个 API 调用?

我正在尝试 TI SDK 中的 Memory.h,但是否有更标准的/Linux/Posix 替代方案?

4

1 回答 1

1

确保 GPU 在 memcpy() 之前完成将数据写入缓冲区。在这种情况下,您不需要使缓存无效,因为新映射的缓冲区不会缓存。如果您怀疑您正在复制任何缓存数据,您可以使用以下 API 使缓存无效:

outer_cache.inv_range()

请参见头文件 arch/arm/include/asm/outercache.h。

于 2016-02-06T19:55:36.823 回答