android lcd工作原理,Android display架构分析(二)

Display接口介绍

在Android平台下,应用程序面对的显示部分的接口就是HAL,参考copybit.c,具体接口如下介绍:

open_copybit

初始化相关变量,并调用open("/dev/graphics/fb0", O_RDWR,

0);打开fb设备。

set_parameter_copybit

设置各种操作参数,如rotate、alpha、dither等。

stretch_copybit

Copy一块数据(Rectangle)到显存,然后并命令msm_fb进行显示。

close_copybit

调用close(ctx->mFD);关闭fb设备。

Note:另外,应用程序在使用上面接口之前,需要调用mapFrameBuffer接口(EGLDisplaySurface.cpp),其功能如下:

1、初始化显示相关参数,并设置到底层。

2、映射出显存的虚拟地址。

2、Kernel

display接口

Kernel部分显示的接口全部都在fbmem.c中,这里详细介绍一下:

fb_open

打开Linux下fb设备。

fb_read/fb_write

读写显存中的数据

fb_ioctl

对显示设备的命令操作。如get或set一些显示参数、通知底层进行刷屏等。

在典型应用中,画屏的一般步骤如下:

1.

打开/dev/fb设备文件。

2.

用ioctrl操作取得当前显示屏幕的参数,如屏幕分辨率,每个像素点的比特数。根据屏幕参数可计算屏幕缓冲区的大小。

3.

将屏幕缓冲区映射到用户空间。

4.

映射后就可以直接读写屏幕缓冲区,进行绘图和图片显示了。

典型程序段如下:

#include

int main()

{

int fbfd = 0;

struct fb_var_screeninfo vinfo;

struct fb_fix_screeninfo finfo;

long int screensize = 0;

fbfd = open("/dev/fb0", O_RDWR);

ioctl(fbfd, FBIOGET_FSCREENINFO,

&finfo); ioctl(fbfd, FBIOGET_VSCREENINFO,

&vinfo);

screensize = vinfo.xres * vinfo.yres *

vinfo.bits_per_pixel / 8;

fbp=(char*)mmap(0,screensize,PROT_READ|PROT_WRITE,MAP_SHARED,

fbfd, 0);

...

}

在不同应用程序中,上层的调用会有所不同,比如Andriod下会选择应用程序跳过Linux

fb操作层,直接操作显卡驱动层,称之为BLT accelerator。

下面看一下Android平台下画屏的操作流程。

1、通过mapFrameBuffer直接把用户空间的数据映射到显存中。

2、调用HAL中的stretch函数直接命令MSM设备提取显存数据然后送入MDP

PPP进行处理并经MDDI接口送到外围LCD组件。

具体的函数调用流程如下:

copybit_open();//打开BlitEngine,同时也打开fb设备

mapFrameBuffer();//设置显示参数,同时得到显存虚拟地址

copybit->stretch(copybit,

&dst, &src,

&sdrect, &sdrect,

&it);//通知底层去刷屏

接下的流程是:

stretch_copybit->

msm_copybit->

fb_ioctl()->msm_fb_ioctl(MSMFB_BLIT)->

msmfb_blit->

mdp_blit->

mdp_ppp_blit->

mdp_start_ppp->MDP&MDDI HW

operation

Note:

本部分介绍的完全是用户空间显示部分的架构,与kernel并没有直接的联系,主要是JNI以下到HAL以上的部分。

1、Surface

manager(surface

flinger)简介

Surface

manager是用户空间中framework下libraries中负责显示相关的一个模块。如下:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值