framework开发一:Android架构

本文介绍了Android系统的架构和分层,从Linux内核层到应用程序层,重点讲述了Framework层的作用和相机服务的工作流程,强调了HAL层作为硬件抽象层的重要角色。

近期换了工作,做的是系统定制framework层开发,回想以前做Android的APP-做Android音视频编解码方向的APP,到现在做Android系统底层开发,觉得还是差别比较大,入门是一个比较困难的过程,这里记录一下学习历程。

Android系统的源代码数量非常庞大,这些代码主要分为4层,从低到高为Linux内核层、系统库层、应用程序框架层和应用程序层,它们分别由驱动工程师、系统工程师、框架工程师和应用程序工程师来开发,而一般来说系统工程师和框架工程师没有严格的区分。

目标

首先,学习目标,很简单也很清晰:了解并掌握Android底层开发模式和方法。

底层开发,其实就是framework层和HAL层的开发。必备技能,Linux、C、C++、Java。

Android系统架构与分层

在这里插入图片描述

整个Android系统是由软件和硬件组成的。

硬件包括CPU等,CPU里面又包含Cache、mmu、GPU、各种总线,这是CPU厂商提供的。
CPU确定之后就是其他硬件的选型了,比如camera的选型、sensor的选型、LCD的选型、memory的选择、存储空间的大小等等,
整个硬件确定之后,就开始搞软件了。

软件部分,从底层到上层一共可以分为以下几个部分:

第一个,UBOOT。
第二个,内核。
第三个,Android的os。

uboot的主要作用就是引导内核的启动,它首先会把内核从flash搬到内存中,然后引导内核启动。
那么,uboot是如何被引导的呢?这其实是由主CPU完成的,CPU内部也会有一段引导程序和一块固化的ROM,这是芯片厂商干的。主芯片一般都会提供几种启动模式,比如从USB启动、吃sd卡启动、从flash启动。这个启动顺序是由GPIO的电频决定的,当决定了从哪里启动,当上电之后,就会从相对应的位置去引导uboot,从而完成uboot的启动。

内核是整个系统的核心,负责进程的管理、内存的管理、网络的管理、可以直接对硬件进行控制并且把硬件全部抽象成文件,对上层提供接口。
当内核启动完成之后,就是根据所设定的启动参数去启动Android系统。

Android系统也是分层的:

1,HAL层,
2,framework c++层,
3,第三方的库文件,
4,虚拟机系统,Dalvik虚拟机、ART虚拟机,
5,framework java层,
6,应用层。

HAL层的主要作用就是把主要的外设抽象出一套标准接口供framework C++ 层调用。
比如说,会把camera抽象出一套接口,如果说底层换了camera驱动或者硬件之后,camera的HAL和framework c++之间是不会发生改变的,改变的部分就是,从HAL到内核之间调用驱动的方式可能会发生改变,但是,framework到HAL之间的标准接口是不会发生改变的。

同理,HAL层的sensor、audio、WiFi等都是类似的。

framework其实分两部分,framework java和framework cpp。

**framework C++**层主要是起一个承上启下的作用,对上是对framework java层提供服务,对下挂接HAL层的camera、audio、sensor、WiFi等外设,并且能够对这些外设提供保护,比如,有两个应用要对camera进行访问的话,但是实际上同一时间只能有一个应用程序对camera进行访问,framework就有一种机制去管理这种访问,确保同一时间只有一个应用程序对camera访问。

Android中还引入了很多第三方的开源库,比如webkit、sqlite、OpenGL等等的第三方的库为系统提供对应功能。

虚拟机,主要是连接上层应用,连接第三方库,连接framework c++层的服务,提供内存的自动化管理,有了虚拟机就可以用java去编写APP。

framework java层提供了activityManager、windowManager、providerManager、packageManager、、、、、以及电源管理、WiFi管理等一系列服务,支撑开发者快速的构建出一个APP,这一部分的代码是开源的,可以根据实际情况去自定义控件,和服务。

最后就是应用层,应用层是运行在虚拟机之上,

一个camera APP从上到下是如何调用的呢?
比如拍一张照片,要想拍照,首先需要获取camera服务,就会从APP调用到framework java层,framework java层会通过虚拟机获取framework c++层的camera服务,如果当前camera有人在占用就会返回null,断开当前连接。如果没有人占用就顺利拿到了camera的访问权限并且获取到camera所支持的属性;然后camera service和HAL层建立连接,拍照命令会一直从APP到framework 到HAL层,HAL层再去调用驱动去控制硬件抓拍一张照片,照片数据会返回给HAL层,再从HAL层返给camera service,再从虚拟机传递给上层,上层拿到照片之后就可以做一些处理了,比如存储、预览。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值