欢迎来到天天文库
浏览记录
ID:37917675
大小:370.00 KB
页数:23页
时间:2019-06-02
《android display 框架分析 -》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Androiddisplay架构分析(一)AndroiddisplaySW架构分析*蓝色部分-用户空间应用程序应用程序层,其中包括Android应用程序以及框架和系统运行库,和底层相关的是系统运行库,而其中和显示相关的就是Android的SurfaceManager,它负责对显示子系统的管理,并且为多个应用程序提供了2D和3D图层的无缝融合。*黑色部分-HAL层,在2.2.1部分会有介绍*红色部分-Linuxkernel层Linuxkernel,其中和显示部分相关的就是Linux的FrameBuffer,它是Linux系统中的显示
2、部分驱动程序接口。Linux工作在保护模式下,User空间的应用程序无法直接调用显卡的驱动程序来直接画屏,FrameBuffer机制模仿显卡的功能,将显卡硬件结构抽象掉,可以通过Framebuffer的读写直接对显存进行操作。用户可以将Framebuffer看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由Framebuffer设备驱动来完成的。*绿色部分-HW驱动层该部分可以看作高通显卡
3、的驱动程序,和高通显示部分硬件相关以及外围LCD相关的驱动都被定义在这边,比如上述的显卡的一些特性都是在这边被初始化的,同样MDP和MDDI相关的驱动也都定义在这里 UserSpaceDisplay功能介绍这里的UserSpace就是与应用程序相关的上层部分(参考上图中的蓝色部分),其中与Kernel空间交互的部分称之为HAL-HWAbstractionLayer。HAL其实就是用户空间的驱动程序。如果想要将Android在某硬件平台上执行,基本上完成这些驱动程序就行了。其内定义了Android对各硬件装置例如显示芯
4、片、声音、数字相机、GPS、GSM等等的需求。HAL存在的几个原因:1、并不是所有的硬件设备都有标准的linuxkernel的接口。2、Kerneldriver涉及到GPL的版权。某些设备制造商并不原因公开硬件驱动,所以才去HAL方式绕过GPL。3、针对某些硬件,Android有一些特殊的需求。在display部分,HAL的实现code在copybit.c中,应用程序直接操作这些接口即可,具体的接口如下:structcopybit_context_t*ctx=malloc(sizeof(structcopybit_context_
5、t));memset(ctx,0,sizeof(*ctx));ctx->device.common.tag=HARDWARE_DEVICE_TAG;ctx->device.common.version=0;ctx->device.common.module=module;ctx->device.common.close=close_copybit;ctx->device.set_parameter=set_parameter_copybit;//设置参数ctx->device.get=get;ctx->device.blit=bl
6、it_copybit;//传送显示数据ctx->device.stretch=stretch_copybit;ctx->mAlpha=MDP_ALPHA_NOP;ctx->mFlags=0;ctx->mFD=open("/dev/graphics/fb0",O_RDWR,0);//打开设备 KernelSpaceDisplay功能介绍这里的Kernel空间(与Display相关)是Linux平台下的FB设备(参考上图中的红色部分)。下面介绍一下FB设备。Fb即FrameBuffer的简称。framebuffer是一种能够提取
7、图形的硬件设备,是用户进入图形界面很好的接口。有了framebuffer,用户的应用程序不需要对底层驱动有深入了解就能够做出很好的图形。对于用户而言,它和/dev下面的其他设备没有什么区别,用户可以把framebuffer看成一块内存,既可以向这块内存中写入数据,也可以从这块内存中读取数据。它允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由Framebuffer设备驱动来完成的。从用户的角度看,帧缓冲设备和其他位于/dev下面的设备类似
8、,它是一个字符设备,通常主设备号是29,次设备号定义帧缓冲的个数。在LINUX系统中,设备被当作文件来处理,所有的文件包括设备文件,Linux都提供了统一的操作函数接口。上面的结构体就是Linux为FB设备提供的操作函数接口。1)、读写(read/
此文档下载收益归作者所有