1.Linux帧缓冲子系统
帧缓冲(FrameBuffer)是Linux为显示设备提供的一个接口,用户可以将帧缓冲看成是显示内存的一种映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反映到屏幕上,这种操作是抽象和统一的,用户不必关心显存的位置、换页机制等具体细节,这些都是由FrameBuffer设备驱动来实现,帧缓冲把显示设备描述成一个缓冲区,允许应用程序通过帧缓冲定义好的接口访问这些图形设备,从而不用关心具体的硬件细节。个人感觉,更抽象一点,帧缓冲从本质上是图形设备的硬件抽象,对于我们开发者而言,帧缓冲是一种显示缓存,向显示缓存写入特定格式的数据就意味着向屏幕输出内容,通过不断向帧缓存中写入数据,显示控制器会自动从帧缓冲中取数据并显示出来。FrameBuffer的设备文件一般是dev/fb0、dev/fb1等,最多支持32个设备,FrameBuffer是个字符设备,主设备号是29,对应于/dev/fb%d设备文件,对于我们驱动工程师而言,FrameBuffer设备和其他的文件没有区别,可以通过配置对FrameBuffer设备文件完成对硬件的参数设置,Framebuffer对应的源文件在linux/drivers/video/目录下。总的抽象设备文件为fbcon.c,在这个目录下还有与各种显卡驱动相关的源文件。
在应用程序中,一般通过将 FrameBuffer 设备映射到进程地址空间的方式使用,比如下面的程序就打开 /dev/fb0 设备,并通过 mmap 系统调用进行地址映射,随后用 memset 将屏幕清空(这里假设显示模式是 1024x768-8 位色模式,线性内存模式):
int fb;
网友评论