AndroidR系统启动详细分析-学习笔记

当Linux内核启动后就会运行core/init/main.cpp文件中的main函数,在main函数中调用了InitLogging初始化了系统的日志打印工具,另外会根据linux传给main函数的参数args进行判断调用不同的启动函数。以调用init.cpp中的SecondStageMain为例,在SecondStageMain方法中首先调用StartPropertyService启动一些必须的属性服务,其次通过执行命令的方式调用位于core/rootdir/init.rc中的late-init脚本,脚本主要创建一些目录、设置文件目录访问权限,并且设置boot_completed的值等。如下图所示:

AndroidR系统启动详细分析-学习笔记_第1张图片

值得注意的是不同的启动方式,有不同之处,如下图所示

AndroidR系统启动详细分析-学习笔记_第2张图片

 

AndroidR系统启动详细分析-学习笔记_第3张图片

在脚本中,根据设备的不同调用了core/rootdir/下不同的init.zygote64.rc文件,在该脚本中对应了framework中的base/cmds/app_process/app_main.cpp文件的main函数。如下图所示:

AndroidR系统启动详细分析-学习笔记_第4张图片

AndroidR系统启动详细分析-学习笔记_第5张图片

AndroidR系统启动详细分析-学习笔记_第6张图片

main函数中创建了AppRuntime对象,并调用了start方法。如下图所示:

AndroidR系统启动详细分析-学习笔记_第7张图片

AndroidR系统启动详细分析-学习笔记_第8张图片

AppRuntimeAndroidRuntime的子类,此处调用的是父类的start

AndroidR系统启动详细分析-学习笔记_第9张图片

start中加载了环境配置,是否是root如下图所示:

AndroidR系统启动详细分析-学习笔记_第10张图片

接下来继续调用onVmCreatedstartVmstartReg创建和加载虚拟机所需要的参数,启动、注册虚拟机。

AndroidR系统启动详细分析-学习笔记_第11张图片

AndroidR系统启动详细分析-学习笔记_第12张图片

最后通过jni的方式调用start-system-server中的main函数,start-system-server指的就是SystemServer

AndroidR系统启动详细分析-学习笔记_第13张图片

SystemServerrun方法中启动了各种核心服务,比如AMS,WMSIMS等等。

AndroidR系统启动详细分析-学习笔记_第14张图片

AndroidR系统启动详细分析-学习笔记_第15张图片

 

你可能感兴趣的:(Android,Q源码解析,android,android,studio)