Skip to content

Android 系统启动流程分析文档 ​

本文档基于 Amlogic S905X5M (ross) 平台的实际启动日志,详细分析 Android 14 系统从上电到完全启动的完整流程。


目录 ​


启动流程概览 ​

Android 系统启动是一个多阶段的过程,整体流程如下:

┌─────────────────────────────────────────────────────────────────────────────┐
│                              电源上电 (Power On)                              │
└─────────────────────────────────────────────────────────────────────────────┘
                                       │
                                       ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│  1. Bootloader 与 U-Boot                                                     │
│  ┌─────┐   ┌──────┐   ┌──────┐   ┌──────┐   ┌──────┐   ┌──────┐            │
│  │ BL1 │ → │ BL2  │ → │ BL2E │ → │ BL2X │ → │ BL31 │ → │ BL32 │            │
│  │(ROM)│   │(DDR) │   │      │   │      │   │(ATF) │   │(TEE) │            │
│  └─────┘   └──────┘   └──────┘   └──────┘   └──────┘   └──────┘            │
│                                                              │               │
│                                                              ▼               │
│                                                         ┌──────┐            │
│                                                         │ BL33 │            │
│                                                         │U-Boot│            │
│                                                         └──────┘            │
└─────────────────────────────────────────────────────────────────────────────┘
                                       │
                                       ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│  2. Linux 内核启动                                                           │
│  - 内核解压和初始化                                                           │
│  - CPU/内存/中断初始化                                                        │
│  - 设备驱动加载                                                               │
│  - 启动 init 进程 (PID 1)                                                    │
└─────────────────────────────────────────────────────────────────────────────┘
                                       │
                                       ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│  3. Init 进程启动                                                            │
│  ┌────────────────┐   ┌────────────────┐   ┌────────────────┐              │
│  │ First Stage    │ → │ Second Stage   │ → │ 解析 init.rc   │              │
│  │ - 挂载分区     │   │ - SELinux      │   │ - 启动服务     │              │
│  │ - 加载驱动     │   │ - 属性服务     │   │ - 启动 Zygote  │              │
│  └────────────────┘   └────────────────┘   └────────────────┘              │
└─────────────────────────────────────────────────────────────────────────────┘
                                       │
                                       ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│  4. Zygote 进程启动                                                          │
│  - 创建 Java 虚拟机 (ART)                                                    │
│  - 预加载 Java 类和资源                                                       │
│  - 创建 Socket 监听应用启动请求                                               │
│  - Fork 出 SystemServer 进程                                                 │
└─────────────────────────────────────────────────────────────────────────────┘
                                       │
                                       ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│  5. SystemServer 进程启动                                                    │
│  - 启动 Binder 线程池                                                        │
│  - 创建 SystemServiceManager                                                 │
│  - 启动引导服务 (AMS, PMS, WMS...)                                           │
│  - 启动核心服务和其他服务                                                     │
└─────────────────────────────────────────────────────────────────────────────┘
                                       │
                                       ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│  6. Launcher 启动                                                            │
│  - AMS 启动 Home Activity                                                    │
│  - Launcher 进程由 Zygote fork                                               │
│  - 加载桌面图标和小部件                                                       │
│  - 发送 BOOT_COMPLETED 广播                                                  │
└─────────────────────────────────────────────────────────────────────────────┘

1. Bootloader 与 U-Boot ​

1.1 启动链概述 ​

Amlogic 平台采用 ARM Trusted Firmware (ATF) 架构,Bootloader 启动链如下:

组件全称运行级别存储位置功能描述
BL1Boot ROMEL3芯片 ROM固化代码,加载 BL2
BL2Secondary Boot LoaderEL3eMMC BootDDR 初始化
BL2EBL2 ExtensionEL3eMMC Boot厂商扩展
BL2XBL2 eXtendedEL3eMMC Boot安全初始化
BL31EL3 Runtime FirmwareEL3FIPATF 运行时
BL32Secure OS (OP-TEE)S-EL1FIP可信执行环境
BL33Non-secure BootloaderEL2/EL1FIPU-Boot

1.2 BL2 阶段 - DDR 初始化 ​

时间戳: TE: 144389 μs (~144ms)

日志摘录:
BL2 1.1.1 Built : 17:35:28, Oct 10 2025. s7d bl-3.5.16
DDR_DRIVER_VERSION: AML_LP5_PHY_S7_V_0_45
dram_type==LPDDR4
config==r0_32bit_ch0
DDR : 2048MB @1320MHz

主要工作:

  1. 早期硬件初始化

    set ee_vol 0.74v # 设置 CPU 电压
    fix_pll is 2000 MHz. Locked # 锁定系统 PLL
    sys0_pll is 2508 MHz. Locked # 系统时钟
  2. DDR 内存初始化

    • 检测内存类型: LPDDR4
    • 配置内存控制器
    • 内存训练和校准
    • 最终配置: 2048MB @ 1320MHz
  3. 存储设备检测

    boot_device:00000001 # eMMC 启动
    boot_seq:00000001
    boot_bakups:00000003 # 3 份备份
  4. 加载后续 Bootloader

    Load: BL2E From: eMMC - 3.1 src: 00002000, size: 00019000
    Load: BL2X From: eMMC - 3.1 src: 00000000, size: 00019000

1.3 BL2E/BL2X 阶段 - 安全初始化 ​

BL2E 时间戳: TE: 489535 μs (~490ms) BL2X 时间戳: TE: 584694 μs (~585ms)

日志摘录:
BL2E 1.0.0 Built : 18:44:03, Oct 10 2025
eMMC boot @ 1
sw-hs2 s                              # eMMC 高速模式

BL2X 1.1.0 Built : 17:15:05, Jul 23 2025
Loading secpu fw                      # 加载安全 CPU 固件
derive RSPK OK                        # 密钥派生
derive PCPK OK

主要工作:

  • eMMC 切换到 HS200/HS400 高速模式
  • 加载 FIP (Firmware Image Package)
  • 安全密钥派生和验证
  • 加载安全 CPU 固件

1.4 BL31 阶段 - ARM Trusted Firmware ​

日志摘录:
NOTICE:  BL31: v2.7.2(release):v2.7.0-441-gf06b1f5a6
NOTICE:  BL31: Built : 14:54:58, Oct 15 2025
NOTICE:  BL31: start aocpu
Starting AOCPU FreeRTOS
AOCPU image version='2025-12-08 09:49:24'

主要工作:

  1. EL3 运行时服务

    • 提供 SMC (Secure Monitor Call) 接口
    • 处理安全/非安全世界切换
  2. 启动 AOCPU (Always-On CPU)

    • 运行 FreeRTOS 实时操作系统
    • 负责低功耗管理、遥控器唤醒、CEC 控制
  3. 解压并加载 BL32/BL33

    NOTICE: decomp BL32 is Success
    NOTICE: decomp BL33 is Success

1.5 BL32 阶段 - OP-TEE (可信执行环境) ​

日志摘录:
E/TC:0 00 INFO:    BL3-2: ATOS-V3.18.4-143eb82a7
E/TC:0 00 INFO:    BL3-2: Chip: S7D Rev: B (47:B - 0:1)
E/TC:0 00 INFO:    BL3-2: Secure Timer Initialized.

主要工作:

  • 初始化可信执行环境
  • 提供安全服务:Keymaster、Widevine DRM、安全存储
  • 管理 RPMB (Replay Protected Memory Block) 访问

1.6 BL33 阶段 - U-Boot ​

时间戳: TE: 782431 μs (~782ms) 进入 U-Boot 结束时间: uboot time: 2156747 μs (~2.16s)

日志摘录:
U-Boot 2023.01 bl-3.5.15 (Dec 08 2025 - 09:49:10 +0800)
DRAM:  2 GiB
emmc init success!

1.6.1 硬件初始化 ​

board init                          # 板级初始化
gpio: pin GPIOH_7 (gpio 43) value is 1
[meson_mmc_probe]emmc: Controller probe success!
Net: eth0: ethernet@ff3f0000        # 以太网初始化

