解析Android设备启动过程
一、引言
关于何时手机启动的问题经常被提及,在Android系统中的启动过程和普通操作系统有些许差异。本文将对Android设备的启动过程进行详细解析。
二、启动的基本阶段
- 充电插入
- 当用户给手机插上充电器时,除了正常的电源输入外,它还会与手机主屏幕相似的方式处理。
如果在充电时按下了电源按钮,那么这一情况将类似于直接按下电源按钮进行开机。
低级启动程序(Preloader)
傲腾、SBL或类似的第一阶段的引导加载器会在设备开启后的非常早期就开始起作用,并且是手机开始其正式启动过程前的一部分。
高级启动加载程序(Bootloader)
高级启动加载程序包括Uboot、LK 或 ABOOT 之类的最终启动加载程序。它们负责处理通过物理按钮触发的各种模式,如下载模式(Emergency Download mode)、SPL模式和Fastboot模式等。
最后的系统引导加载程序 (Final Bootloader)
最终启动加载程序作为与计算机通信进行格式化、刷写、解锁等方面的具体操作工具。
内核 (Kernel) 和恢复环境 (Recovery, 如TWRP或CWM)
核心操作系统内核运行于较低的层级上,而Android定制界面在之后由
init
进程控制及启动。初始化服务 (
init
)- 所有的用户空间服务均是从
/system
和/vendor
分区启动,这是最初的服务管理阶段。
三、具体流程
- BootROM 阶段
BootROM是设备的固件程序,它首先被CPU执行以初始化硬件并加载进一步代码。
预引导装载器(Preloader)
Preloader负责载入bootloader阶段所需的最低级别软件。
最终启动加载程序(Final Bootloader, 如SPL、ABOOT等)
Final bootloader是整个过程的控制者,它包含有USB相关功能,可通过
fastboot
进行刷写操作,例如格式化分区以进行系统更新或者其他类似的动作。内核 (Kernel) 启动
核心kernel启动并加载驱动和其他必要的运行时库,为引导到用户空间准备。
init进程的运行
init
进程开始执行一些关键服务和引导系统分区。例如,它将从/system
分区中寻找和执行相应的服务文件,并通过调用这些文件来引导各种基本操作和服务。Zygote与Dalvik虚拟机
- Zygote是Android启动的早期用户态进程中,随后会被分叉出多个应用,每个应用都会有自己的Dalvik实例。这个进程提供了为各应用初始化环境的服务。
其他服务和驱动程序
- 最后阶段将启动所有必要的后台服务、守护进程和其他系统组件。
四、注意事项与结论
总结来看,从充电器插入手开始至运行用户态服务之间有多个层次的加载过程。例如odin
、fastboot
等都是硬件通信工具,并不是用户环境的一部分;而TWRP
(Team Win Recovery Project) 是一种紧急恢复环境,在设备失去正常启动能力时可提供一种解决方案。
最终,从手机插电到运行所有服务和应用程序,这整个过程涉及到多个步骤和层次的加载和执行。这对于开发者或遇到系统故障需要修复的人来说,理解其内部机制是非常有意义和有用的。