当前绝大多数开源图形界面库都是基于framebuffer编写,了解framebuffer的使用,可以方便的将一个图形界面库移植到SylixOS下,此外framebuffer还可以方便的用来测试硬件驱动。
framebuffer中文名称为帧缓冲,framebuffer是SylixOS系统为显示设备提供的一个标准设备接口模型,它将显示缓冲区抽象,屏蔽图形硬件的底层差异,允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。用户不必关心物理显示缓冲区的具体位置及存放方式,这些都由framebuffer设备驱动本身完成。对于framebuffer设备而言,只需要在framebuffer中与显示点对应的区域写入颜色值,对应的颜色会自动在屏幕上显示。
例如具备LCD控制器的处理器在打开framebuffer设备后,DMA控制器会持续将内存中的数据送到LCD控制器,LCD控制器将得到的数据配以时钟和场行信号送往LCD显示设备,LCD像素点根据得到的数据显示相应颜色组成显示图像。
framebuffer显示原理
显示器一般是一块矩形区域,每个像素点都有其对应的二维坐标(x,y)。在内存中的一块存储区域往往是一维的一段线性地址(addr)。内存中的地址与显示器上的像素坐标对应关系一般如公式所示:
addr = y*显示器一行的像素点 + x;(0< x <行像素点,0< y <列像素点 )
显示器的(0,0)坐标是在显示器的左上角,而不是数学中常用坐标系的左下角。
示例:在屏幕上,使用 framebuffer 显示白、灰、黑条纹,并绘制一条直线
实现: