您的位置:首页 > 移动开发 > Android开发

Android系统启动流程

2016-06-13 00:00 337 查看
摘要: Android的启动过程可以分为三个阶段bootloader引导、linux内核的启动和启动Android系统。

从系统角度看,Android的启动过程可以分为三个部分,分别是bootloader引导、裝载、启动,启动Linux内核和启动Android系统,下图描述了整个系统的启动过程:



下面介绍设备的启动过程。

1. Bootloader引导

当按下设备电源键时,最先运行的就是bootloader,bootloader的主要作用就是硬件设备(如CPU、flash、内存)的初始化,并通过建立内存空间映射,为装载linux内核做好准备,一旦Linux内核装载完毕,bootloader将会从内存中清除。如果bootloader在运行期间,按下预定义的组合按键,可以进入系统的更新模块:fastboot和Receiver模式。 fastboot是Android设计的一套通过USB来更新分区映像的协议,方便开发人员快速的更新指定分区。Receiver模式是Android特有的升级系统,利用该模式,手机可以恢复出厂设置、ota升级、补丁和固件升级。

2.装载和启动Linux内核

Android系统的升级包update.zip中存在一个boot.img,该镜像就是Linux内核和根文件系统,bootloader会把该镜像装载到内存中,然后linux内核会执行整个系统的初始化,完成后装载根文件系统,最后启动init进程。

3.启动Init进程

Linux内核加载完毕后,会首先启动Init进程,Init进程是系统的第一个进程。在Init进程的启动过程中会解析Init.rc脚本,根据init.rc文件的描述,系统会建立文件系统,初始化属性和启动Android系统重要的守护进程,如adbd,vold等等

4.启动ServiceManager

ServiceManager有Init进程启动。它的主要作用是管理Binder服务,service服务的注册和查找,如ams、pms、ams都是通过ServiceManger来管理。

5.启动MediaServer

MediaServer是由Init进程启动,它包含了一些多媒体binder服务,包括CameraService、MediaPlayerService、AudioPolicyService等等

6.启动Zygote进程

Init进程初始化结束后,会启动Zygote进程。在Android系统中所有的应用程序进程和系统服务进程都是有Zygote进程fork出来的,这就是问什么叫它Zygote(受精卵)的原因。Zygote进程会创建dalivik虚拟机(ps:因为java服务需要通过虚拟机来启动,没有办法通过linux进程启动)、预装载系统的资源文件,所有从Zygote进程fork出的子进程都会共享这些资源,节省了资源加载的时间,提高的应用的启动速度。Zygote启动结束后也会变为守护进程,负责响应启动APK的请求。

7.启动SystemServer

SystemServer是Zygotefork出的第一个子进程,同时也是整个Android系统的核心。在系统中运行的大部分系统服务都是有SystemServer创建。比如SystemServer首先会启动SensorService,接着会启动AMS、WMS、PMS等。

8.启动Launcher

SystemServer加载完所有Java服务后,最后会调用ams的systemReady方法,在这个方法中会发出home-Intent启动Launcher应用,至此运行成功,系统便启动完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息