Android系统的启动过程
因为Android是基于Linux的,所有,Android系统的启动过程要先启动Linux,再启动Android 的Framework。
一.Android Linux的启动过程:
1.Linux的启动总的来说包括3个过程,即执行BootLoader,操作系统内核初始化,执行第一个程序(Home程序)
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 Framework的启动过程(祥述):
1.zygote的启动过程
zygote是framework启动的第一个进程,之后所有的进程都需要从这里启动。zygote启动流程如下图:
2.SystemServer的启动
SystemServer是zygote启动的第一个进程。它负责着给个应用程序于系统的连接,SystemServer内部会开启各个系统服务,且没个服务开启一个线程,不然AMS,PMS,WMS等。其启动流程如下