Linux Framebuffer对应的源文件在linux/drivers/video/目录下。在这个目录下还有与各种显卡驱动相关的源文件。
Linux FrameBuffer适配层有以下两个文件非常重要的文件。
1. linux/include/linux/fb.h ,包含了几个非常重要的数据结构
fb_var_screeninfo
描述了对应的framebuffer当前的配置状况,应用程序可以通过ioctl直接对fb_var_screeninfo中的某些参数进行调整,例如xres、yres、height、width等等。
fb_fix_screeninfo
描述了对应的framebuffer当前的特性,这些特性不能通过ioctl直接修改,只能通过修改fb_var_screeninfo中的某些参数间接调整fb_fix_screeninfo中描述的特性,其中经常关注的特性包括:smem_start、smem_len、line_length,从事QT开发的工程师尤其要注意line_length的值,否则UI界面会出现"诡异"的花屏。
fb_cmap
描述设备无关的颜色映射信息,和调色板的配置相关,若使用DirectFB图形引擎,尤其要考究这个结构的使用,可以通过FBIOGETCMAP 和 FBIOPUTCMAP 对应的ioctl操作设定或获取颜色映射信息。
fb_info
当前显示设备的综合属性,其成员中有上述三个结构体的实例。
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系统中。
来源:oschina
链接:https://my.oschina.net/u/130864/blog/15325