返回

揭开Android 9.0启动过程:init进程(第一阶段)背后的秘密

Android

序言

Android系统启动是一个复杂的过程,涉及多个阶段和组件的协同工作。init进程是Android系统的第一个用户进程,由Linux内核启动,它是整个启动过程的基石。init进程负责初始化系统环境,启动Zygote进程,以及ServiceManager和dalvikvm等关键组件。在本文中,我们将重点关注Android 9.0启动过程中的init进程,深入剖析其first stage阶段。

first stage

first stage是init进程启动的第一个阶段,主要负责以下任务:

  1. 初始化系统环境:
  • 挂载根文件系统和必要的块设备
  • 设置系统时钟和时区
  • 加载内核模块
  • 启动必要服务,如logger、ueventd和vold
  1. 启动Zygote进程:
  • Zygote进程是Android系统中的第一个Java进程,它负责孵化其他Java进程
  • init进程通过fork()系统调用创建Zygote进程
  • Zygote进程初始化Java虚拟机(dalvikvm)并加载System Server
  1. 启动ServiceManager:
  • ServiceManager是一个进程间通信(IPC)机制,用于管理和协调系统服务
  • init进程通过fork()系统调用创建ServiceManager进程
  • ServiceManager进程初始化IPC服务并启动必要的系统服务,如ActivityManager和PackageManager

second stage

second stage是init进程启动的第二个阶段,主要负责以下任务:

  1. 加载并运行脚本:
  • init进程读取/init.rc脚本并执行其中的命令
  • /init.rc脚本包含了对系统服务的配置和启动指令
  • 通过执行/init.rc脚本,init进程可以完成系统服务的初始化和启动
  1. 完成系统启动:
  • init进程启动所有必要的系统服务后,会将控制权移交至System Server
  • System Server是Android系统的核心进程,它负责管理应用程序的生命周期、窗口和输入事件等
  • System Server启动后,Android系统启动过程基本完成,用户可以开始使用设备

总结

init进程是Android系统启动过程中的关键组件,它负责初始化系统环境、启动Zygote进程、ServiceManager和dalvikvm等关键组件。通过first stage和second stage两个阶段,init进程完成了一系列必要的初始化任务,为Android系统的正常运行奠定了基础。