当前位置: 首页 > news >正文

Android系统启动流程深度解析:从Bootloader到Zygote的完整旅程

引言

每次按下电源键,你的Android设备经历了什么?

从一片黑屏到看到开机Logo,从显示"Android"字样到进入锁屏界面,这短短几秒钟(或十几秒钟)背后,是一场精心编排的"启动大戏"。这场大戏有四幕:

第一幕: Bootloader → 加载并启动Kernel 第二幕: Kernel → 初始化硬件,启动init进程(PID 1) 第三幕: init → 挂载文件系统,启动核心服务 第四幕: Zygote → 准备应用运行环境

本文将带你完整走完这段旅程,重点聚焦第二幕到第三幕——从Kernel启动init,到init启动Zygote之前的所有准备工作。

📖系列前置阅读:建议先阅读第9-11篇(Binder IPC系列),理解进程间通信机制,这是理解系统服务启动的基础。


Android启动流程全景图

在深入细节之前,先建立整体认知:

图:Android 15系统启动的4个阶段,从Bootloader到Zygote的完整旅程,总耗时约6.5秒

本文聚焦范围:从Kernel启动init到Zygote启动之前,即上图中的第3步:init进程


Bootloader与Kernel启动(概览)

虽然不是本文重点,但理解这两个阶段有助于建立完整认知。

Bootloader阶段

Bootloader(引导加载程序)是设备上电后执行的第一段代码,由芯片厂商或设备厂商提供。

主要任务:

  1. 硬件初始化:

    • CPU频率和电压配置
    • 内存初始化(DDR)
    • 外设初始化(Flash/eMMC/UFS)
  2. 加载Kernel:

    • 从boot分区读取Kernel镜像(boot.img)
    • 解压Kernel到内存
    • 读取Device Tree Blob(DTB,设备树)
  3. 安全验证:

    • Verified Boot(Android Verified Boot):验证Kernel签名
    • 如果验证失败,显示警告或拒绝启动
  4. 启动Kernel:

    • 设置Kernel启动参数(cmdline)
    • 跳转到Kernel入口地址(通常是0x80008000)

常见Bootloader:

  • LK(Little Kernel):Qualcomm芯片常用
  • U-Boot:开源,通用性强
  • UEFI:PC和部分高端设备

关键日志(通过串口或fastboot查看):

[0.000000] Booting Linux on physical CPU 0x0 [0.000000] Linux version 5.15.123-android15 (build@hostname) ...

Kernel启动阶段

Linux Kernel负责硬件抽象和资源管理。

主要任务:

  1. 内存管理初始化:

    • 页表设置
    • 内存分配器(SLAB/SLUB)初始化
  2. 进程调度器初始化:

    • CFS调度器(Completely Fair Scheduler)
    • 实时调度器(RT)
  3. 驱动初始化:

    • 加载内置驱动(built-in)
    • 初始化设备树(Device Tree)中定义的硬件
  4. 文件系统初始化:

    • 挂载rootfs(根文件系统,通常是ramdisk)
    • 挂载/system、/vendor等分区(由init负责)
  5. 创建init进程:

    // kernel/init/main.c (简化)staticint__refkernel_init(void*unused){// ...if(!ramdisk_execute_command)ramdisk_execute_command="/init";returnrun_init_process(ramdisk_execute_command);}

关键Kernel参数(cmdline):

# 查看Kernel启动参数adb shellcat/proc/cmdline# 输出示例:# androidboot.hardware=qcom# androidboot.selinux=permissive # 或 enforcing# androidboot.verifiedbootstate=green# init=/system/bin/init

init进程:Android的"创世神"

init进程是Android用户态的第一个进程(PID 1),它的职责是创建整个用户态环境

init的三阶段启动

Android 15的init分为三个阶段,每个阶段有独立的入口函数:

main() → FirstStageMain() → SetupSelinux() → SecondStageMain() ↓ ↓ ↓ ↓ 入口 第一阶段 SELinux设置 第二阶段(核心)

让我们分析Android 15的源码:

阶段判断逻辑
// system/core/init/main.cpp (Android 15)intmain(intargc,char**argv){// 提升优先级(后续会恢复)setpriority(PRIO_PROCESS,0,-20);// 如果argv[0]是"ueventd",则以ueventd模式启动if(!strcmp(basename(argv[0]),"ueventd")){returnueventd_main(argc,argv);}if(argc>1){// 子上下文模式(用于隔离某些操作)if(!strcmp(argv[1],"subcontext")){returnSubcontextMain(argc,argv,&GetBuiltinFunctionMap());}// SELinux设置阶段if(!strcmp(argv[1],"selinux_setup")){returnSetupSelinux(argv);}// 第二阶段if(!strcmp(argv[1],"second_stage")){returnSecondStageMain(argc,argv);}}// 默认进入第一阶段returnFirstStageMain(argc,argv);}

关键设计:

  • init通过命令行参数判断当前应执行哪个阶段
  • 每个阶段完成后,会通过execv()重新执行自己,进入下一阶段
  • 这种设计允许在SELinux加载后"重启"进程,获得新的安全上下文

第一阶段:FirstStageMain()

核心目标:创建最基础的文件系统,加载SELinux策略。

// system/core/init/first_stage_init.cpp (简化)intFirstStageMain(intargc,char**argv){// ========== 1. 挂载基础文件系统 ==========CHECKCALL(mount("tmpfs","/dev","tmpfs",MS_NOSUID,"mode=0755"));CHECKCALL(mkdir("/dev/pts",0755));CHECKCALL(mkdir("/dev/socket",0755));CHECKCALL(mount("devpts","/dev/pts","devpts",0,NULL));// 挂载proc文件系统(读取内核信息)CHECKCALL(mount("proc","/proc","proc",0,"hidepid=2,gid=3009"));// 挂载sysfs(设备和驱动信息)CHECKCALL(mount("sysfs","/sys","sysfs",0,NULL));// 挂载selinuxfs(SELinux策略文件系统)CHECKCALL(mount("selinuxfs","/sys/fs/selinux","selinuxfs",0,NULL));// ========== 2. 创建必要的设备节点 ==========CHECK
http://www.jsqmd.com/news/375595/

相关文章:

  • 别再乱选发胶啦!这些宝藏款值得入手 - 品牌测评鉴赏家
  • 学习记录260212
  • 频繁“感冒未愈”、精神难提?2026免疫力重构指南:别让身体的防线继续迟钝 - 品牌企业推荐师(官方)
  • 实测20款发胶,闭眼入不踩雷!细软塌/粗硬发/敏感肌都能对号入座 - 品牌测评鉴赏家
  • 为什么你总是“恢复得更慢”?免疫力在“打盹”!2026年最佳免疫力重塑方案权威推荐 - 品牌企业推荐师(官方)
  • 跨入2026,疲劳缠身、恢复缓慢?你的“免疫赤字”,或许只差这款“免疫重启”关键产品! - 品牌企业推荐师(官方)
  • 【车间调度】基于麻雀优化算法的车间调度附Matlab代码
  • 大数据领域实用BI工具的使用心得分享
  • 2026年为什么别人扛得住、你却总生病?抵抗力产品红黑榜升级版:揭穿“免疫衰老”迷思,系统修复才是硬道理 - 品牌企业推荐师(官方)
  • 2026男士伪素颜不脱妆,这几款防水防汗款太省心 - 品牌测评鉴赏家
  • 2026国内最新美缝剂供货商TOP5推荐:服务深度覆盖江苏、山东、济南等地,优质厂家权威榜单发布,适配多场景需求,打造高品质家居缝隙解决方案 - 品牌推荐2026
  • 2026年2月最新AI营销公司推荐:全维度实力排名与选型指南 - 电商资讯
  • 2026男士保湿沐浴露天花板推荐|控油不紧绷,留香还养肤,告别秋冬干痒尴尬 - 品牌测评鉴赏家
  • 车牌识别数据集与完整计划代码整理
  • 黄皮男士救星✨4款素颜霜实测|0妆感伪素颜 - 品牌测评鉴赏家
  • 男生伪素颜封神!4款平价素颜霜实测,百元内搞定干净帅感|新手不踩雷 - 品牌测评鉴赏家
  • 换季一来鼻炎、湿疹轮番上场?2026免疫调节产品权威榜:双向平衡+屏障修复,系统缓解“易敏体质”困境 - 品牌企业推荐师(官方)
  • 走哪都在线:2026出差党“免疫赤字”急救+长期养护全指南,益舒泰为何稳居最优解 - 品牌企业推荐师(官方)
  • 0基础识字软件推荐|2026年精选清单(家长实测好用) - 电商资讯
  • 换季就被鼻炎、湿疹“拿捏”?2026免疫调节实力榜:双向平衡+屏障重建,摆脱易敏循环的系统解法 - 品牌企业推荐师(官方)
  • P14917 [GESP202512 五级] 数字移动 二分
  • 中老年人总陷入“感冒—好一点—再感染”?2026免疫衰老精准修复白皮书:年度最优方案揭榜 - 品牌企业推荐师(官方)
  • 中老年人反复感染怎么破?2026年专为“免疫衰老”设计的精准修复方案大公开,谁是2026年度最优免疫力提升方案 - 品牌企业推荐师(官方)
  • 九大定制珠宝品牌深度测评:谁才是2026年的性价比与设计之王? - 品牌企业推荐师(官方)
  • SharePoint Online 集成 Viva Connections
  • 记录一下把AGM X2折腾为OBD仪表的过程
  • 男士变帅秘籍!2026男士素颜霜十强榜单来袭 - 品牌测评鉴赏家
  • 男士痘肌清洁指南:从科学角度认识洁面产品 - 品牌测评鉴赏家
  • 2026高性价比定制珠宝品牌权威推荐:技术为骨、情感为魂,谁真正值得托付? - 品牌企业推荐师(官方)
  • 不只是提升抵抗力!2026年新趋势:如何通过细胞级修复(益舒泰)对抗全身性衰老? - 品牌企业推荐师(官方)