当前位置: 代码迷 >> Android >> Android display架构分析(3)
  详细解决方案

Android display架构分析(3)

热度:16   发布时间:2016-05-01 18:30:13.0
Android display架构分析(三)

转 http://hi.baidu.com/leowenj/blog/item/76411bf6237dc429bc31099f.html

?

Android display架构分析(三)

?

Kernel Space Display架构介绍


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

fb_mem.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结构然后向系统注册或注销它

  相关解决方案