Android系统启动流程,主要包括: Bootloader、Linux内核、init进程、zygote进程、system_server进程和Launcher进程。
Bootloader当电源按下时引导芯片代码开始从预定义的地方(固化在ROM)开始执行。然后加载引导程序Bootloader到RAM并执行。
Bootloader程序是在Android操作系统开始运行前的一个小程序,它的主要作用是初始化硬件参数并启动Linux内核。
Linux内核Linux内核主要加载一些硬件设备驱动、进程管理、内存管理等操作,然后启动init进程。
init进程init进程是Linux系统中用户空间的第一个进程,进程号为1。
init进程启动后,会启动abdb、logd等用户守护进程,并且会启动servicemanager(binder服务管家)等服务,然后孵化出zygote进程。
zygote进程zygote进程是第一个进入java代码的进程。
zygote进程是init进程解析init.rc文件后fork生成,它会加载虚拟机,注册JNI函数,加载framework相关类和资源。然后fork出system_server进程,最后zygote进程会进入runSelectLoop,等待新应用进程需要fork时的唤醒。
system_server进程system_server进程是zygote进程孵化的第一个进程。
system_server进程负责启动和管理整个Java Framework,包含AMS、WMS、PMS等众多服务,最后会通过zygote进程fork出Launcher进程。
Launcher进程Launcher进程就是我们的桌面进程。
到这里,系统开机到桌面应用就完成啦。