从这个篇章开始,简单总结下Android系统的启动流程,属于framework学习的基础总结。
先从如下图了解下Android系统的分层:
图解: Android系统启动过程由上图从下往上的一个过程:Loader -> Kernel -> Native -> Framework -> App,接来下按从下到上的顺序简要介绍下每层:
Loader层:激活Kernel。
- 启动电源以及系统启动:当电源按下时引导芯片代码将固化在ROM中的引程序Bootloader加载到RAM,然后执行。
- 引导程序Bootloader:它是Android操作系统开始运行前的一个小程序,负责把系统OS拉起来并运行。
- linux内核启动:内核启动时,设置缓存、被保护存储器、计划列表,加载驱动等,为最终调用系统内核准备好环境。
Kernel层:Android内核空间,到这里才刚刚开始进入Android系统。
Bootloader启动Kernel的swapper进程(pid=0),它是内核首个进程,用于初始化进程管理、内存管理、加载各种驱动。更重要的是启动如下两个重要进程:
- init进程(pid=1):用户进程的鼻祖
- threadd进程(pid=2):内核进程的鼻祖
这层真正大主管是threadd进程,会创建内核工作线程kworkder,软中断线程ksoftirqd,thermal等内核守护进程。
Native层:进入用户空间。
这层init进程(pid=1)是大主管。它负责孵化各种系统级服务、守护进程等。最重要的是孵化出Zygote进程:Java进程的鼻祖。
- Media Server进程:负责启动和管理整个C++ framework,包含AudioFlinger,Camera Service等服务。
Framework层:在Native之上,也是用户空间,主要给app层提供api以及系统服务。
这层大主管是 Zygote进程。它负责注册Zygote Socket服务端套接字,加载虚拟机,preloadClasses和preloadResouces。
- System Server进程:负责启动和管理整个Java framework,包含AMS、WMS、PMS等服务。
App层:应用程序。
所有的App进程都是由Zygote进程fork生成的。
参考:
http://gityuan.com/android/
系列文章:
Android系统启动(一)-开篇
Android系统启动(二)-Init篇
Android系统启动(三)-Zygote篇
Android系统启动(四)-SystemServer篇
Android系统启动(五)-ActivityManagerService篇
Android系统启动(六)-Launcher篇