在从帧缓冲区读取之前,我是否需要缓存无效?

时间:2015-03-05 16:11:39

标签: linux caching arm framebuffer arago

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

outer_cache.inv_range()

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