在linux中,framebuffer驱动是标准的显示设备的驱动;对于pc系统,framebuffer驱动是显卡的驱动;对于嵌入式系统的SOC处理器,framebuffer通常作为其LCD控制器或者其它显示设备的驱动。
Framebuffer驱动是一个字符设备,这个驱动在文件系统中的设备节点通常是:/dev/fbX 主设备号是29,次设备号递增生成(由每个Framebuffer程序的注册顺序决定)。 每个系统可以有多个显示设备,使用/dev/fb0、/dev/fb1等来表示。
Framebuffer驱动在用户空间大多使用ioctl、mmap等文件系统接口进行操作,ioctl用于获得和设置信息,mmap可以将Framebuffer的内存映射到用户空间。Framebuffer驱动也可以直接支持write操作,直接用写的
方式输出显示内容。
Framebuffer驱动的主要头文件:include/linux/fb.h
Framebuffer驱动核心实现:drivers/video/fbmem.c
Framebuffer驱动中核心的数据接口是fb_info,在fb.h中定义 struct fb_info { int node; int flags;struct fb_var_screeninfo var; /* 变化屏幕信息 */ struct fb_fix_screeninfo fix; /* 固定屏幕信息 */ ... struct fb_ops *fbops; ...}
struct fb_info包含了framebuffer驱动的主要信息,struct fb_var_screeninfo和 struct fb_fix_screeninfo 是两个相关的数据结构,通常对应FBIOGET_VSCREENINFO 和 FBIOGET_FSCREENINFO 这两个ioctl从用户空间获得的显示信息。
fb_ops表示framebuffer驱动的操作。 在具体的Framebuffer驱动的实现中,通常能过以下函数进行注册: int register_framebuffer(struct fb_info *fb_info); 具体的Framebuffer驱动需要定义一个实现fb_info结构、实现fb_ops中的各个函数指针。
从驱动程序的用户空间进行ioctl调用时,会转换成调用其中的函数。具体的Framebuffer驱动注册后,将会自动递增一个次设备号。 在配置Linux系统时,Framebuffer驱动的配置选项是:“Device Drivers” > “Graphics support”. 其配置文件为: drivers/video/Kconfig,其中包含了文本模式和控制台、启动图标(Bootup Logo)等 子选项的支持,具体的Framebuffer驱动由每一个平台支持。
Framebuffer驱动是Android中的标准设备,但路径稍有不同,为/dev/graphic/fb0 Android对Framebuffer驱动的使用方式是标准的,在Android的GUI系统中,通过调用Framebuffer驱动的标准接口实现显示设备的抽象。
Android中直接使用标准的Framebuffer驱动,/dev/graphic/中的Framebuffer设备节点由init进程自动创建,被libui库调用 。
http://blog.csdn.net/lamdoc/article/details/7680065
阅读(2803) | 评论(0) | 转发(0) |