Android系统启动流程
2024-11-11
| 2024-12-4
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password

Android系统启动流程

本文主要讲解Android的启动流程,暂时不涉及代码的具体细节
 

零、启动过程概述

  • 启动电源:按下电源按键后。从预定义的地方开始执行,加载Bootloader到RAM并执行
  • Bootloader:它是在操作系统内核运行之前到一段程序,初始化硬件设备,建立内存空间映射
  • Kernel:启动内核后,设置缓存、计划列表、加载驱动、启动init进程等
  • init:初始化和启动PropertService。启动zygote和ServiceManager进程
  • ztgote:native层:启动VM并为VM注册JNI方法,调用ZygoteInit进入Java层;Java层:预加载类、库等资源,创建服务端Socket,启动SystemService进程
  • Launcher:在SystemService.startOtherService中的AMS.systeReady中启动Launcher
 

一、开机

当我们按下电源键时,CPU会从只读存储器(ROM)的特定地址开始加载引导程序。这个过程涉及执行Bootloader代码,将其加载到内存(RAM)中,然后执行BootloaderBootloader虽然不属于Android系统的一部分,但它扮演着至关重要的角色。它的主要功能包括初始化硬件设备、引导系统开机和加载内核文件。这个角色类似于Windows系统(PC)中的BIOS程序。由于Bootloader的具体工作内容较为复杂,本文不再详细阐述。

二、Linux内核启动

Linux内核启动时,它会初始化各种软硬件环境,加载驱动程序,并挂载根文件系统等。内核启动完成后,它会在系统文件中寻找并启动"init"进程。这标志着Android世界的开启。

三、init进程

init进程是Linux系统中用户空间的第一个进程,其进程号为1。它被称为root进程或所有进程的父进程。init进程有两项主要任务:
  1. 挂载目录,如/sys、/dev、/proc等
  1. 运行init.rc脚本。在解析init.rc时,init进程会创建Zygote进程

四、Zygote进程的创建

init进程在解析init.rc脚本时创建Zygote进程。Zygote是建立真正Android运行空间的关键,是Android系统中最重要的进程之一。Android中的所有应用进程都由Zygote进程Fork而来,使Zygote成为Android系统所有进程的父进程。

五、SystemServer进程的创建

Zygote进程做完初始化工作后,会启动SystemServer进程,该进程是framework的核心服务,与Zygote进程一样,它也是Android系统中最重要的进程之一
SystemServer的主要作用是启动各种系统服务,比如:ActivityManagerServicePackageManagerServerWindowManagerService以及硬件相关的Service等服务,我们平时用到的所有服务都是从SystemService启动的 ,这些服务都是运行在SystemService进程的不同线程中,我们需要用到的系统服务都是从SystemService进程通讯获取的

六、系统启动完成

一旦系统服务在内存中跑起来了,Android 就完成了启动过程。在这个时候 “ACTION_BOOT_COMPLETED” 开机启动广播就会发出去
借助网上的一张图来看Android系统启动流程:
notion image
notion image
  • Android
  • ROM
  • Unreal Engine Dump及修复结构AOSP源码定制学习笔记
    Loading...
    目录