Android 启动过程
简介
Android 启动过程是启动计算机并使用它的过程。计算机系统可以通过打开电源来启动。计算机启动时,它只能读取称为只读存储器的部分存储空间。计算机启动时会启动一个小程序,该程序存储在称为固件的存储空间中。它允许访问其他类型的内存,例如主内存和硬盘。固件用于加载大型程序并将其运行到计算机的主内存中。启动管理器在所有设备中运行,无论是移动设备、计算机系统还是其他设备。
Android 的启动过程分为以下 6 个步骤:
启动 ROM
启动加载器
内核
初始化
Zygote 和 Dalvik 虚拟机
系统服务器
启动 ROM
启动 ROM 是计算机系统启动时调用的一个步骤启动。系统通电后,Boot ROM 代码开始执行 ROM 中预定义位置的一组指令,该位置是硬编码的。Boot ROM 将 BootLoader 加载到 RAM 中并开始执行。
BootLoader
BootLoader 是一个在 Android 操作系统启动前运行的小程序。移动设备制造商会将他们的锁和限制放在引导加载程序中。Boot Loader 包含一段在启动任何操作系统之前都会执行的代码。Boot Loader 执行以下两个步骤:
在第一阶段,引导加载程序会检测设备的外部 RAM,并在其中加载用于第二阶段的程序。
在第二阶段,引导加载程序会设置运行内核所需的内存和网络。
Kernel
Android 操作系统由 Linux 内核和一系列用户空间应用程序及库组成。内核是操作系统的最低层,它直接与硬件交互,并为用户空间组件提供基本服务。内核完成系统设置后,会在系统文件中查找 init 进程,并启动根进程(即系统的第一个进程)。
Init
Init 进程是 Android 设备上运行的第一个用户空间进程。它负责启动其他用户空间进程和服务,并设置设备环境。此进程读取 /init.rc 目录中的配置文件,并启动必要的服务和守护进程。Init 进程是第一个以 root 权限运行的进程,它负责设置设备的安全策略、挂载文件系统以及设置网络。它还会启动 Android 运行时,负责运行 Android 框架和应用程序。
Zygote 和 Dalvik 虚拟机
Zygote 是一个虚拟机进程,会在系统启动时启动。当应用进程启动 Zygote 时,它会创建 Dalvik 虚拟机,然后调用 Zygote 的 main 方法,通过 dev/zygote 接收启动应用的请求。应用启动后,会触发 fork() 方法,该方法会创建自身的克隆,并将其复制到另一个内存空间。
系统服务器
当 Zygote 加载完所有 Java 类和资源后,它会启动系统服务器。该服务器是 Android 系统的核心。系统服务器会加载 android_servers 原生库,以提供原生功能的接口。原生 init 方法会设置调用的原生服务。服务创建完成后,会创建服务器线程。其余服务将由线程根据特定顺序启动。一旦系统服务开始在内存中运行,Android 的启动过程就完成了,此时将触发"ACTION_BOTT_COMPLETED"操作。
结论
在本文中,我们了解了 Android 中的启动过程是什么,以及启动过程中包含哪些不同的流程。