1.6.2 显示初始化 ​

vpu: vpu_power_on_new               # VPU 上电
vpu: set clk: 666667000Hz           # VPU 时钟 666MHz
[VOUT] match: W=1920, H=1080, P     # 输出 1080p
[OSD] fb_addr for logo: 0x1f800000  # Logo 显示
set hdmitx VIC = 16                 # HDMI 1080p60hz

1.6.3 AVB 验证 (Android Verified Boot) ​

avb2: 1
active_slot is _a                   # A/B 分区,当前 slot A
AVB2 verify with default kpub:520
avb verification: locked = 1, result = 0   # 验证通过

1.6.4 加载 Kernel ​

## Booting Android Image at 0x03000000 ...
Kernel command line: bootconfig androidboot.selinux=permissive
   Uncompressing Kernel Image
   kernel loaded at 0x01800000, end = 0x0416aa00
   Loading Ramdisk to 1e93b000, end 1f7ff921 ... OK
   Loading Device Tree to 1e923000 ... OK
Starting kernel ...
uboot time: 2156747 us

加载内容:

内容加载地址说明
Kernel Image0x01800000LZ4 压缩,解压后约 40MB
Ramdisk0x1e93b000init_boot.img 中的 ramdisk
Device Tree0x1e923000DTB 设备树

2. Linux 内核启动 ​

2.1 内核版本信息 ​

日志摘录:
[    0.000000] Linux version 5.15.170-android14-11-g3efc8295014d-ab12916019
[    0.000000] Machine model: s7d_s905x5m_bm201
  • 内核版本: 5.15.170 (Android GKI 内核)
  • Android 版本: Android 14
  • 机器型号: s7d_s905x5m_bm201

2.2 早期初始化 (0.000s - 0.005s) ​

2.2.1 CPU 初始化 ​

[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x412fd050]
[    0.000000] Detected VIPT I-cache on CPU0
[    0.003384] smp: Bringing up secondary CPUs ...
[    0.004022] CPU1: Booted secondary processor 0x0000000100
[    0.004645] CPU2: Booted secondary processor 0x0000000200
[    0.005258] CPU3: Booted secondary processor 0x0000000300
[    0.005319] smp: Brought up 1 node, 4 CPUs
[    0.005342] CPU features: detected: 32-bit EL0 Support

CPU 信息:

  • 4 核 ARM Cortex-A55 (ID: 0x412fd050)
  • 支持 32 位兼容模式
  • 支持 LSE 原子指令、CRC32、RAS 扩展

2.2.2 内存初始化 ​

[    0.000000] Memory: 1405532K/2097152K available
[    0.000000] Zone ranges:
[    0.000000]   DMA32    [mem 0x0000000000000000-0x000000007fffffff]
[    0.000000]   Normal   empty

内存布局 (Reserved Memory):

区域名称地址范围大小用途
linux,secure_vdec0x7f000000-0x7fffffff16 MB安全视频解码
linux,vdin1_cma0x7e800000-0x7effffff8 MB视频输入
heap-gfx0x79000000-0x7e7fffff88 MB图形堆
heap-fb0x75800000-0x78ffffff56 MBFramebuffer
linux,codec_mm_cma0x5ec00000-0x757fffff364 MB编解码 CMA
linux,meson-fb0x1f800000-0x1fffffff8 MBOSD Framebuffer
linux,secmon0x05000000-0x06bfffff28 MB安全监控
ramoops0x06c00000-0x06cfffff1 MB内核崩溃日志

2.3 子系统初始化 (0.060s - 0.200s) ​

[    0.067735] pinctrl core: initialized pinctrl subsystem
[    0.068451] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[    0.070000] thermal_sys: Registered thermal governor 'step_wise'
[    0.095855] SCSI subsystem initialized
[    0.095952] usbcore: registered new interface driver usbfs
[    0.096072] mc: Linux media interface: v0.10
[    0.096087] videodev: Linux video capture interface: v2.00
[    0.097130] Advanced Linux Sound Architecture Driver Initialized.

