Framebuffer概述:
帧缓冲类似一个蓄水池,存放来自用户进程的数据,然后把这些数据再输入显示设备中。对于用户而言,帧缓冲就是内存中的一块区域,可以读、写、映射。只要在初始化阶段把显示设备映射到用户进程空间,可以理解为将屏幕中的每一点和帧缓冲的每一点一一对应起来。这样接下来就可以对这块内存区域填充任何已经定义的像素以及颜色,而屏幕也就可以根据刚才写入的像素及颜色呈现出五彩缤纷的画面
Framebuffer在用户空间内使用的数据结构主要有fb_fix_screeninfo和fb_var_screeninfo,它们的主要内容如下:
struct fb_fix_screeninfo {
char id[16]; /* 设备名*/
unsigned long smem_start; /* frame buffer 缓冲区起始地址(物理地址)*/
__u32 smem_len; /* 缓冲区长度*/
__u32 type; /* 设备类型,例如TFT或STN*/ ……
__u32 visual; /* 色彩类型,真彩色、假彩色或单色*/
……
__u32 line_length; /* 屏幕上每行的字节数 */
unsigned long mmio_start; /* IO映射区起始地址(物理地址) */
__u32 mmio_len; /* IO 映射区长度 */
__u32 accel; /* 指出使用的加速卡是哪些特定的芯片 */
__u16 reserved[3]; /* 系统保留*/ }
struct fb_var_screeninfo {
__u32 xres; /* visible resolution 可见分辨率 */
__u32 yres;
__u32 xres_virtual; /* virtual resolution 虚拟分辨率 */
__u32 yres_virtual;
__u32 xoffset; /* 从虚拟分辨率到可见分辨率的偏移量*/
__u32 yoffset;
__u32 bits_per_pixel; /* 像素深度 */
__u32 grayscale; /* 灰度级 */
struct fb_bitfield red;
struct fb_bitfield green;
struct fb_bitfield blue;
struct fb_bitfield transp; /* 透明度 */
__u32 nonstd; /* 非标准像素格式 */
……
__u32 pixclock; /* 像素时钟,单位是皮秒*/
__u32 left_margin; /* 左侧边缘区*/
__u32 right_margin; /*右侧边缘区 */
__u32 upper_margin; /*顶部边缘区 */
__u32 lower_margin;
__u32 hsync_len; /*水平扫描边缘区 */
__u32 vsync_len; /*垂直扫描边缘区 */ ……. }
附上利用framebuffer画出简单图形的代码,亲测可用:
http://blog.sina.com.cn/s/blog_4d32d0b40100gjrp.html
framebuffer了解更多参见: