Activity启动(startActivity)流程图之WMS(2) - UI体系原理解析

高通平台 Android 设备的启动流程Android 通用启动流程的一个具体实现,其在 Bootloader 阶段具有高通特有的组件结构(如 PBL、XBL、ABL),并且支持多种启动模式和安全机制(如 Secure Boot、Verified Boot)。以下是**高通平台 Android 设备的完整启动流程**,涵盖从硬件上电到用户进入桌面的全过程。 --- ## 📱 高通平台 Android 设备启动流程详解 --- ### 1. **Boot ROM 阶段(固件启动)** - **位置**:固化在芯片内部的 ROM。 - **触发时机**:设备上电或重启。 - **主要功能**: - 初始化 CPU、内存控制器、时钟等基础硬件。 - 检查启动介质(如 eMMC、UFS)是否存在有效的 Bootloader。 - 加载并执行 PBL(Primary Boot Loader)到 RAM 中。 > ⚠️ **特点**:不可修改,安全性高,是整个启动流程的“信任根”。 --- ### 2. **Bootloader 阶段** 高通平台的 Bootloader 通常分为多个阶段,依次加载,确保平台初始化的完整性与安全性。 #### 🧩 2.1 **PBL(Primary Boot Loader)** - 芯片级引导程序。 - 初始化 DDR 内存。 - 校验 XBL 签名(Secure Boot)。 - 加载 XBL 到内存并跳转执行。 #### 🧩 2.2 **XBL(eXtensible Boot Loader)** - 平台级引导程序。 - 初始化更多硬件(如存储控制器、USB、Display)。 - 加载 ABL 或直接加载内核镜像(zImage)和设备树(dtb)。 - 支持 Fastboot、Recovery、OTA 等模式。 - 执行 AVB(Android Verified Boot)校验。 #### 🧩 2.3 **ABL(Android Boot Loader)** - 加载 Linux 内核(zImage)和 ramdisk。 - 设置启动参数(cmdline、设备树地址)。 - 跳转到内核入口(`stext`),进入内核阶段。 > 🛡️ **安全机制**: - **Secure Boot**:验证 Bootloader 和内核签名。 - **AVB(Android Verified Boot)**:验证内核、ramdisk、system 分区完整性。 --- ### 3. **Linux Kernel 阶段** - **入口函数**:`stext()`,位于 `arch/arm64/kernel/head.S`。 - **主要功能**: - 初始化 CPU、内存管理、进程调度、中断、设备驱动等核心组件。 - 挂载根文件系统(通常是 ramdisk)。 - 启动第一个用户空间进程:`/init`。 > 🧩 内核关键子系统: - **进程调度器**:负责进程管理。 - **内存管理**:页表、虚拟内存、MMU 初始化。 - **设备驱动**:加载硬件驱动(如 Display、Touch、USB)。 - **文件系统**:挂载 `/sys`, `/proc`, `/dev`。 - **网络栈**:初始化 TCP/IP 协议栈。 --- ### 4. **Init 进程阶段(用户空间第一个进程)** - **PID**:1 - **作用**:初始化用户空间环境,启动系统关键服务。 - **关键任务**: - 挂载 `/sys`, `/proc`, `/dev`。 - 解析 `init.rc` 及其子脚本(如 `init.qcom.rc`)。 - 设置系统属性(如 `ro.hardware`、`ro.product.model`)。 - 启动关键守护进程:`logd`、`ueventd`、`servicemanager`、`zygote`。 - 执行 `on early-init`、`on init`、`on late-init` 等触发器。 --- ### 5. **Zygote 启动阶段(Java 运行环境初始化)** - **作用**:为 Android 应用提供运行基础。 - **启动方式**:由 `init.rc` 启动 Zygote 可执行文件(`app_process`)。 - **关键流程**: - 创建 Java 虚拟机(ART)。 - 加载核心类库(如 `core-libart.jar`)。 - 预加载资源(`preload()`): - 类(如 `android.R`, `java.lang.String`) - 资源(如图标、布局) - 共享库(如 `libandroid_runtime.so`) - 监听 socket,等待 AMS 请求 fork 新应用进程。 - fork 出 `SystemServer` 进程。 --- ### 6. **SystemServer 启动阶段(系统服务核心)** - **作用**:Android 系统的核心进程,负责管理所有系统服务。 - **主要服务**: - **AMS(Activity Manager Service)**:管理 Activity 生命周期、任务栈。 - **WMS(Window Manager Service)**:管理窗口层级、显示状态。 - **PMS(Package Manager Service)**:管理应用安装、权限、签名。 - **PKMS(PowerManagerService)**:管理电源状态、唤醒锁。 - **InputManagerService**:管理输入设备(如触摸屏、键盘)。 - **BatteryService**:管理电池状态。 - **NetworkManagementService**:管理网络连接。 > 🧠 **SystemServer 启动顺序**:通过 `SystemServiceManager` 依次启动各服务。 --- ### 7. **Launcher 启动阶段(用户界面启动)** - **作用**:启动桌面应用,用户可进行交互。 - **主要流程**: - AMS 启动 Launcher 应用(通常是系统预装的桌面应用)。 - Launcher 进程由 Zygote fork 出来。 - Launcher 加载桌面 UI,显示图标、壁纸、快捷方式。 - 用户可点击图标启动其他应用。 --- ### 8. **应用启动阶段(按需启动)** - **启动方式**: - 用户点击图标。 - 系统广播触发。 - 其他应用调用 `startActivity()`。 - **关键流程**: - AMS 通知 Zygote 创建新进程。 - Zygote fork 出新进程,并加载应用代码。 - 应用进入运行状态,开始执行 `main()` 方法。 - 输出日志到 `logcat`,可查看 `logcat main` 和 `logcat system`。 --- ## 📁 高通平台启动关键日志与调试信息 | 日志类型 | 命令 | 说明 | |----------|------|------| | 内核日志 | `dmesg` 或 `cat /proc/kmsg` | 查看从 Bootloader 到 Kernel 启动过程 | | logcat 内核缓冲区 | `logcat -b kernel` | 查看内核打印信息 | | logcat 应用层日志 | `logcat -b main` | 查看 Android 应用层日志 | | logcat 系统服务日志 | `logcat -b system` | 查看系统服务相关日志 | | 启动耗时统计 | `cat /proc/boottime` | 查看各阶段启动时间 | | 启动性能分析工具 | `systrace.py` / `perfetto` | 图形化分析系统启动性能 | --- ## 🧩 高通平台启动优化方向 | 优化方向 | 说明 | |----------|------| | 快速 Bootloader | 减少不必要的初始化 | | 内核裁剪 | 移除无用驱动、启用压缩 | | Init 阶段优化 | 减少 init.rc 中的等待和同步 | | Zygote 预加载优化 | 控制 preload 内容大小 | | SystemServer 启动顺序调整 | 延迟非关键服务启动 | | 启动动画优化 | 提前显示动画,掩盖启动时间 | | 安全机制优化 | 优化 AVB 和 Secure Boot 检查时间 | --- ## 📌 总结图示(高通平台 Android 启动流程) ``` Boot ROM → PBL → XBL → ABL → Linux Kernel → init → Zygote → SystemServer → Launcher → 应用 ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值