我正在尝试从Linux机器上的/dev/fb0
读取。
我只是open("/dev/fb0", O_RDWR)
,然后是mmap
,然后来自映射指针的memcpy
。
一切似乎都很好,除了我得到的图像的右上角是来自前一帧。
这对我来说似乎是一个缓存一致性问题。具体来说,我在ARM芯片上运行它,GPU和CPU共享内存。
这是真的吗?通常的做法是在mmap
到帧缓冲区之后使缓存无效吗?
如果我需要使内存无效,我应该使用哪个API调用?
我正在从TI的SDK中尝试Memory.h,但是有更标准的/ Linux / Posix替代方案吗?
答案 0 :(得分:1)
确保GPU在memcpy()之前将数据写入缓冲区。在这种情况下,您不需要使缓存无效,因为不会缓存新的mmapped缓冲区。如果您怀疑正在复制任何缓存数据,则可以使用以下API使缓存无效:
outer_cache.inv_range()
参见头文件arch / arm / include / asm / outercache.h。