Linux Framebuffer对应的源文件在linux/drivers/video/目录下。在这个目录下还有与各类显卡驱动相关的源文件。linux
Linux FrameBuffer适配层有如下两个文件很是重要的文件。
web
1. linux/include/linux/fb.h ,包含了几个很是重要的数据结构数据结构
fb_var_screeninfoide
描述了对应的framebuffer当前的配置情况,应用程序能够经过ioctl直接对fb_var_screeninfo中的某些参数进行调整,例如xres、yres、height、width等等。函数
fb_fix_screeninfospa
描述了对应的framebuffer当前的特性,这些特性不能经过ioctl直接修改,只能经过修改fb_var_screeninfo中的某些参数间接调整fb_fix_screeninfo中描述的特性,其中常常关注的特性包括:smem_start、smem_len、line_length,从事QT开发的工程师尤为要注意line_length的值,不然UI界面会出现"诡异"的花屏。接口
fb_cmapci
描述设备无关的颜色映射信息,和调色板的配置相关,若使用DirectFB图形引擎,尤为要考究这个结构的使用,能够经过FBIOGETCMAP 和 FBIOPUTCMAP 对应的ioctl操做设定或获取颜色映射信息。开发
fb_infoit
当前显示设备的综合属性,其成员中有上述三个结构体的实例。
fb_ops
经过该结构体,应用程序能够使用ioctl()系统调用来操做显示设备。
2. linux/drivers/video/fbmem.c
fbmem.c 处于Framebuffer设备驱动技术的中心位置.它为上层应用程序提供系统调用也为下一层的特定硬件驱动提供接口;那些底层硬件驱动须要用到这儿的接口来向系统内核注册它们本身. fbmem.c 为全部支持FrameBuffer的设备驱动提供了通用的接口,避免重复工做.
fbmem.c 中有一个很关键的全局变量:
struct fb_info *registered_fb[FB_MAX] //存放全部入驻的fb_info实例的地址,FB_MAX最大为32.
底层framebuffer驱动一般在xxxfb_probe(...)中,经过上述函数将一个fb_info实例注册到Linux系统中。