SW快应用服务框架是什么东西的东西有哪些


高通7系列硬件架构分析

高通7系列 Display嘚硬件部分主要由下面几个部分组成:

高通MSM7200A内部模块主要负责显示数据的转换和部分图像处理功能理,如YUVRGB放大缩小、旋转等MDP内部嘚MDP Host的传输(可以完成RGB之间的转换如RGB565转成RGB666,这个转换工能载目前的code 中没有使用

一种采用差分信号的高速的串行数据传输总线,只负责數据传输无其它功能;其中的MDDI Hosat提供并行数据和串行数据之间的转换和缓冲功能。由于外面是VGA的屏幕数据量较大,为了减少对EBI2总线的影響传输总线使用MDDI,而非之前的EBI2

由于现在采用的外接LCD并不支持MDDI接口,故需要外加MDDI转换器即MDDI Controller功能,可以完成其它一些数据处理的功能洳数据格式转换、支持TV-OUTPIP等;并且还可以提供一定数量的GPIO。目前我们主要用它HOSTMDDI传递过来的显示数据和控制数据(初始化配置等)转换荿并行的数据传递给LCD


上图的原型取自高通的文档,由于原图无法描述现有的架构我在原图的基础了做了些修改,主要是增加了overlay部分叧外其他部分根据现有的软件也做了些许改动。下面先对上图做个大概的介绍后面会针对重点部分做详细的分析。

最上面一层为快应用垺务框架是什么东西程序根据数据类型以及快应用服务框架是什么东西的不同可以分为几种。

第一种是最普通的快应用服务框架是什么東西如UI界面的显示,这部分通常数据类型为RGB格式数据无须再经过特殊的处理。该快应用服务框架是什么东西可以说遍布各个快应用服務框架是什么东西程序几乎是实时存在的。

第二种是针对大块YUV数据的快应用服务框架是什么东西如camera的preview、视频的播放等。该快应用服务框架是什么东西只针对特定的快应用服务框架是什么东西程序开启时通过overlay直接把大块的YUV数据送到kernel显示。

第三种其实和第一种类似只不過由于快应用服务框架是什么东西的需求在显示之前需要对数据进行2D、3D的处理(使用OpenGL、OpenVG、SVG、SKIA),处理之后的流程和普通的显示就没什么差別了一般在Game、地图、Flash等快应用服务框架是什么东西中会用到。

再下一层就是HAL了

再一个是Gralloc模块,注意它是和overlay并列的它包含2个部分,一蔀分是为上层提供pmem的接口另一部分则是对framebuffer进行刷新,这里的framebuffer其实就是UI的数据由此可见上层有2个通道把显示数据送到kernel中,framebuffer是传统的方式overlay是android(éclair以后)后增加的。


这里的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的操作是由底层的驱动程序来完成

如上图所示,除了上层的图形快应用服务框架是什么东西程序外和Kernel空间有关的包括Linux FB设备层以及和具体HW相关的驱动层,对应的源文件分别是fb_mem.c、msm_fb.c、mddi_toshiba.c下面会一一介绍。

自己的一点理解:安卓的display架构是茬linux 的framebuff下增加了不同的平台显卡驱动(比如高通显卡驱动MSM FB)然后基于此开发具体的LCD驱动,目前有三种接口方式分别是lcdc、mipi、midi,可以查看driver\video\msm目录下的驱动文件,比如Toshiba

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


B、3个重要的数据结构

该結构体定义了显卡的一些可变的特性,这些特性在程序运行期间可以由快应用服务框架是什么东西程序动态改变比较典型的如xrex和yres表示在顯示屏上显示的真实分辨率、显示的bit数等,该结构体user space可以访问

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

Note:smem_start是显存的物理地址快应用服务框架是什么东西程序是不可以直接访问的,必须通过fb_ops中的mmp函数映射荿虚拟地址后快应用服务框架是什么东西程序方可访问。

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

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

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

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

 (高通显卡的驱动文件

文件为高通显卡的驱动文件,比较重要的函数接口和数据结构如下:

该文件包含了所有和具体LCD(Toshiba)相关的信息囷驱动重点的数据结构和函数结构如下:

注册LCD设备及driver到系统中去,同时也把LCD的固有信息(大小、格式、位率等)一并注册到系统中去

D、LCD相关控制函数

本部分来看一下快应用服务框架是什么东西层以下,显示数据的流程是怎样的

先来分析一下传统的Linux平台下FB设备是如果调鼡的如下图所示:

上层调用FB API(主要是fb_ioctl())fb_ioctl()会调用具体显卡的驱动,这里是高通的显卡驱动其实就是MDP DMA的驱动,通过MDP DMA把显示数据经MDDI接口送箌外围LCD组件

Note:这里的MDP DMA并不对数据进行任何处理(可以完成简单的格式转换,如RGB565->RGB666)
接下来再分析一下Android平台下显示数据是如何处理的,如丅图所示:
同样上层也是调用FB API不过这里其实把FB bypass了,相当于直接调用的是高通MDP PPP的驱动然后数据经PPP处理后再经MDDI接口送出到外围LCD组件

Kernel部分display嘚初始化包含下面几个步骤:

其中的probe函数会对msm fb进行初始化分配显存等(见msm_fb_probe函数)。


2)、在LCD模块初始化时会先向系统中注册驱动(在mddi_toshiba_lcd_init函数Φ)()

Note:设备和driver的name需要一致才可以绑定;另外如果某些设备不需要让platform的总线来管理,那么只需要注册驱动即可而无须向系统中注册device,洳msm_touch

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

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

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

在典型快应用垺务框架是什么东西中,画屏的一般步骤如下:

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

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

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

3典型快应用垺务框架是什么东西flow分析

在不同快应用服务框架是什么东西程序中,上层的调用会有所不同比如Andriod下会选择快应用服务框架是什么东西程序跳过Linux fb操作层,直接操作显卡驱动层称之为BLT accelerator。

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

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

2、 调用HALΦ的stretch函数直接命令MSM设备提取显存数据然后送入MDP PPP进行处理并经MDDI接口送到外围LCD组件

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

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

当系统同时执行多个快应用服务框架是什么东西程序时Surface Manager会负责管理顯示与存取操作间的互动,另外也负责将2D绘图与3D绘图进行显示上的合成

Client端:快应用服务框架是什么东西程序相关部分。代码分为两部分一部分是由Java提供的供快应用服务框架是什么东西使用的api,另一部分则是由c++写成的底层实现。

2、 Binder部分负责接收上层快应用服务框架是什么東西的各个设置和命令,并反馈状态标志给上层

3、 与底层的交互,负责调用底层接口(HAL)

a、 Binder接收到快应用服务框架是什么东西程序的命令(如创建surface、设置参数等),传递给flinger

b、 Flinger完成对应命令后将相关结果状态反馈给上层。

c、 在处理上层命令过程中根据需要设置event(主要囷显示有关),通知Thread Loop进行处理

d、 Flinger根据上层命令通知底层进行处理(主要是设置一些参数,Layer、position等)

Surfaceflinger的loop函数主要是等待其他接口发送的event,進行显示数据的合成以及显示

native层实现的一个异步消息机制在这个机制中几乎不存在同步锁,所有的处理都是异步的将变量封装到一个消息AMessage结构体中,然后放到队列中去后台专门有一个线程会从这个队列中取出消息然后执行,执行函数就是onMessageReceived这个函数中会有很多分支,鼡于处理不同的消息;在很多类中都会有各种消息post出来而后台的异步消息处理线程又是怎么知道发送给哪个类的onMessageReceived函数处理呢,要搞懂这個问题就需要把谷歌实现的这个异步消息处理框架搞明白,参考文章:

提供给快应用服务框架是什么东西程序的主要接口该接口可以創建一个surface,底层会根据参数创建layer以及分配内存surface相关参数会反馈给上层

处理上层的各个命令,并根据flag设置event通知Threadloop进行处理

  1.  // 检测快应用服务框架是什么东西层是否设置各个标志如果有则通知底层完成对应操作,并通知ThreadLoop做对应的处理  

该接口在Threadloop中被调用负责将所有存在的surface进行合並,OpenGl模块负责这个部分

该接口在Threadloop中被调用,负责将合成好的数据(存于back buffer中)推入在front buffer中然后调用HAL接口命令底层显示。

7)、从3中可知上層每创建一个surface的时候,底层都会同时创建一个layer下面看一下surface及layer的相关属性。

Note:code中相关结构体太大就不全部罗列出来了

参考上面linux下fb设备的軟件架构,可以知道要加入一个新的MDDI 接口的LCM,Driver的工作就是要提供自己的mddi_xxxx.c(在这次porting的过程中为了节省时间,我们直接修改了mddi_toshiba.c)并且完荿和这个lcd相关的HWr的初始化。主要的工作包括:

A、初始化和LCD / LCD背光相关的IO以及电源;

B、编写初始化函数 主要是初始化LCD控制器,这个一般LCD厂商會提供;然后分配显存这个高通release过来的code已经包含这个动作了,最后是初始化一个fb_info的结构体在这里主要是把LCD的一些信息登记进来。

C、把LCD嘚设备以及驱动注册到系统中去(这里因为是替换现有的驱动,所以相关修改的部分不多)

更改一些GPIO的配置以及一些电源的电平配置;然后通过实际测量,确保一下信号正常:

C、控制背光IC的GPIO工作正常(背光不打开无法调试LCD)。

由于硬件在之前Boston load是可以工作的可以认为硬件连接等没有问题,所以只需关注软件部分就行

Display部分软件调试过程如下:

GPIO接口工作正常);

是会亮的(背光的控制比较简单,一个GPIO即鈳);

看出来的反之,如果屏幕没有显示需要用JTAG跟一下mddi_Toshiba.c中的初始化函数是否在开机的时候有被调用过。

目前版本中是根据外围MDDI Bridge中读箌的的厂商号来决定加载哪个驱动模块的。在本次调试中bootloader中可以正确读到厂商号,所以bootloader中对于LCD的初始化是有做的所以屏幕看到的状态僦是LCD初始化后的样子(花屏)但Kernel起来后并没有其他显示,用JTAG跟了后发现Kernel中MODULE INIT中读不到正确的厂商号,所以说后面的driver没有被加载接着發现如果在bootloader中如果不做MDDI Bridge的初始化,的话后面的MODULE INIT就可正常运行该问题目前还没有澄清(现在暂时先把bootloader中的init disable掉)。

初始化正常后屏幕会显礻UI的相关画面,但明显颜色、位置都不对

这个可能是数据类型配置不对导致的,即MDP输出的类型、MDDI配置的类型以LCD接收的类型不匹配导致也有可能是RGB的顺序不对导致(可配置成BGR)。经过调试后把MDP端输出的格式配置成RGB565,同时外围MDDI Bridge以及LCD的input格式也配置成RGB565,这时显示色彩正常了

洳果位置或者方向不对,比如说上下或是左右颠倒可以更改LCD的配置中的扫描方向即可。

后续发现一个问题播放video的时候颜色都是黑白的。

这个问题很容易让人误解按照正常的理解,video decode出来的数据为YCbCrY为亮度信号,CbCr为色差信号如果只有Y信号的话颜色应该就是黑白的。所以囿2个怀疑点一个是decode出来的数据有误,另一个是MDDI Bridge误把输入的YcbCr信号当作RGB信号进行出来这个也是有可能的。但很快第二个怀疑点被排除了(洇为单更改MDDI input格式后还是不能解决问题)

后来又详细的看了显示部分的代码,并用JTAG追踪video播放的时候用的显示接口发现目前所有的显示接ロ输出的格式都是RGB格式,也就是说在通过MDP之前YcbCr已经被转化过;而MDP里的转换功能并没有使用MDP只是被当作一个DMA完成数据的直接传输,文档中叫做Bypasse

显示部分的几个问题这几天通过实际测试澄清了一下,主要是下图中各个模块的使用状况以及HAL层几个模块的调用流程以问题的方式描述如下:

1Ap是怎么进行显示的?

不管有多少个surface最终送到显示部分的只能是屏幕大小数据,surfaceflinger中利用MDP或是GPU进行多个surface的合成处理普通的匼成MDP就可完成,但如果是复杂的比如3D的快应用服务框架是什么东西等就必须使用GPU最终合成的好数据会被送到framebuffer中。

Framebuffer是Linux中为显示数据分配的┅块显存(fb设备中)通常大小是一整个屏幕数据的两倍,对于上层AP而言只需要将要显示的数据丢到framebuffer中就OK了,但此时显示数据并未真正嘚被送到LCD上而是暂存在framebuffer中而已。

4、上层是通过什么方式将显示内容送到framebuffer的

有2个方式(二选一,不会同时在运行):

Note:送数据的时候是2個buffer切换的

它是一个图像处理引擎当需要一些复杂的显示(2D/3D)操作时会用到它。它分为SW方案和HW方案

软件方案就是图中的libagl.so,对应到目前项目Φ是libGLES_android.so,它可以完成简单的2D(文字icon等)处理,通过trace看目前大部分显示操作都是它来完成的

7OpenGL在项目中是如何配置的?

如果该cfg文件为空則只支持default的SW方案。

如果2个方案都在上层将根据实际快应用服务框架是什么东西自行选择使用其一。

}

.NET是微软为下一个十年对

和桌面型软件工程迈出的第一步。.NET包含许多有助于

和内部网快应用服务框架是什么东西迅捷开发的

.NET框架是一个多语言组件开发和执行环境它提供了一个跨语言的统一

。.NET框架的目的是便于开发人员更容易地建立Web快应用服务框架是什么东西程序和

使得Internet上的各快应用服务框架是什么東西程序之间,可以使用Web服务进行沟通从

(Services Framework)和上层的两类快应用服务框架是什么东西模板——传统的Windows快应用服务框架是什么东西程序模板(Win Forms)和基于框架(新托管代码编程模型)的主要原因是什么?

问题发生在已开发了多种技术的整合的一个单一快应用服务框架是什么东西程序的子系统上例如,一个制造企业有不同的系统如库存管理系统,物料清单系统财务总帐系统,所有使用可用于快应用服务框架昰什么东西程序开发的各种技术实现的这些系统需要集成在一起,从而形成一个更高级别的

的组织要做到这一点,快应用服务框架是什么东西程序开发人员必须使用如微 软的

体系结构(CORBA)Java远程方法调用(RMI)等技术。然而这些分布的技术通过已开发的快应用服务框架昰什么东西程序编程语言非常紧密地耦合在一起。

跨语言的互操作性也是受限的例如,如果在Visual C++类已经被创建那么不可能在Visual Basic开发新的类並将其扩展到Visual C++。因此开发者将不得不用每一种项目中用到的语言重新编写同样的逻辑的类。功能的可重用性得到了支持但在早期的技術,真正的代码的可重用性是不可用因此,开发人员不得不学习被用于快应用服务框架是什么东西程序的开发组织用到的所有语言注冊的

。COM组件注册才可以在目标机器上使用的快应用服务框架是什么东西程序。快应用服务框架是什么东西程序必须查找Windows

中查找并加载的COM組件



ClickOnce快应用服务框架是什么东西程序发布者可以根据具体情况决定是否取消签名和散列,开发人员可以以编程方式安装显示自定义署名嘚ClickOnce快应用服务框架是什么东西程序ClickOnce错误对话框支持指向网络上特定于快应用服务框架是什么东西程序的支持站点的链接。

它使开发人員能够针对概念性实体数据模型进行编程,从而减轻他们的编码和维护工作此平台提供了ADO NET Entity Framework、实体数据模型 (EDM)、对象服务、LINQ toEntities、Entity SQL、EntityClient、ADO NET数据服务忣实体数据模型工具。

Windows Communication Foundation提供了改进的互操作性支持增强了部分信任方案中的调试体验,并扩展了集成协议支持以更广泛地快应用服务框架是什么东西于Web 框架.NET 框架 提供开发软件的独立平台内置高度安全的网络系统,相当倚重

以及组件导向程序在这方面它完全取代前者(COM)。

.net框架.NET 框架框架.NET 框架、网络、兼容性等各个方面还大幅提升了.NET快应用服务框架是什么东西程序的运行速度。

框架.NET 构架发行于2002年。它鈳以以一个独立且可重新分发的包的形式或在一个软件发展工具包集中被获得它也是第一个微软Visual Studio .NET的发行版的一部分。

.net框架.NET 框架升级版本发行于2003年。它可以以一个独立的可重新分发的包的形式或在一个软件发展工具包集中被获得它也是第二个微软Visual Studio .NET版本的一部分(也被称莋Visual Studio .NET 2003)。它也是首个被Windows操作系统-Windows Server 2003所内置的.NET框架版本



实例的非.NET的快应用服务框架是什么东西程序可以做到这点。这个新的API对.NET运行库的各种功能包括:多线程、存储器分配、代码加载等,提供了很好的控制它最初是为Microsoft SQL Server能够有效率的使用.NET运行库而设计的,因为MicrosoftSQL Server拥有它自己的日程管理器和存储器管理器

}
还有需要谷歌服务包的游戏多不哆... 还有 需要谷歌服务包的游戏多不多

通俗的说谷歌服务框架就是谷歌服务包和谷歌快应用服务框架是什么东西的基础,没有框架无法使鼡谷歌服务谷歌服务包就是集成了谷歌账户同步等一系列谷歌基础服务。谷歌快应用服务框架是什么东西就不必多解释了什么谷歌图書 谷歌音乐什么的。

你对这个回答的评价是


你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机鏡头里或许有别人想知道的答案。

}

我要回帖

更多关于 快应用服务框架是什么东西 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信