Chinaunix首页 | 论坛 | 博客
  • 博客访问: 257559
  • 博文数量: 69
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 900
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-07 16:35
文章分类

全部博文(69)

文章存档

2011年(1)

2010年(68)

我的朋友

分类: LINUX

2010-08-02 22:06:38

架构介绍


如上图所示,除了上层的图形应用程序外,和Kernel空间有关的包括Linux FB设备层以及和具体HW相关的驱动层,对应的源文件分别是fb_mem.cmsm_fb.cmddi_toshiba.c。下面会一一介绍。

函数和数据结构介绍

这个文件包含了Linux Fb设备的所有接口,主要函数接口和数据结构如下:

A、Fb设备的文件操作接口


B、3个重要的数据结构

   FrameBuffer中有3个重要的结构体,fb.h中定义,如下:

1) frame_var_screeninfo

该结构体定义了显卡的一些可变的特性,这些特性在程序运行期间可以由应用程序动态改变,比较典型的如xrexyres表示在显示屏上显示的真实分辨率、显示的bit数等,该结构体user space可以访问。

2) frame_fix_screeninfo

该结构体定义了显卡的一些固定的特性,这些特性在硬件初始化时就被定义了以后不可以更改。其中最重要的成员就是smem_lensmem_start,前者指示显存的大小(目前程序中定义的显存大小为整屏数据RGB565大小的2倍),后者给出了显存的物理地址。该结构体user space可以访问。

Notesmem_start是显存的物理地址,应用程序是不可以直接访问的,必须通过fb_ops中的mmp函数映射成虚拟地址后,应用程序方可访问。

3) fb_info

FrameBuffer中最重要的结构体,它只能在内核空间内访问。内部定义了fb_ops结构体(包含一系列FrameBuffer的操作函数,Open/read/write、地址映射等).

C、其他

   1)、一个重要的全局变量

struct fb_info *registered_fb[FB_MAX];

这变量记录了所有fb_info 结构的实例,fb_info 结构描述显卡的当前状态,所有设备对应的fb_info 结构都保存在这个数组中,当一个FrameBuffer设备驱动向系统注册自己时,其对应的fb_info 结构就会添加到这个结构中,同时num_registered_fb 为自动加1

2)、注册framebuffer函数

register_framebuffer(struct fb_info *fb_info);

unregister_framebuffer(struct fb_info *fb_info);

这两个是提供给下层FrameBuffer设备驱动的接口,设备驱动通过这两函数向系统注册或注销自己。几乎底层设备驱动所要做的所有事情就是填充fb_info结构然后向系统注册或注销它

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