Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3037238
  • 博文数量: 674
  • 博客积分: 17881
  • 博客等级: 上将
  • 技术积分: 4849
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-17 10:15
文章分类

全部博文(674)

文章存档

2013年(34)

2012年(146)

2011年(197)

2010年(297)

分类: LINUX

2013-02-19 14:49:27

linux中,framebuffer驱动是标准的显示设备的驱动;对于pc系统,framebuffer驱动是显卡的驱动;对于嵌入式系统的SOC处理器,framebuffer通常作为其LCD控制器或者其它显示设备的驱动。 

     Framebuffer
驱动是一个字符设备,这个驱动在文件系统中的设备节点通常是:/dev/fbX 主设备号是29,次设备号递增生成(由每个Framebuffer程序的注册顺序决定)。 每个系统可以有多个显示设备,使用/dev/fb0/dev/fb1等来表示。 

     Framebuffer
驱动在用户空间大多使用ioctlmmap等文件系统接口进行操作,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 AndroidFramebuffer驱动的使用方式是标准的,在AndroidGUI系统中,通过调用Framebuffer驱动的标准接口实现显示设备的抽象。 

     Android中直接使用标准的Framebuffer驱动,/dev/graphic/中的Framebuffer设备节点由init进程自动创建,被libui库调用 。

http://blog.csdn.net/lamdoc/article/details/7680065

阅读(2829) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~