1Android系统的启动过程
1.1启动过程
Android系统完整的启动过程,可分为Linux系统层、Android系统服务层、Zygote进程模型三个阶段,从开机到启动Home Launcher完成具体的任务细节可分为七个步骤。
1.启动BootLoader
2.加载系统内核
3.启动Init和其它重要守护进程
4.启动Zygote进程
5.启动Runtime进程,初始化Service Manager。Service Manager用于binder通讯,
负责绑定服务的注册与查。
6.启动SystemService
7.启动Home Laucher
8.启动其它应用程序
1.1.1BootLoader
Android 系统是基于Linux操作系统的,所以它最初的启动过程和Linux一样。当设备通电后首先执行BootLoader引导装载器,BootLoader是在操作系统内核运行之前运行的一段小程序。通过这段小程序初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境引导进入合适的状态,以便为最终调用操作系统内核准备好正确的运行环境。
1.1.2启动Init和守护进程
当系统内核加载完成之后,会首先启动Init守护进程,它是内核启动的第一个用户级进程,进程号永远是1。当Init进程启动后,如(图1-1)它还负责启动其他的一些重要守护进程,主要包括:
Usbd进程(USB Daemon):USB连接后台进程,负责管理USB连接。
adbd 进程(Android Debug Bridge Daemon):ADB连接后台进程,负责管理ADB连接。
debuggerd 进程(Debugger Daemon) :调试器后台进程,负责管理调试请求及调试过程。
rild进程(Radio Interface Layer Daemon):无线接口层后台进程,负责管理无线通信服务。
图1-1 Init和其它重要守护进程的启动,图片来源:
www-igm.univ-mlv.fr/~dr/XPOSE2008/android/fonct.html
1.1.3启动Zygote进程
如(图1-2)所示,当Init进程和一些重要的守护进程启动完成之后,将启动Zygote 进程。Zygote进程在系统运行期间,当接收到创建虚拟机请求时,将孵化Dalvik VM实例。
图1-2 Zygote进程的启动
Zygote 进程启动后,首先初始化一个Dalvik VM实例,然后为它加载资源与系统共享库,并开启Socket监听服务,当收到创建Dalvik VM实例请求时,会通过COW(copy on write)技术最大程度地复用自己,生成一个新的Dalvik VM实例。Dalvik VM实例的创建方法基于linux系统的fork原理。Zygote进程孵化Dalvik VM实例流程如(图1-3)所示:
图1-3 Zygote进程孵化Dalvik VM实例流程
1.1.4启动Runtime进程和初始化Service Manager
当Zygote进程启动完成之后,Init进程会启动Runtime进程。Runtime进程首先初始化服务管理器(Service Manager),并把它注册为绑定服务(Binder services)的默认上下文管理器,负责绑定服务的注册与查。
图1-4 Runtime进程启动过程
1.1.5启动系统服务
当Runtime进程启动Service Manager后,将会启动System Service。
System Service的启动流程如下所示:
1)如(图1-5)所示,Runtime进程向Zygote进程发送启动系统服务(System Service)
的请求,Zygote进程收到请求后,会“孵化”出一个新的Dalvik VM实例并启动系统服务进程。
2)如(图1-6)所示,System Service首先启动两个本地服务(由C或C++编写的native
linux系统安装步骤csdn服务): Surface Flinger和Audio Flinger。这两个本地系统服务向服务管理器注册成为IPC服务对象,以便在需要它们的时候很容易查到。
3)如(图1-7所示),System Service然后启动一些Java层的Android系统管理服务,包
括硬件服务和系统框架核心平台服务,并将它们注册成IPC服务对象。这些服务启动的代码位于SystemServer.java的run函数当中。
4)当SystemService加载完所有的系统服务后就意味着系统就准备好了,整个系统的
进程图如(图1-8)。然后SystemService会向所有服务发送一个系统准备完毕(systemready)的广播消息。
图1-5 System Server启动过程
图1-6 Android Native System service的启动
图1-7 Android managed services的启动
图1-8 系统准备完毕
1.1.6启动Launcher
如(图1-9)所示,当ActivityManagerService 接收到systemready广播后,会向Zygoute 进程发送创建Dalvik 虚拟机实例的请求,Zygoute进程会负责生成一个新的Dalvik 虚拟机实例,然后ActivityManagerService在系统中查具有<category android:name = "android.intent.category.HOME"/>属性(在l中声明该属性)的Activity,并启动它,如果到多个具有HOME属相的Activity,如果用户没有将其中一个设置成默认桌面,则会让使用者选择其中一个应用作为Launcher。
图1-9 Launcher启动过程
当启动Launcher之后,整个系统的进程图如(图1-10)所示。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。