[Android] Android启动流程

1.启动电源以及系统启动

当电源被启动时,引导芯片载入了预定义的引导程序(固化在ROM中),并将引导程序BootLoader加载到RAM中开始执行。

2.引导程序BootLoader

BootLoader是一个小程序,其主要作用是初始化基本的硬件设备,准备内核运行环境。 或者引导进入recovery模式

aml平台解析misc分区启动recovery逻辑
在这里插入图片描述

3.Linux内核启动

Android的boot.img 一般打包了kernel镜像和根文件系统ramdisk。 内核会加载启动各个驱动,装载根文件系统,并启动init进程。boot.img包含kernel 和ramdisk。
在这里插入图片描述

ramdisk文件结构,或者可以直接查看设备根目录
在这里插入图片描述

4.init进程启动

init进程是系统启动时的第一个用户空间进程。有一些重要工作:

创建和挂载启动所需的文件目录:
在系统启动过程中,init进程首先会创建和挂载所需的文件目录,这些目录包括根目录、/proc、/sys等,以确保系统能够正常运行和提供所需的资源和环境。
在这里插入图片描述

初始化和启动属性服务:
Android系统中的属性服务用于存储系统的属性信息,这些信息可以用于配置系统的行为和特性。init进程在启动时会初始化并启动属性服务,这确保了系统能够根据需要正确配置自身,并提供正确的服务。
在这里插入图片描述

解析init.rc配置文件并启动Zygote进程:
init进程会解析init.rc配置文件,该文件描述了系统在启动时需要进行的各种操作,包括启动系统服务、挂载文件系统等。其中,init.rc文件中的一项重要任务是启动Zygote进程。Zygote进程是Android系统中的一个重要进程,是所有应用程序的起点,任何新应用程序的进程都是由Zygote进程来孵化和启动的。

遍历解析rc
在这里插入图片描述

通过触发器启动各个阶段服务进程

在这里插入图片描述

zygote服务配置启动
在这里插入图片描述

启动其它守护进程: adb, vold, ServiceManager等

5.Zygote进程启动

Zygote进程是Android系统的关键进程,负责fork出应用进程,是所有应用进程的父进程。Zygote初始化时,会创建java虚拟机(dalvik/art)并为其注册JNI方法,预装载系统的资源文件和java类。所有fork出来的进程将继承和共享这些预加载资源。创建服务器端Socket以便接收请求,并启动SystemServer进程。

创建java虚拟机

在这里插入图片描述

注册jni方法
在这里插入图片描述

创建服务端socket

在这里插入图片描述

预加载资源
在这里插入图片描述

启动SystemServer进程
在这里插入图片描述

6.SystemServer进程启动

SystemServer是Zygote fork出来的第一个进程,负责启动并管理系统的各项核心binder服务。包括但不限于包管理器(PackageManagerService)、窗口管理器(WindowManagerService)、通知管理器(NotificationManagerService)、ActivityManagerService 等。
在这里插入图片描述

7.Launcher启动

SystemServer 加载完所有java服务后,最后会调用ActivityManagerService 的SystemReady(),发出 Intent “android.intent.category.HOME”,响应这个Intent的apk会运行起来,一般是默认的Launcher应用响应。
在这里插入图片描述

  • 26
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值