Framework学习(二)Android的启动过程

Android设备的启动过程

上一张介绍了Android的系统的整体架构,认识了体系的构造,今天就讲一下,Android的系统的启动过程。
看了架构图,我们知道架构的设计是至上而下的,但是,Android的启动过程却是相反的。它的启动过程其实是这样的。

Android设备的启动过程分为如下流程:

BootLoader -> Linux Kernel -> Android Native -> Android Framework -> APP
在这里插入图片描述
下面一一介绍这几个流程点。

  • BootLoader

Boot Loader 是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境 。

作为非嵌入式软件层的开发者,我们当然不必过于深究Boot Loader的具体工作原理,了解即可。

  • Linux Kernel

众所周知,开发一个操作系统非常的困难,涉及到系统安全、进程通信、内存管理等等都是非常复杂,需要耗费巨大的开发成本,所以Android一开始就复用了开源的Linux内核。
Linux Kernel主要完成硬件设置、驱动加载,并根据BootLoader中设置的参数启动系统,同时启动Android的“始祖进程” - init进程

  • Android Native

当init进程启动后,整个系统的启动过程就来到了AndroidNative层中,在这一层中,init进程通过解析init.rc脚本,来构建整个Android系统的雏形。
init进程在解析init.rc脚本,启动了一个Android中最重要的进程-Zygote,Zygote是Android系统的第一个Java进程,所有的Java进程都是Zygote进程的子进程。
init.rc脚本是我们个性化定制Android系统,控制Android系统启动状态的重要工具,关于init.rc脚本我们以后再介绍。

  • Android Framework

Zygote进程启动后,系统的启动流程继续向上来到了AndroidFramework层。
Zygote进程作为Android中最重要的进程,它负责加载Android虚拟机、启动SystemServer、ServiceManger以及MediaServer等Android系统的关键进程,这些进程我们以后再详细介绍,现在只需要有个简单的认知即可。
System Server进程:负责启动和管理整个Java framework,包含ActivityManager,PowerManager等服务。
Media Server进程:负责启动和管理整个C++ framework,包含AudioFlinger,Camera Service等服务。

  • APP

Zygote进程完成各个系统的内部服务后,就该启动用户界面了(Launcher),我们看到的系统主界面其实就是一个系统级的APP,还有其他的例如Email、Phone、Browser、Message等等都是由Zygote启动的。

总结

本篇简略的讲解了Android设备的启动流程,在此基础上我们先建立一个简单的认识,对于其中的关键点例如init.rc、Zygote、SystemServer等等以后再做介绍。

参考文献

Boot Loader - 百度百科
Linux Kernel - 百度百科
Android系统启动过程从下往上的一个过程

扫描二维码关注公众号,回复: 11328404 查看本文章

猜你喜欢

转载自blog.csdn.net/ljx1400052550/article/details/105819128