标签:特定 lin 第三方库 选型 开发 如何 content 数据 应用
下图是 Android 系统的分层示意图,我们由底层向上来进行分析。
由硬件工程师进行选型,软件工程师也要根据项目需要给出参考意见。
U-Boot 的主要作用是引导内核启动。首先将内核从 EMMC 中加载到内存,然后启动内核。
我们说内核是由 U-Boot 引导启动的,那么 U-Boot 本身又是如何启动的?这是由 CPU 来完成的,CPU 内部有一个固化的 ROM,内含引导 U-Boot 的程序。这部分工作通常由原厂完成。
CPU 通常会提供几种启动模式,譬如从 USB 启动、从 SD 卡启动、从 EMMC 启动。我们通过控制特定 GPIO 的电平来选择不同的启动模式。
Kernel 是系统的核心,负责进程管理、内存管理、网络管理等。Kernel 可以直接控制硬件,并将硬件抽象成文件,对上层提供接口。当内核启动完成后,就会根据设置的参数来启动 Android 系统。
将主要外设抽象出一套标准的接口,供 Framework(C++) 层来调用。譬如我们更换了 Camera,那么 Hal 向下调用驱动的方式可能改变,但 Hal 提供给 Framework(C++) 的接口是不会改变的。
主要是承上启下的作用,对上给 Framework(Java) 层提供服务,对下挂接 Hal 层的外设,并能对这些外设提供保护(譬如上层同时有两个应用对 Camera 进行访问,但实际上同一时刻只能有一个应用对 Camera 进行访问。Framework(C++) 层中就有对应机制来管理这种访问,以确保同一时刻只有一个应用程序对 Camera 进行访问)
Android 是一个庞大的系统,也引入了很多第三方库。
连接上层应用、底层服务、第三方库,提供自动化管理(尤其是内存管理)。有了 Dalvik 虚拟机,我们就可以用 Java 来写应用,从而提高了开发效率和代码复用性。
提供 Activity Manager、Window Manager、Content Manager、Provide Manager,Sensor Manager 以及包管理、电源管理、WiFi 管理等一系列服务。同时也提供了相应的 Activity 以及进程间通信的方式。
基于 Java 实现,运行在虚拟机之上。每个进程对系统的访问权限也是有要求的。
我们以 Camera 为例来进行分析。如果一个应用程序想拍一张照片,调用过程如下:
应用层调用到 Framework(Java) 层,Framework(Java) 层通过 Dalvik 虚拟机获取 Camera 服务(Framework(C++) 层)。如果此时 Camera 服务被占用,则会断开原连接,并和当前应用建立新连接。这样我们的应用就能获取到 Camera 的访问权限,以及 Camera 所支持的一些属性。
如果我们点击拍照,命令会由上层传递到 Camera 服务(Framework(C++) 层),然后再传递给 Hal 层。Hal 层调用驱动,控制硬件抓拍照片,将数据原路返回,直至应用层。
标签:特定 lin 第三方库 选型 开发 如何 content 数据 应用
原文地址:https://www.cnblogs.com/murongmochen/p/12329427.html