Android系统启动过程

来源:互联网 发布:天音网络发展有限公司 编辑:程序博客网 时间:2024/06/11 12:53

摘自:《深入解析Android5.0系统》

  Android的启动过程可以分为bootloader引导、装载和启动Linux内核、启动Android系统三个大的阶段。
  其中Android系统的启动还可以细分为启动Init进程、启动Zygote进程、启动SystemService、启动SystemServer、启动Home等多个阶段。

Android启动过程如图所示:

这里写图片描述

下面简单介绍设备的启动过程

   1.Bootloader引导
   当我们按下手机的电源,最先运行的就是bootloader。bootloader的主要作用是初始化基本的硬件(如cpu、内存、Flash等)并且通过建立内存空间映射,为装载Linux内核准备好合适的运行环境。一旦Linux内核装载完毕,bootloader就会从内存中清除掉。
   如果用户在Bootloader运行期间,按下预定义的组合键,可以进入系统的更新模块。Android的下载更新可以选择进入Fastboot模式或者Recover模式。
   FastBoot是Android设计的一套通过USB来更新手机分区映像的协议,方便开发人员能快速更新指定的手机分区。
   Recovery模式是Android特有的升级系统。利用Recovery模式,手机可以进行恢复出厂设置,或者执行OTA、补丁和固件升级。进入Recovery模式实际上是启动了一个文本模式的Linux。

   2.装载和启动Linux进程
   Android的boot.img存放的就是Linux内核和一个根文件系统。Bootloader会把boot.img映象装载进内存。然后Linux内核会执行整个系统的初始化,完成后装载根文件系统,最后启动Init进程。

   3.启动Init进程
   Linux内核加载完毕后,会首先启动Init进程,Init进程是系统的第一个进程。在Init进程的启动过程中,会解析Linux的配置脚本init.rc文件。根据init.rc文件的内容,Init进程会装载Android的文件系统、创建系统目录、初始化属性系统、启动Android系统重要的守护进程,这些进程包括USB守护进程、adb守护进程、vold守护进程、rild守护进程等。
   4.启动ServiceManager
   ServiceManager由Init进程启动。它的主要作用是管理Binder服务,负责Binder服务的注册与查找。

   5.启动Zygote进程
   Init进程初始化结束时,会启动Zygote进程。Zygote进程负责fork出应用进程,是所有应用进程的父进程。Zygote进程初始化时会创建Dalivik虚拟机、预装载系统的资源文件和Java类。所有从Zygote进程fork出来的用户进程将继承和共享这些预加载的资源,不用浪费时间重新加载,加快了应用程序的启动过程。启动结束后,Zygote进程也将变为守护进程,负责响应启动APK应用程序的请求。

   6.启动SystemServer
   SystemServer是Zygote进程fork出的第一个进程,也是整个Android系统的核心进程。在SystemServer中运行着Android系统大部分Binder服务。SystemServer首先启动本地服务SensorService;接着启动包括ActivityManagerService、WindowManagerService、PackManagerService在内的所有Java服务。
   7.启动MediaServer
   MediaServer由Init进程启动。它包含了一些多媒体相关的本地Binder服务,包括:CameraService、AudioFlingerService、MediaPlayerService和AudioPolicyService。
   8.启动Launcher
   SystemServer加载完所有Java服务后,最后会调用ActivityManagerService的SystemReady()方法。在这个方法的执行中,会发出Intent“android.intent.category.HOME“。凡是响应这个Intent的apk应用都会运行起来,Launcher应用是Android系统默认的桌面应用,一般只有它会响应这个Intent,因此,系统开机后,第一个运行的应用就是Launcher。