2.4 设备驱动加载 (0.200s - 1.0s) ​

内核通过 Device Tree 探测并加载各种驱动:

时间 (s)驱动模块设备节点说明
0.250amlogic-uartttyS0串口驱动
0.563meson-gpio-GPIO 控制器
0.581cpufreqcpu0-3CPU 频率调节
0.588meson-tsensor-温度传感器
0.619meson-mmcmmc0eMMC 控制器 (CQHCI)
0.683optee-OP-TEE 驱动
0.707gpio_keypadinput0按键输入
0.710ir_keypadinput2-4红外遥控器
0.713meson-gxbb-wdt-看门狗
0.719aml_dvb-DVB 数字电视
0.890vout-视频输出
0.915amhdmitx-HDMI 发送器
0.956mmc0mmcblk0eMMC HS400 模式

2.5 启动 Init 进程 ​

[    0.216568] Freeing initrd memory: 15120K
[    0.217703] Freeing unused kernel memory: 5440K
[    0.217798] Run /init as init process

内核完成初始化后,执行 ramdisk 中的 /init 程序,这是 Android 的第一个用户空间进程 (PID 1)。


3. Init 进程启动 ​

3.1 Init 进程概述 ​

Init 进程是 Android 系统的第一个用户空间进程,职责包括:

  1. 挂载文件系统 (/system, /vendor, /data 等)
  2. 加载内核模块
  3. 初始化 SELinux
  4. 启动属性服务 (property service)
  5. 解析并执行 init.rc 脚本
  6. 启动各种守护进程和服务

3.2 First Stage Init (0.22s - 4.4s) ​

First Stage 在 ramdisk 中运行,主要任务是准备根文件系统。

日志摘录:
[    0.219564] init: init first stage started!
[    0.221455] init: Loading module /lib/modules/amlogic-gkitool.ko with args ''
[    0.248294] init: Loaded kernel module /lib/modules/amlogic-gkitool.ko

3.2.1 加载内核模块 ​

init: Loading module /lib/modules/amlogic-gkitool.ko
init: Loading module /lib/modules/amlogic-debug-iotrace.ko
init: Loading module /lib/modules/amlogic-uart.ko
init: Loading module /lib/modules/amlogic-hwspinlock.ko
init: Loading module /lib/modules/amlogic-debug.ko

模块加载后的内核日志:

[    0.502044] [cpuinfo]: build info: gki_20 2025.12.08-01.55.26
[    0.504021] [cpuinfo]: serial = 470b010100000000253551c354371d80
[    0.528681] [memory-debug]: dmc version:1.10.2

3.2.2 挂载分区 ​

# 挂载 super 分区 (动态分区)
[    4.318997] F2FS-fs (dm-50): Using encoding defined by superblock: utf8-12.1.0
[    4.373030] F2FS-fs (dm-50): checkpoint: version = 49308dcd
[    4.373326] F2FS-fs (dm-50): Mounted with checkpoint version = 49308dcd

动态分区包含:

  • system_a / system_b
  • vendor_a / vendor_b
  • product_a / product_b
  • system_ext_a / system_ext_b
  • odm_a / odm_b

3.2.3 配置 ZRAM (压缩内存交换) ​

[    4.394218] zram0: detected capacity change from 0 to 1296032
[    4.414065] Adding 648012k swap on /dev/block/zram0.  Priority:-2

3.3 Second Stage Init (4.4s - 6.0s) ​

切换到真正的根文件系统后,执行 Second Stage Init。

3.3.1 APEX 模块挂载 ​

APEX (Android Pony EXpress) 是 Android 10+ 引入的模块化更新机制。

[    4.582604] apexd: Scanning /system/apex for pre-installed ApexFiles
[    4.583157] apexd: Found pre-installed APEX /system/apex/com.amlogic.mediaextractor.apex
[    4.584703] apexd: Found pre-installed APEX /system/apex/com.android.adbd.apex
[    4.585525] apexd: Found pre-installed APEX /system/apex/com.android.art.apex
[    4.590098] apexd: Found pre-installed APEX /system/apex/com.android.btservices.apex
[    4.591196] apexd: Found pre-installed APEX /system/apex/com.android.conscrypt.apex

