Linux Framebuffer的双缓冲机制可能会被禁用,具体取决于以下几个因素:
FBIOGET_VSCREENINFO
ioctl检查capabilities
字段判断驱动支持情况video=xxx:off
参数FBIOPUT_VSCREENINFO
修改相关标志使用fbset命令:
fbset -i
查看输出中是否有双缓冲相关的信息
检查/sys文件系统:
cat /sys/class/graphics/fb0/bits_per_pixel
cat /sys/class/graphics/fb0/virtual_size
编程检查:
#include <linux/fb.h>
// ...
struct fb_var_screeninfo vinfo;
ioctl(fb_fd, FBIOGET_VSCREENINFO, &vinfo);
// 检查vinfo.yres_virtual是否大于vinfo.yres
内核参数:
video=xxx:doublebuffer
video=xxx:off
运行时调整:
struct fb_var_screeninfo vinfo;
ioctl(fb_fd, FBIOGET_VSCREENINFO, &vinfo);
vinfo.yres_virtual = vinfo.yres * 2; // 启用双缓冲
// vinfo.yres_virtual = vinfo.yres; // 禁用双缓冲
ioctl(fb_fd, FBIOPUT_VSCREENINFO, &vinfo);
如果发现双缓冲被禁用且需要启用:
是否需要更具体的某个方面的信息?