近期换了工作,做的是系统定制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,再从虚拟机传递给上层,上层拿到照片之后就可以做一些处理了,比如存储、预览。
本文介绍了Android系统的架构和分层,从Linux内核层到应用程序层,重点讲述了Framework层的作用和相机服务的工作流程,强调了HAL层作为硬件抽象层的重要角色。
1229

被折叠的 条评论
为什么被折叠?



