转 http://hi.baidu.com/leowenj/blog/item/3fe59f740a6fee17b051b991.html
Android display架构分析(二)


下面简单介绍一下上图中的各个Layer
:
*
蓝色部分
-用户空间应用程序
应用程序层,其中包括
Android
应用程序以及框架和系统运行库,和底层相关的是系统运行库,而其中和显示相关的就是
Android
的
Surface Manager,
它负责对显示子系统的管理,并且为多个应用程序提 供了
2D
和
3D
图层的无缝融合。
*
黑
色部分
-HAL
层,在2.2.1
部分会有介绍
*
红色部分
-Linux kernel
层
Linux kernel
,其中和显示部分相关的就是
Linux
的
FrameBuffer
,它是
Linux
系统中的显示部分驱动程序接口。
Linux
工作在保护模式下,
User
空间的应用程序无法直接调用显卡的驱动程序来直接画屏,
FrameBuffer
机制模仿显卡的功能,将显卡硬件结构抽象掉,可以通过
Framebuffer
的读写直接对显存进行操作。用户可以将
Framebuffer
看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由
Framebuffer
设备驱动来完成的。
*
绿色部分
-
HW
驱动层
该部分可以看作高通显卡的驱动程序,和高通显示部分硬件相关以及外围
LCD
相关的驱动都被定义在这边,比如上述的显卡的一些特性都是在这边被初始化的,同样
MDP
和
MDDI
相关的驱动也都定义在这里
这里的User Space
就是与应用程序相关的上层部分(参考上图中的蓝色部分),其中与Kernel
空间交互的部分称之为HAL
-HW Abstraction Layer
。
HAL
其实就是用户空间的驱动程序。如果想要将 Android
在某硬件平台上执行,基本上完成这些驱动程序就行了。其内定义了 Android
对各硬件装置例如显示芯片、声音、数字相机、GPS
、GSM
等等的需求。
HAL
存在的几个原因:
1、
并不是所有的硬件设备都有标准的linux kernel
的接口。
2、
Kernel driver
涉及到GPL
的版权。某些设备制造商并不原因公开硬件驱动,所以才去HAL
方式绕过GPL
。
3、
针对某些硬件,Android
有一些特殊的需求。
在display
部分,HAL
的实现code
在copybit.c
中,应用程序直接操作这些接口即可,具体的接口如下:
struct copybit_context_t *ctx = malloc(sizeof(struct copybit_context_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 = blit_copybit;
//
传送显示数据
ctx->device.stretch = stretch_copybit;
ctx->mAlpha = MDP_ALPHA_NOP;
ctx->mFlags = 0;
ctx->mFD = open("/dev/graphics/fb0
", O_RDWR, 0);
//
打开设备
这里的Kernel
空间(与Display
相关)是Linux
平台下的FB
设备(参考上图中的红色部分)。下面介绍一下FB
设备。
Fb
即FrameBuffer
的简称。framebuffer
是一种能够提取图形的硬件设备,是用户进入图形界面很好的接口。有了framebuffer
,用户的应用程序不需要对底层驱动有深入了解就能够做出很好的图形。对于用户而言,它和/dev
下面的其他设备没有什么区别,用户可以把
framebuffer
看成一块内存,既可以向这块内存中写入数据,也可以从这块内存中读取数据。它允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由Framebuffer
设备驱动来完成的。
从用户的角度看,帧缓冲设备和其他位于/dev
下面的设备类似,它是一个字符设备,通常主设备号是29
,次设备号定义帧缓冲的个数。
在LINUX
系统中,设备被当作文件来处理,所有的文件包括设备文件,Linux
都提供了统一的操作函数接口。上面的结构体就是Linux
为FB
设备提供的操作函数接口。
1
)、读写(read/write
)接口
,即读写屏幕缓冲区(应用程序不一定会调用该接口)
2
)、映射(map
)操作
(用户空间不能直接访问显存物理空间,需map
成虚拟地址后才可以)
由于Linux
工作在保护模式,每个应用程序都有自己的虚拟地址空间,在应用程序中是不能直接访问物理缓冲区地址的。为此,Linux
在文件操作 file_operations
结构中提供了mmap
函
数,可将文件的内容映射到用户空间。对于帧缓冲设备,则可通过映射操作,可将屏幕缓冲区的物理地址映射到用户空间的一段虚拟地址中,之后用户就可以通过读
写这段虚拟地址访问屏幕缓冲区,在屏幕上绘图了。实际上,使用帧缓冲设备的应用程序都是通过映射操作来显示图形的。由于映射操作都是由内核来完成,下面我
们将看到,帧缓冲驱动留给开发人员的工作并不多
3
)、
I/O
控制:
对于帧缓冲设备,对设备文件的
ioctl
操作可读取
/
设置显示设备及屏幕的参数,如分辨率,显示颜色数,屏幕大小等等。
ioctl
的操作是由底层的驱动程序来完成
Note
:上述部分请参考文件
fbmem.c
。
分享到:
相关推荐
高通7系列的硬件架构是Android Display架构的重要组成部分,主要包括以下几个部分: 1. **MDP (Mobile Display Processor)** - MDP是高通MSM7200A内部的一个模块,主要负责显示数据的转换和部分图像处理功能,例如...
#### 二、软件架构分析 ##### Android Display SW 架构简介 软件架构方面,主要分为以下层次: - **用户空间应用程序**(蓝色部分) 应用程序层包含了 Android 应用程序及其框架和系统运行库。其中,与显示系统...
《Android显示框架详细分析》 Android显示框架是一个复杂的系统,涉及到硬件架构、软件架构和流程设计等多个方面。本文将深入探讨这些关键知识点,以便更好地理解Android设备如何呈现图像和视频内容。 首先,让...
本文将从架构图、代码分析和优化建议三个方面对Android WiFi Display功能进行深入分析和讨论。 一、架构图 Android WiFi Display功能的架构图分为两部分,一部分为控制部分,另一部分为数据部分。控制部分通过TCP...
### Android Wifi Display (Miracast) 核心分析 #### 一、概述 在深入探讨Android平台上关于**Wifi Display**(通常称为Miracast)的相关技术之前,我们需要明确几个概念。**Wifi Display**是一种无线显示标准,...
### Windriver针对Android多媒体架构分析 #### Android多媒体架构概述 Windriver在2009年第一次Android技术大会上针对Android系统的多媒体架构进行了深入的探讨与分析。Android作为一个开放且灵活的操作系统,其...
本文将详细探讨全志H5在Android/Linux环境下如何实现display驱动。 一、全志H5显示硬件架构 全志H5集成了GPU(图形处理器),如Mali400或Mali-G31,用于处理复杂的2D和3D图形任务。此外,它还包含LCD控制器,用于与...
#### 二、软件架构分析 Android的显示软件架构可分为以下几层: 1. **用户空间应用程序层**:包括各种Android应用程序、框架以及系统运行库。与显示密切相关的组件是SurfaceManager,它负责管理显示子系统,并实现...
在深入探讨Android原生设置(Setting)的分析之前,我们需要先理解Android系统的基本结构。Android是一个基于Linux内核的操作系统,其应用程序主要由Java编写,使用Android SDK进行开发。原生设置应用(Settings)是...
#### 二、WiFiDisplay的重要标准及标准 WiFi联盟制定了Miracast支持的视/音频格式标准,包括但不限于: - **显示格式**:如VGA、WXGA、720p、1080p等。 - **视频格式**:如H.264、VP8等。 - **音频格式**:如AAC、...
### Android的系统架构详解 #### 一、应用层 (Applications) **应用层**是指由Java编写的、运行在Dalvik虚拟机上的程序。这一层主要包括了预装的应用程序,例如联系人管理、邮件客户端等。此外,开发者也可以利用...
GDI(Graphics Display Interface)是Android图形子系统的核心部分,负责管理和渲染图形内容。显示缓冲管理确保了图形内容的高效更新。 #### AndroidGDI之共享缓冲区机制 共享缓冲区机制使得多个应用程序能够安全...
### Android核心分析——设计意图与方法论探讨 #### 一、设计意图的探索 在深入研究Android之前,首要任务是理解其背后的设计理念。对于一个跨平台开发者而言,熟悉并掌握Android的核心概念至关重要。Android引入...
#### 二、Android核心分析 - **硬件形态**:Android支持多样化的硬件平台,包括不同尺寸的屏幕、处理器架构等,这要求Android具备良好的可移植性和兼容性。 - **软件形态**:从底层的Linux内核到中间层的Java运行...
在Android系统中,"Settings"模块是用户与设备设置交互的核心部分,而"Display settings"则是其中至关重要的一环,它涵盖了屏幕亮度、显示分辨率、屏幕方向等与视觉体验相关的选项。"0001-Android-Settings-display...
### Android原生设置应用架构概览 - **存储位置**:Android自带的应用程序位于`packages/apps`目录下,其中包括资源文件(`res`)、源代码(`src`)和测试代码(`tests`),以及用于编译的`Android.mk`和应用程序...
通过对 Android Framework 的详细分析,我们可以更深刻地理解 Android 操作系统的架构设计和技术特点。从设计者的意图出发,通过抽象思考和逐步深入源代码,我们可以更好地把握 Android 的精髓所在。无论是对于初学...
《Android核心分析》系列文章深度剖析了Android操作系统的关键组成部分与设计思想,对于理解Android系统架构、工作机制以及开发原理具有重要价值。以下是对该系列文章各部分的详细知识点总结: ### 设计意图与方法...
- **GDI简介:** GDI(Graphics Display Interface)是Android图形显示的核心组件,负责图形渲染和显示管理。 - **总体框架:** 描述GDI的整体架构,包括SurfaceFlinger、Surface和Canvas等关键组成部分。 **显示...