Android系统的启动过程


因为Android是基于Linux的,所有,Android系统的启动过程要先启动Linux,再启动Android 的Framework。


一.Android Linux的启动过程:


1.Linux的启动总的来说包括3个过程,即执行BootLoader,操作系统内核初始化,执行第一个程序(Home程序)


 

android手机运行环境 安卓运行过程_初始化


2.具体流程如下


2.1首先是开机,系统上电后执行的第一条指令的内存地址是固定的,该地址的程序就

是BootLoader,其作用是装载内核程序。


2.2接着就执行uboot(或者称fastboot),其作用是初始化硬件设备。


2.3接着就是装载Linux内核


2.4接着就开始内核初始化(内核初始化过程如下)


2.4.1cup寄存器配置


2.4.2解压Linux内核


2.4.3CPU页表设置,主要用于虚拟内存等


2.4.4内核数据初始化,配置中断向量表


2.4.5根据init.rc里的配置启动不同的应用程序,第一个启动的程序是第一个用户

级的程序


2.4.6系统正常运行(进程系统调度等)


二.Android Framework的启动过程(概述):




1.android系统相对于Linux内核而言也只是一个应用程序,也是在init.rc里声明。linux内核启动后的下一阶段就是启动Android内核。而Android系统里的每一个程序进程都对应于一个Dalvik虚拟机


2.系统运行的第一个Dalvik进程就是zygote,接下来的所有Dalvik进程都是从它孵出来。


zygote包含两个模块,一个是socket服务端,用于接收其他Dalvik进程的启动请求。一个是framework共享类和共享资源(sdk,资源),在framework的所有Dalvik虚拟机都共享该资源。


3.zygote孵出的第一个Dalvik进程是SystemServer,在其中会创建一个socket客户端,于之前zygote中的socket服务端对应。该socket客户端由AMS管理,之后的Dalvik客户进程都是通过该socket客户端创建。


 


android手机运行环境 安卓运行过程_Android_02



三. Android Framework的启动过程(祥述):


1.zygote的启动过程


zygote是framework启动的第一个进程,之后所有的进程都需要从这里启动。zygote启动流程如下图:


 

android手机运行环境 安卓运行过程_android手机运行环境_03




2.SystemServer的启动

SystemServer是zygote启动的第一个进程。它负责着给个应用程序于系统的连接,SystemServer内部会开启各个系统服务,且没个服务开启一个线程,不然AMS,PMS,WMS等。其启动流程如下

android手机运行环境 安卓运行过程_初始化_04