上一篇介绍了 init 进程的启动,这里我们详细分析以下 init 进程主要初始化了那些内容。这里我们主要分析 Android 12 的源码。
一、系统初始化
首先,我们通过前面的内容,我们了解了 main.cpp 中对需要初始化的内容分模块处理,其中 SubcontextMain 主要是对上下文进行初始化,SetupSelinux 主要对 SELinux 进行初始化,FirstStageMain 第一阶段初始化主要是对基本的硬件初始化和文件系统挂载,SecondStageMain 第二阶段初始化是对系统服务、加载设备配置、解析init.rc文件以及其他一些系统启动任务。这里我们主要分析 SecondStageMain 的具体内容。
1、InitKernelLogging
用于初始化内核日志记录。
util.cpp
源码位置:/system/core/init/util.cpp
void InitKernelLogging(char** argv) {
// 设置致命错误的重启目标
SetFatalRebootTarget();
// 初始化 Android 日志系统
android::base::InitLogging(argv, &android::base::KernelLogger, InitAborter);
}
logging.cpp
源码位置:/system/libbase/logging.cpp
void InitLogging(char* argv[], LogFunction&& logger, AbortFunction&& aborter) {
// 设置日志记录函数