Android设备启动流程
- 上电。任何电子设备,启动的第一步都是上电,Android自然不例外。上电之后,引导芯片在预定义的地方找到执行代码开始执行。这部分代码主要是加载引导程序(Bootloader)到RAM,然后执行引导程序。
- Bootloader。引导程序是Android操作系统开始运行前需要执行的一个小程序,主要作用是检查硬件资源有没有问题,是否满足操作系统运行,检查通过之后就把Android操作系统拉起来运行。首先是Android内核的启动。
- kernel(内核)。内核是操作系统最基本的部分,是一个操作系统的核心,是基于硬件的第一层软件扩充,是操作系统工作的基础,提供操作系统最基本的功能。负责管理系统的进程、内存、内核体系结构、设备驱动程序、文件和网络系统,决定系统的性能和稳定。Android内核基于Linux内核,不过Android的内核跟Linux的内核差别也比较大。Android内核去掉了部分Linux内核的功能,也加入了自身特有的功能。在这一步,会进行加载驱动等操作。当Android内核设置完成之后,就会启动第一个进程:init进程
- init进程。用户空间的第一个进程,进程号是:1。Android操作系统基于Linux操作系统,所以也有内核空间和用户空间之分。当内核启动之后,会在系统文件中寻找init.rc文件,启动init进程。所以,在这里就从内核空间转到了用户空间。init进程启动之后,会创建一些目录,包括/dev、/porc、/sysfc等。紧接着就是启动Zygote进程。
- Zygote进程。zygote进程在Android系统中很重要,它也是Android中Java世界的第一个进程,后续所有的Java进程(如应用程序进程)都是从Zygote孵化出来。Zygote进程创建进程的模式:a、Zyogte模式,初始化Zygote进程。b、application模式,孵化启动普通应用程序。Zygote进程启动之后,紧接着会启动System-Server。
- System-Server。System-Server启动之后,就开始启动Android的各种系统服务,最后启动Launcher界面,整个Android系统就启动起来了。
上面简述了Android设备的启动过程,中间还有很多细节不可能一一深入,后续将针对init进程到Zygote进程、Zygote进程到System-Server进程、Zygote进程如何孵化新进程、System-Server进程启动了哪些服务等方面继续讲解