一、初探 Android 系统

时间:2022-01-14 18:35:39

一、Android 系统架构与分层

  下图是 Android 系统的分层示意图,我们由底层向上来进行分析。

  一、初探 Android 系统

 

1. 硬件层

  由硬件工程师进行选型,软件工程师也要根据项目需要给出参考意见。

 

2. 软件层

(1)U-Boot

  U-Boot 的主要作用是引导内核启动。首先将内核从 EMMC 中加载到内存,然后启动内核。

  我们说内核是由 U-Boot 引导启动的,那么 U-Boot 本身又是如何启动的?这是由 CPU 来完成的,CPU 内部有一个固化的 ROM,内含引导 U-Boot 的程序。这部分工作通常由原厂完成。

  CPU 通常会提供几种启动模式,譬如从 USB 启动、从 SD 卡启动、从 EMMC 启动。我们通过控制特定 GPIO 的电平来选择不同的启动模式。

(2)Linux Kernel

  Kernel 是系统的核心,负责进程管理、内存管理、网络管理等。Kernel 可以直接控制硬件,并将硬件抽象成文件,对上层提供接口。当内核启动完成后,就会根据设置的参数来启动 Android 系统。

(3)Android OS

    i. Hal 层

      将主要外设抽象出一套标准的接口,供 Framework(C ) 层来调用。譬如我们更换了 Camera,那么 Hal 向下调用驱动的方式可能改变,但 Hal 提供给 Framework(C ) 的接口是不会改变的。

    ii. Framwork(C )

      主要是承上启下的作用,对上给 Framework(Java) 层提供服务,对下挂接 Hal 层的外设,并能对这些外设提供保护(譬如上层同时有两个应用对 Camera 进行访问,但实际上同一时刻只能有一个应用对 Camera 进行访问。Framework(C ) 层中就有对应机制来管理这种访问,以确保同一时刻只有一个应用程序对 Camera 进行访问)

    iii. ThirdParty Library 第三方库

      Android 是一个庞大的系统,也引入了很多第三方库。

    iv. Dalvik 虚拟机系统

      连接上层应用、底层服务、第三方库,提供自动化管理(尤其是内存管理)。有了 Dalvik 虚拟机,我们就可以用 Java 来写应用,从而提高了开发效率和代码复用性。

    v. Framework(Java)

      提供 Activity Manager、Window Manager、Content Manager、Provide Manager,Sensor Manager 以及包管理、电源管理、WiFi 管理等一系列服务。同时也提供了相应的 Activity 以及进程间通信的方式。

    vi. App 应用层

      基于 Java 实现,运行在虚拟机之上。每个进程对系统的访问权限也是有要求的。

二、一个应用从上到下的调用顺序(以 Camera 为例)

  我们以 Camera 为例来进行分析。如果一个应用程序想拍一张照片,调用过程如下:

1. 获取 Camera 服务。

  应用层调用到 Framework(Java) 层,Framework(Java) 层通过 Dalvik 虚拟机获取 Camera 服务(Framework(C ) 层)。如果此时 Camera 服务被占用,则会断开原连接,并和当前应用建立新连接。这样我们的应用就能获取到 Camera 的访问权限,以及 Camera 所支持的一些属性。

2. Camera 服务已经和 Hal 层建立了联系。

  如果我们点击拍照,命令会由上层传递到 Camera 服务(Framework(C ) 层),然后再传递给 Hal 层。Hal 层调用驱动,控制硬件抓拍照片,将数据原路返回,直至应用层。