在Android中系统的启动流程是一个经常会被问到的问题,那么下面我们通过一张图来说明一下
从上面的图片中可以看到它的一个启动流程.
1.BootLoader
首先,当我们点击电源开关后,引导芯片代码开始从预定义的地方(固化在ROM)开始执行。加载引导程序到RAM,然后执行,
这时执行的就是BootLoader,它会去初始化硬件 映射内存等,完成上面操作后就好加载并启动内核(kerner)
2.kernel
kernel启动后,会去初始化各种软硬件环境,加载驱动程序,挂载根文件系统……,完成上面工作后回去寻找init文件,并执行这个文件来启动init进程
其实就是system\core\init\init.c文件的main方法
3.init进程
init进程是系统第一个进程,进程ID为1,它主要有两个作用,
1.挂载目录,比如/sys、/dev、/proc等,
2.解析并运行init.rc配置文件,根据配置文件启动各种系统服务,Zygote,ServiceManager, surfaceFlinger,MediaServer等
init.rc中的Zygote配置如下: (system/core/rootdir/init.rc)
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
4.Zygote进程
Zygote进程主要包含两大模块,
socket服务端:用于接收启动新的Dalvik进程命令
共享资源和类:共享类是在preload-classes文件中定义的,共享资源是在preload-resources文件中定义。Zygote装载好了这些类和资源后,新的Dalvik进程就不需要在装载这些类和资源
Zygote启动分为两个阶段,
启动虚拟机:
启动system_Server服务: 加载共享资源,注册Zygote socket监听,启动system_server进程,进入循环监听模式,最好退出Zygote监听
启动系统服务
在system_server进程中会启动一些其它的系统服务,包括电源管理,Activity管理,AWS PWS 等等.
启动laucher
标签:系统启动,启动,流程,system,Zygote,init,进程,Android,加载 From: https://www.cnblogs.com/codermuyi/p/18194863