Android 系统的启动流程:
- RomBoot(只读存储器引导程序):这是设备上电时运行的初始软件。RomBoot执行基本的硬件初始化,确保硬件处于可以运行后续启动阶段的状态。这一阶段非常重要,因为它为整个启动过程奠定了基础。
- SPL(Secondary Program Loader):这是一种小型专用引导程序,负责加载主引导程序(如u-boot)。SPL提供比RomBoot更高级的功能,并为u-boot准备系统环境。它确保系统能够平滑过渡到下一个启动阶段。
- u-boot(通用引导加载程序):u-boot是嵌入式系统中常用的功能丰富的引导加载程序。它负责加载Linux内核,设置初始硬件环境,并提供各种引导选项和配置。u-boot确保Linux内核在正确的硬件环境中启动,并为后续的系统初始化做好准备。
- Linux内核启动:一旦u-boot加载了Linux内核,内核就会开始启动。内核启动过程中,它会挂载根文件系统,这是操作系统运行所必需的。文件系统包含了操作系统运行所需的各种程序、库和配置文件。
- 启动init程序:init程序是Android系统中的第一个用户空间进程,它负责初始化系统服务和设置运行级别。init程序会根据Android系统的初始化脚本(如init.rc)来启动和配置各种系统服务。
- 启动Zygote进程:Zygote是Android系统中的一个特殊进程,它是所有应用进程的父进程。当Zygote启动时,它会加载并初始化Android运行时环境(如Dalvik或ART虚拟机),并预加载一些常用的类和资源。这样,当后续的应用进程启动时,它们就可以共享这些已经加载的类和资源,从而提高启动速度。
- 启动SystemServer系统服务:SystemServer是Android系统中的核心服务进程,它负责启动和管理各种系统级的服务,如ActivityManagerService(负责活动管理)、PackageManagerService(负责应用包管理)等。这些服务为应用程序提供必要的系统功能和资源。
- 启动Launcher:Launcher是Android系统的桌面应用程序,它负责显示设备的主屏幕和应用程序列表。当Launcher启动时,用户就可以开始与设备进行交互了。
- 启动应用程序:在文件系统挂载、系统服务初始化以及Launcher启动之后,系统就可以开始运行用户空间的应用程序了。这些应用程序可以是预装的,也可以是用户后来安装的。
Framework层的启动流程
在Android系统中是一个复杂且关键的过程,涉及多个组件和服务的启动、初始化以及相互交互。以下是Framework层启动流程的详细概述:
一、Init进程启动
- Init进程加载:Init进程是Linux内核启动后的第一个用户空间进程。它负责读取并解析init.rc等初始化脚本,这些脚本定义了系统启动过程中需要执行的各种任务。
- 挂载文件系统:Init进程会挂载必要的文件系统,如根文件系统、系统分区等,以确保后续进程能够访问到必要的文件和目录。
- 设置安全策略:Init进程还会设置系统的安全策略,如SELinux策略,以确保系统的安全性。
二、Zygote进程启动
- 创建Zygote进程:Init进程根据配置脚本创建Zygote进程。Zygote进程是Android系统中所有Java应用的父进程。
- 加载Android运行时:Zygote进程会加载Android运行时环境(ART或Dalvik),为后续的Java应用提供运行环境。
- 预加载共享资源:为了加快应用启动速度,Zygote进程会预加载一些常用的类和资源,这些资源可以被后续的应用进程共享。
三、SystemServer启动
- SystemServer进程创建:Zygote进程孵化出SystemServer进程,它是Android框架层的核心。
- 启动系统服务:SystemServer负责启动和管理各种系统级服务,如ActivityManagerService(AMS)、PackageManagerService(PMS)、WindowManagerService(WMS)等。这些服务为应用程序提供了必要的系统功能和资源。
四、服务初始化与交互
- 服务初始化:各个系统服务在启动后进行初始化操作,包括加载配置、创建数据结构、注册监听器等。
- 服务交互:服务之间会进行交互和协作,以确保系统功能的正常运行。例如,AMS会与WMS交互以管理应用的窗口显示,PMS会与其他服务交互以管理应用的安装和卸载。
五、应用进程管理
- 应用进程创建:当有应用需要启动时,AMS会根据请求创建应用进程。这些应用进程由Zygote进程孵化出来,并继承其已加载的Android运行时和共享资源。
- 进程管理:AMS负责管理应用进程的生命周期,包括进程的启动、停止、销毁等操作。
Framework层的启动流程在Android系统中涉及多个关键组件和交互。这些组件共同协作,确保系统的正常运行和应用程序的启动。以下是一些主要的组件和它们之间的交互:
主要组件
- SystemServer:
- ActivityManagerService (AMS):管理应用程序的生命周期、任务栈和进程。
- PackageManagerService (PMS):管理应用程序的安装、卸载和权限。
- WindowManagerService (WMS):管理窗口的创建、布局和输入事件。
- 其他服务:如电源管理服务、网络管理服务、通知服务等。
- Zygote进程:
- 负责加载Android运行时环境(ART或Dalvik)。
- 作为所有应用进程的父进程,提供共享资源以加速应用启动。
- Init进程:
- 负责系统初始化,启动Zygote和SystemServer等关键进程。
- 挂载文件系统,设置安全策略等。
- Binder IPC机制:
- 用于不同进程之间的通信,特别是系统服务和应用进程之间的通信。
主要交互
- SystemServer与AMS交互:
- SystemServer启动AMS,AMS管理应用进程的生命周期和状态。
- 应用进程启动或停止时,AMS会与Zygote交互以创建或销毁进程。
- AMS与WMS交互:
- 当应用需要显示窗口时,AMS会与WMS交互以请求窗口的创建和管理。
- WMS负责窗口的布局、渲染和输入事件处理。
- PMS与其他服务交互:
- PMS在应用安装或卸载时更新应用列表和权限信息。
- 其他服务(如AMS)可以查询PMS以获取应用信息或验证权限。
- SystemServer与其他系统服务交互:
- SystemServer作为中心协调者,启动和管理其他系统服务。
- 这些服务之间通过Binder IPC进行通信和协作。
- Zygote与应用进程交互:
- 当AMS请求创建新应用进程时,Zygote会孵化出该进程,并加载必要的类库和资源。
- 应用进程通过Binder IPC与SystemServer中的服务进行通信。
需要注意的是,Framework层的启动流程是一个复杂且高度交互的过程,涉及多个组件和服务。上述只是其中一些主要的组件和交互,实际上还有许多其他细节和子组件参与其中