手机启动流程(AOSP 11):多线程并行的极速开机
2023-12-03 00:08:42
开机并不简单:多阶段协作
Android手机的开机流程可以分为以下几个阶段:
-
BootLoader加载:当用户按下电源键时,硬件设备引导芯片的代码会从出厂固定的地方开始执行,加载指定位置的BootLoader到RAM中执行,BootLoader会负责初始化硬件、加载内核镜像和引导内核启动。
-
内核启动:内核是操作系统的核心,负责管理硬件资源和提供基本的服务。内核启动后,会挂载根文件系统、初始化进程、创建设备节点和启动必要的系统服务。
-
Init启动:Init是Android系统中的第一个用户空间进程,负责初始化用户空间环境、加载系统配置和启动系统服务。Init通过解析/init.rc配置文件来完成这些任务。
-
System Server启动:System Server是Android系统中的核心进程,负责管理系统资源和提供各种系统服务,如窗口管理、电源管理、活动管理和权限管理等。System Server启动后,Android系统就正式启动完成了。
Init启动流程:并行加速
在Android 11中,Init启动流程进行了重大的优化,采用了并行启动的方式,大幅缩短了开机时间。传统的Init启动流程是串行的,即一个服务启动完成后才能启动下一个服务。而在Android 11中,Init可以同时启动多个服务,从而大大提高了启动效率。
具体来说,Init启动流程主要分为以下几个步骤:
-
加载系统配置:Init首先会加载/init.rc配置文件,该配置文件包含了系统服务的配置信息,包括服务名称、启动顺序和依赖关系等。
-
初始化Zygote进程:Zygote进程是Android系统中所有应用程序的父进程,它负责创建和管理应用程序进程。Init会首先启动Zygote进程,为后续应用程序的启动做好准备。
-
启动ueventd服务:ueventd服务负责处理内核发送的uevent事件,并将其转发给相应的应用程序。Init会启动ueventd服务,以便应用程序能够及时响应内核事件。
-
启动systemd服务:systemd是Android 11中引入的新服务,它负责管理系统服务和进程。Init会启动systemd服务,并将其作为系统服务的管理中心。
-
启动其他系统服务:Init会根据/init.rc配置文件中的配置,启动其他必要的系统服务,如SurfaceFlinger服务(负责图形显示)、AudioFlinger服务(负责音频播放)和NetworkManagement服务(负责网络管理)等。
-
启动System Server:当所有必要的系统服务启动完成后,Init会启动System Server进程。System Server是Android系统中的核心进程,负责管理系统资源和提供各种系统服务。System Server启动后,Android系统就正式启动完成了。
安全防护:确保开机安全
在Init启动过程中,Android系统会进行一系列的安全检查,以确保系统的安全性。这些安全检查包括:
-
验证BootLoader签名:Init会验证BootLoader的签名,以确保BootLoader是合法的,没有被篡改。
-
验证内核签名:Init会验证内核的签名,以确保内核是合法的,没有被篡改。
-
验证系统分区签名:Init会验证系统分区的签名,以确保系统分区是合法的,没有被篡改。
-
启动Dm-verity:Dm-verity是一种设备映射验证机制,它可以确保设备上的数据没有被篡改。Init会启动Dm-verity,以确保设备上的数据是安全的。
通过这些安全检查,Android系统可以确保开机过程的安全,防止恶意软件的攻击。
结论:极速开机,畅快体验
Android 11的开机流程经过优化,采用了并行启动的方式,大幅缩短了开机时间。同时,Android系统还进行了安全检查,以确保开机过程的安全。这些优化和安全措施,让Android手机能够实现极速开机,为用户带来畅快的使用体验。