挂载的 APEX 模块 (部分):

APEX 模块功能
com.android.artAndroid Runtime (ART)
com.android.conscryptSSL/TLS 加密
com.android.media媒体框架
com.android.adbdADB 守护进程
com.android.tethering网络共享
com.amlogic.mediaextractorAmlogic 媒体提取器

3.3.2 解析 init.rc 文件 ​

Init 进程解析以下 rc 文件:

/system/etc/init/hw/init.rc           # 主配置文件
/vendor/etc/init/hw/init.rc           # 厂商配置
/system/etc/init/*.rc                 # 系统服务
/vendor/etc/init/*.rc                 # 厂商服务
/odm/etc/init/*.rc                    # ODM 服务

3.3.3 启动 Native 守护进程 ​

服务名称可执行文件功能描述
ueventd/system/bin/ueventd设备节点管理
logd/system/bin/logd日志守护进程
servicemanager/system/bin/servicemanagerBinder 服务管理
hwservicemanager/system/bin/hwservicemanagerHIDL 服务管理
vold/system/bin/vold存储卷管理
healthd/system/bin/healthd电池健康监控
surfaceflinger/system/bin/surfaceflinger显示合成器
zygote/system/bin/app_process64Java 进程孵化器

3.4 启动 Zygote ​

Init 通过 init.zygote64.rc (或 init.zygote64_32.rc) 启动 Zygote:

rc
# /system/etc/init/hw/init.zygote64.rc
service zygote /system/bin/app_process64 -Xzygote /system/bin --zygote --start-system-server
    class main
    priority -20
    user root
    group root readproc reserved_disk
    socket zygote stream 660 root system
    socket usap_pool_primary stream 660 root system
    onrestart exec_background - system system -- /system/bin/vdc volume abort_fuse
    onrestart write /sys/power/state on
    onrestart restart audioserver
    onrestart restart cameraserver
    onrestart restart media
    onrestart restart netd
    onrestart restart wificond
    task_profiles ProcessCapacityHigh MaxPerformance

4. Zygote 进程启动 ​

4.1 Zygote 概述 ​

Zygote (受精卵) 是 Android 中所有 Java 应用进程的父进程。它的设计目的是:

  1. 预加载共享资源 - 加载常用的 Java 类和系统资源,子进程通过 fork 共享这些资源
  2. 快速启动应用 - 通过 fork 而非重新加载,大大加快应用启动速度
  3. 内存共享 - fork 后的 COW (Copy-On-Write) 机制减少内存占用

4.2 Zygote 启动流程 ​

┌─────────────────────────────────────────────────────────────────┐
│                    app_process64 启动                            │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│  AndroidRuntime::start()                                         │
│  - 启动 Java 虚拟机 (ART)                                        │
│  - 注册 JNI 函数                                                 │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│  ZygoteInit.main()                                               │
│  - 预加载类: preloadClasses()                                    │
│  - 预加载资源: preloadResources()                                │
│  - 预加载共享库: preloadSharedLibraries()                        │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│  创建 ZygoteServer                                               │
│  - 创建 /dev/socket/zygote 监听                                  │
│  - 创建 /dev/socket/usap_pool_primary 监听                       │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│  forkSystemServer()                                              │
│  - fork 出 SystemServer 进程                                     │
│  - 参数: --nice-name=system_server                               │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│  runSelectLoop()                                                 │
│  - 进入循环,等待 AMS 的应用启动请求                              │
│  - 收到请求后 fork 新的应用进程                                   │
└─────────────────────────────────────────────────────────────────┘

4.3 预加载内容 ​

4.3.1 预加载类 (preloadClasses) ​

Zygote 预加载约 6000+ 个常用 Java 类:

java
// 部分预加载类列表 (/system/etc/preloaded-classes)
android.app.Activity
android.app.Application
android.content.Context
android.view.View
android.widget.TextView
android.graphics.Bitmap
java.lang.String
java.util.ArrayList
...

4.3.2 预加载资源 (preloadResources) ​

java
// 预加载系统资源
- Drawables (图片资源)
- Color State Lists (颜色状态)
- Animations (动画)

4.3.3 预加载共享库 ​

java
// 预加载 Native 库
System.loadLibrary("android");
System.loadLibrary("jnigraphics");
System.loadLibrary("compiler_rt");

4.4 Socket 通信 ​

Zygote 创建两个 Unix Domain Socket:

Socket 路径用途
/dev/socket/zygote接收 AMS 的应用启动请求
/dev/socket/usap_pool_primaryUSAP (Unspecialized App Process) 池

4.5 Fork SystemServer ​

Zygote 的第一个子进程是 SystemServer:

java
// ZygoteInit.java
private static Runnable forkSystemServer(...) {
    String args[] = {
        "--setuid=1000",
        "--setgid=1000",
        "--setgroups=1001,1002,1003,...",
        "--capabilities=...",
        "--nice-name=system_server",
        "--runtime-args",
        "--target-sdk-version=34",
        "com.android.server.SystemServer",
    };

    int pid = Zygote.forkSystemServer(...);
    if (pid == 0) {
        // 子进程: SystemServer
        return handleSystemServerProcess(parsedArgs);
    }
    return null;
}

5. SystemServer 进程启动 ​

5.1 SystemServer 概述 ​

SystemServer 是 Android 系统的核心进程,运行所有核心系统服务。它由 Zygote fork 而来,是 Java 世界中最重要的进程。

5.2 启动流程 ​

┌─────────────────────────────────────────────────────────────────┐
│  SystemServer.main()                                             │
│  └─ run()                                                        │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│  createSystemContext()                                           │
│  - 创建系统级 Context                                            │
│  - 设置默认主题                                                   │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│  startBootstrapServices()    // 引导服务                         │
│  - Installer                                                     │
│  - ActivityManagerService (AMS)                                  │
│  - PowerManagerService                                           │
│  - PackageManagerService (PMS)                                   │
│  - UserManagerService                                            │
│  - SensorService                                                 │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│  startCoreServices()         // 核心服务                         │
│  - BatteryService                                                │
│  - UsageStatsService                                             │
│  - WebViewUpdateService                                          │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│  startOtherServices()        // 其他服务                         │
│  - WindowManagerService (WMS)                                    │
│  - InputManagerService                                           │
│  - NetworkManagementService                                      │
│  - ConnectivityService                                           │
│  - AudioService                                                  │
│  - ... (100+ 服务)                                               │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│  AMS.systemReady()                                               │
│  - 启动 Launcher                                                 │
│  - 启动 persistent 应用                                          │
└─────────────────────────────────────────────────────────────────┘

5.3 核心系统服务 ​

5.3.1 引导服务 (Bootstrap Services) ​

服务名称功能描述
ActivityManagerService (AMS)Activity、Service、BroadcastReceiver 生命周期管理
PackageManagerService (PMS)应用包安装、卸载、查询
PowerManagerService电源管理、唤醒锁
DisplayManagerService显示设备管理
UserManagerService多用户管理
SensorService传感器服务 (Native)

5.3.2 核心服务 (Core Services) ​

服务名称功能描述
BatteryService电池状态监控
UsageStatsService应用使用统计
WebViewUpdateServiceWebView 更新
SchedulingPolicyService调度策略

5.3.3 其他服务 (Other Services) ​

服务名称功能描述
WindowManagerService (WMS)窗口管理、动画、输入事件分发
InputManagerService输入设备管理
AudioService音频管理
ConnectivityService网络连接管理
WifiServiceWiFi 管理
BluetoothService蓝牙管理
NotificationManagerService通知管理
LocationManagerService位置服务
CameraService相机服务 (Native)
MediaSessionService媒体会话管理

5.4 服务启动日志 ​

从启动日志中可以看到 HAL 服务的注册:

[   10.998925] servicemanager: Could not find android.hardware.power.stats.IPowerStats
[   11.003765] servicemanager: Found android.frameworks.stats.IStats/default
[   11.005043] servicemanager: Found android.hardware.memtrack.IMemtrack/default
[   11.166776] servicemanager: Found android.hardware.power.IPower/default
[   11.178539] servicemanager: Found android.hardware.light.ILights/default
[   12.305982] servicemanager: Found android.hardware.health.IHealth/default
[   16.092597] servicemanager: Found android.hardware.wifi.supplicant.ISupplicant/default
[   16.136247] servicemanager: Found android.hardware.wifi.IWifi/default

5.5 AMS.systemReady() ​

当所有系统服务启动完成后,AMS 调用 systemReady():

java
// ActivityManagerService.java
public void systemReady(final Runnable goingCallback, ...) {
    // 1. 启动 persistent 应用 (如系统 UI)
    startPersistentApps(PackageManager.MATCH_DIRECT_BOOT_AWARE);

    // 2. 启动 Home Activity (Launcher)
    startHomeActivityLocked(currentUserId, "systemReady");

    // 3. 发送 BOOT_COMPLETED 广播 (延迟发送)
    // ...
}

6. Launcher 启动 ​

6.1 Launcher 概述 ​

Launcher 是 Android 的桌面应用,也是用户交互的入口点。它是一个具有 HOME 类别的 Activity。

6.2 Launcher 启动流程 ​

┌─────────────────────────────────────────────────────────────────┐
│  AMS.systemReady()                                               │
│  └─ startHomeActivityLocked()                                    │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│  RootWindowContainer.startHomeOnAllDisplays()                    │
│  - 查找 Home Activity (Intent.CATEGORY_HOME)                     │
│  - 通过 PMS 解析 Launcher 应用                                   │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│  ActivityStarter.execute()                                       │
│  - 创建 ActivityRecord                                           │
│  - 请求 Zygote fork 新进程                                       │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│  Zygote fork Launcher 进程                                       │
│  - 复制 Zygote 的内存空间                                        │
│  - 执行 ActivityThread.main()                                    │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│  ActivityThread.main()                                           │
│  - 创建主线程 Looper                                             │
│  - 创建 Application                                              │
│  - attach 到 AMS                                                 │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│  Launcher Activity 启动                                          │
│  - onCreate() / onStart() / onResume()                           │
│  - 加载桌面图标和小部件                                           │
│  - 显示桌面                                                       │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│  Boot Animation 结束                                             │
│  └─ WMS.enableScreenAfterBoot()                                  │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│  发送 BOOT_COMPLETED 广播                                        │
│  - sys.boot_completed = 1                                        │
│  - 应用可以接收 BOOT_COMPLETED 广播                               │
└─────────────────────────────────────────────────────────────────┘

6.3 Home Intent ​

系统通过以下 Intent 查找 Launcher:

java
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory(Intent.CATEGORY_HOME);
homeIntent.addCategory(Intent.CATEGORY_DEFAULT);

6.4 Launcher 进程创建 ​

Launcher 进程由 Zygote fork:

  1. AMS 向 Zygote 发送启动请求
  2. Zygote fork 新进程
  3. 新进程执行 ActivityThread.main()
  4. 创建 Application 和 Activity

6.5 开机动画结束 ​

当 Launcher 首次绘制完成后:

java
// WindowManagerService.java
void enableScreenAfterBoot() {
    // 结束开机动画
    performEnableScreen();
    // 通知 SurfaceFlinger 停止 bootanimation
}

6.6 Boot Completed ​

日志摘录:
[   17.614257] apexd: markBootCompleted() received by ApexService
[   17.819191] android.hardware.boot-service: sys.boot_completed: 1

sys.boot_completed=1 表示:

  1. 系统启动完成
  2. Launcher 已显示
  3. 用户可以开始交互
  4. 应用可以接收 ACTION_BOOT_COMPLETED 广播

启动时间线总结 ​

各阶段耗时 ​

阶段开始时间结束时间耗时
Bootloader (BL2-BL32)0782 ms782 ms
U-Boot782 ms2,157 ms1,375 ms
Bootloader 总计02,157 ms~2.2s
Kernel 启动0 s0.22 s220 ms
Init First Stage0.22 s4.4 s4,180 ms
Init Second Stage4.4 s6.0 s1,600 ms
Kernel + Init 总计0 s6.0 s~6.0s
Zygote 启动~6.0 s~7.0 s~1,000 ms
SystemServer 启动~7.0 s~15.0 s~8,000 ms
Launcher 启动~15.0 s~17.8 s~2,800 ms
Boot Complete-17.8 s-
总启动时间--~20 s

启动时间分布图 ​

0s        5s        10s       15s       20s
|---------|---------|---------|---------|
[BL][UBT]                                    Bootloader (~2.2s)
     [====Kernel + Init====]                 内核 + Init (~6.0s)
                [Zygote]                     Zygote (~1.0s)
                  [====SystemServer====]    系统服务 (~8.0s)
                              [Launcher]    桌面启动 (~2.8s)
                                       [✓]  Boot Complete (17.8s)

关键代码路径 ​

Bootloader 代码 ​

bootloader/uboot-repo/
├── bl2/                    # BL2 源码
├── bl30/                   # AOCPU 固件 (FreeRTOS)
├── bl31/                   # ARM Trusted Firmware
├── bl32/                   # OP-TEE
└── bl33/v2023/             # U-Boot 2023
    └── board/amlogic/s7d/  # 板级代码

Kernel 代码 ​

common/common14-5.15/
├── arch/arm64/boot/dts/amlogic/    # 设备树
├── drivers/amlogic/                 # Amlogic 驱动
└── include/linux/amlogic/           # 头文件

Init 代码 ​

system/core/init/
├── init.cpp                    # Init 主程序入口
├── first_stage_init.cpp        # First Stage
├── second_stage_resources.cpp  # Second Stage
├── service.cpp                 # 服务解析和管理
├── property_service.cpp        # 属性服务
├── action_parser.cpp           # rc 文件解析
└── builtins.cpp                # 内建命令

device/amlogic/ross/
├── init.amlogic.rc             # Amlogic init 配置
├── init.amlogic.board.rc       # 板级配置
└── ueventd.rc                  # 设备节点权限

Zygote 代码 ​

frameworks/base/core/
├── java/com/android/internal/os/
│   ├── ZygoteInit.java         # Zygote Java 入口
│   ├── Zygote.java             # fork 封装
│   ├── ZygoteServer.java       # Socket 服务
│   └── RuntimeInit.java        # 运行时初始化
└── jni/
    └── com_android_internal_os_Zygote.cpp  # Native fork

frameworks/base/cmds/app_process/
└── app_main.cpp                # app_process 入口

SystemServer 代码 ​

frameworks/base/services/
├── java/com/android/server/
│   ├── SystemServer.java       # 启动入口
│   ├── SystemServiceManager.java
│   ├── am/ActivityManagerService.java
│   ├── wm/WindowManagerService.java
│   └── pm/PackageManagerService.java
└── core/java/com/android/server/

Launcher 代码 ​

packages/apps/Launcher3/         # AOSP Launcher
packages/apps/TvLauncher/        # Android TV Launcher
vendor/amlogic/apps/Launcher/    # Amlogic 定制 Launcher

附录:常用调试命令 ​

查看启动时间 ​

bash
# 内核启动日志
adb shell dmesg | grep -E "^\[.*\]"

# Android 启动事件
adb logcat -b events | grep boot

# 查看启动属性
adb shell getprop | grep boot

# 查看 Zygote/SystemServer 进程
adb shell ps -A | grep -E "zygote|system_server"

Bootchart 分析 ​

bash
# 启用 bootchart (userdebug 版本)
adb shell 'touch /data/bootchart/enabled'
adb reboot

# 收集数据后使用 bootchart 工具分析

Systrace 分析 ​

bash
python systrace.py -o boot_trace.html \
    sched freq idle am wm view \
    --boot

上次更新于: