FrameBuffer
文档
https://directfb2.github.io/
https://elinux.org/Porting_DirectFB
http://www.faqs.org/docs/Linux-HOWTO/Framebuffer-HOWTO.html
rgb格式
virtio_gpu
A R G B
透明 红 蓝 绿
白 255 255 255 255
黑 0 0 0 0
常用格式
RGB888(24位)
R->8bit G->8bit B->8bit
RGB565(16位)
R->5bit G->6bit B->5bit
图形格式与显示驱动不一致需转换后正常。
光标
echo -e "\033[?25h"
echo -e "\033[?25l"
说明
帧缓冲,linux下用户态可通过显存映射直接读写操作帧缓冲写屏幕,他是一块连续的物理内存空间,显示屏上的白板。
单个缓冲区直接写屏时会图像闪烁,可以设多个缓冲区,一个写算法,一个显示,算完后直接复制数据。
文件
include/linux/fb.h
Documentation/fb/api.rst
Documentation/driver-api/frame-buffer.rst
#fb_info ,fb_ops ,fb_var_screeninfo,fb_fix_screeninfo
Framebuffer设备文件
/dev/fb0
/dev/graphics/fb0
# cat /sys/class/graphics/fb0/name
virtio_gpudrmfb
cat /sys/class/graphics/fb0/modes
U:800x480p-0
# cat /sys/class/graphics/fb0/bits_per_pixel
32
# cat /sys/class/graphics/fb0/uevent
MAJOR=29
MINOR=0
DEVNAME=fb0
# ls /sys/class/graphics/fb0/device/drm
card0 controlD64 renderD128
# ls /sys/class/graphics/fb0/device/driver/virtio2
device drm graphics power subsystem vendor
driver features modalias status uevent
driver
proc_create("fb", 0, NULL, &fb_proc_fops);
register_chrdev(FB_MAJOR,"fb",&fb_fops)
fb_class = class_create(THIS_MODULE, "graphics");
打开FrameBuffer设备
fbfd = open ("/dev/graphics/fb0", O_RDWR);
映射
ioctrl操作显示屏幕的参
ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo);
ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo);
fb_var_screeninfo:可修改示参数,如分辨率和像素比特数
fb_fix_screeninfo:不可修改参数,显示内存的物理地址和长度
fb_ops:底层硬件操作接口集。