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的值等。如下图所示:
值得注意的是不同的启动方式,有不同之处,如下图所示
在脚本中,根据设备的不同调用了core/rootdir/下不同的init.zygote64.rc文件,在该脚本中对应了framework中的base/cmds/app_process/app_main.cpp文件的main函数。如下图所示:
在main函数中创建了AppRuntime对象,并调用了start方法。如下图所示:
AppRuntime是AndroidRuntime的子类,此处调用的是父类的start。
在start中加载了环境配置,是否是root如下图所示:
接下来继续调用onVmCreated和startVm、startReg创建和加载虚拟机所需要的参数,启动、注册虚拟机。
最后通过jni的方式调用start-system-server中的main函数,start-system-server指的就是SystemServer。
在SystemServer的run方法中启动了各种核心服务,比如AMS,WMS、IMS等等。
更多相关文章
- C语言函数的递归(上)
- 八款Android(安卓)开发者必备的小工具
- Android(安卓)屏幕适配解决方案
- Android中文件读写操作
- 下载AOSP android源码(最小最快下载方式,跳过编译直接导入Android(
- 基于OpenCV和QT,建立Android图像处理程序
- Android(安卓)NDK学习笔记:Android(安卓)Studio3.1+CMAKE+OpenCV3
- 编译Windows版Android(安卓)Emulator(Cupcake)
- 【Android】输入设备配置文件(.idc文件)