- Android 14 开机时间优化措施汇总-CSDN博客
- Android 14 开机时间优化措施-CSDN博客
- 根据systrace报告优化系统时需要关注的指标和优化策略-CSDN博客
- Android系统上常见的性能优化工具-CSDN博客
- Android上如何使用perfetto分析systrace-CSDN博客
- Android系统设置kernel log level的方法-CSDN博客
- Android14系统应用统一裁剪方案_android 开机 服务 裁剪-CSDN博客
- Android系统上Bootchart的使用_android bootchart-CSDN博客
- Android init.rc如何并行执行任务-CSDN博客
- Android init常用调试工具-CSDN博客
- 如何识别Android init 中的缓慢操作-CSDN博客
- Android init 中的wait_for_property指令-CSDN博客
- Android init.rc各阶段的定义和功能-CSDN博客
- Android init.rc的启动流程-CSDN博客
Android init.rc各阶段的定义和功能
在 Android 的 init.rc
文件中,early-init
、init
、late-init
、early-sf
、fs
、post-fs-data
、early-boot
、boot
和 service
等不同阶段(phases)用于定义系统初始化的不同任务和服务的启动顺序。
这些阶段也基本上init.rc启动的流程,我们再按init.rc中定义的这些阶段来梳理下init.rc的启动流程,以和之前分析逻辑流程相互对应。启动流程如下:
bash
1) early-init
a) wait_for_coldboot_done
b) property_init
c) keychord_int
d) console_init
e) set_init_properties
2) init
3) late-init
4) early-fs
5) fs
6) post-fs
f) property_service_init
g) signal_init
h) check_startup
7) early-boot
8) boot
9) service
init.rc中的程序大致会按照这个顺序执行,靠前的(early-init init)是在init.cpp中触发启动的,后面的是在这些命令靠trigger来触发的。
service有class core、main、hal 、default 、late_start等这些service也是通过on boot 中class_start来统一启动的。 还有一种就是on property: 例如on property:sys.boot_completed=1,是通过设置系统属性来触发启动的。
下面是这些阶段的详细定义、功能和在 init.rc
文件中的配置方法。
1.各阶段的定义和功能
1.1 early-init
阶段
定义 : early-init
是系统启动的最初阶段,用于完成最基本的系统初始化任务。
功能:
-
挂载关键分区 :如
/system
、/data
、/vendor
。 -
设置基本系统属性。
-
进行一些基础的初始化操作。
配置示例:
bash
# early-init 阶段的任务
on early-init {
# 挂载系统分区
mount ext4 /dev/block/bootdevice/by-name/system /system
# 设置基本系统属性
export ro.build.id=PQ1A.190406.012
}
触发时机 : 在 init
进程开始运行后立即执行,通常在内核完成启动后最初的阶段。
功能总结:
-
挂载分区。
-
设置系统属性。
-
基础初始化任务。
1.2 init
阶段
定义 : init
阶段是 init
进程的主要执行阶段,负责启动核心系统服务和进行系统初始化任务。
功能:
-
启动关键服务 :如
zygote
(应用进程的启动器)、surfaceflinger
(图形显示管理器)。 -
执行系统配置脚本。
配置示例:
bash
# init 阶段的任务
on init {
# 启动 Zygote 进程
start zygote
# 启动 SurfaceFlinger 服务
start surfaceflinger
}
触发时机 : 在 early-init
完成后进行。
功能总结:
-
启动系统服务。
-
执行系统配置任务。
1.3 late-init
阶段
定义 : late-init
阶段是 init
阶段完成之后进行的,通常用于应用层服务的启动。
功能:
-
启动应用框架服务 :如
ActivityManager
和PackageManager
。 -
执行系统初始化后的配置任务。
配置示例:
bash
# late-init 阶段的任务
on late-init {
# 启动 Activity Manager 服务
start activity
# 启动 Package Manager 服务
start package
}
触发时机 : 在 init
阶段完成后进行。
功能总结:
-
启动应用框架服务。
-
执行系统初始化后的任务。
1.4 early-sf
阶段
定义 : early-sf
是 init
进程中的一个特殊阶段,专注于启动 SurfaceFlinger
服务。
功能:
- 启动
SurfaceFlinger
:图形层管理器,用于处理图形显示和合成。
配置示例:
bash
# early-sf 阶段的任务
on early-sf {
# 启动 SurfaceFlinger 服务
start surfaceflinger
}
触发时机 : 在 init
阶段中,SurfaceFlinger
配置完成后执行。
功能总结:
- 启动
SurfaceFlinger
,管理图形显示层。
1.5 fs
阶段
定义 : fs
阶段用于挂载文件系统和执行文件系统相关的操作。
功能:
-
挂载额外的文件系统。
-
设置文件系统的相关操作。
配置示例:
bash
# fs 阶段的任务
on fs {
# 挂载文件系统
mount ext4 /dev/block/bootdevice/by-name/data /data
}
触发时机 : 在 early-init
之后、post-fs-data
之前进行。
功能总结:
-
挂载额外的文件系统。
-
文件系统操作。
1.6 post-fs-data
阶段
定义 : post-fs-data
阶段是在文件系统挂载后执行的阶段。
功能:
- 执行数据相关的任务:如设置文件权限、初始化文件内容等。
配置示例:
bash
# post-fs-data 阶段的任务
on post-fs-data {
# 初始化数据分区
ensure_path_mounted /data
}
触发时机 : 在 fs
阶段完成后进行。
功能总结:
- 完成文件系统的数据相关任务。
1.7 early-boot
阶段
定义 : early-boot
阶段是在 init
阶段之后进行的,主要处理系统启动的早期任务。
功能:
- 进行系统启动的早期任务。
配置示例:
bash
# early-boot 阶段的任务
on early-boot {
# 执行启动前的任务
# (示例内容可以根据需求进行调整)
}
触发时机 : 在 post-fs-data
阶段之后、boot
阶段之前进行。
功能总结:
- 进行启动时的早期任务。
1.8 boot
阶段
定义 : boot
阶段是系统启动的主要阶段,用于执行系统启动的最后任务。
功能:
-
启动应用程序和系统服务。
-
进行系统启动的最后配置。
配置示例:
bash
# boot 阶段的任务
on boot {
# 启动服务和应用程序
start some_service
}
触发时机 : 在 early-boot
阶段完成后进行。
功能总结:
-
启动服务。
-
完成系统启动任务。
1.9 service
阶段
定义 : service
阶段用于定义和管理服务的启动和配置。
功能:
- 启动和管理系统服务。
配置示例:
bash
# service 阶段的任务
service zygote /system/bin/app_process /system/bin --zygote
socket zygote stream 660 system system
onrestart restart media
触发时机 : 在 init
阶段中定义服务的具体配置。
功能总结:
- 定义服务的启动、配置和管理任务。
2. 各阶段的执行顺序
以下是 init.rc
文件中各阶段的标准执行顺序:
|--------------|-------------|----------------------|---------------------|
| 阶段 | 定义 | 主要任务 | 触发时机 |
| early-init | 系统启动的最初阶段 | 挂载分区、设置系统属性 | 内核启动后 init 进程开始时 |
| fs | 文件系统挂载阶段 | 挂载文件系统 | early-init 之后 |
| post-fs-data | 文件系统数据处理阶段 | 执行数据相关的任务 | fs 完成后 |
| early-boot | 启动的早期任务阶段 | 进行系统启动的早期任务 | post-fs-data 之后 |
| init | 主要的系统初始化阶段 | 启动核心服务、执行配置脚本 | early-boot 完成后 |
| early-sf | 图形显示管理器启动阶段 | 启动 SurfaceFlinger 服务 | init 阶段中 |
| boot | 系统启动的最后阶段 | 启动应用程序和系统服务 | early-boot 完成后 |
| late-init | 系统初始化完成后的阶段 | 启动应用框架服务、执行最终任务 | init 和 early-sf 完成后 |
| service | 服务定义和管理阶段 | 定义服务的启动和配置任务 | init 阶段中 |
3.各阶段任务的触发条件
以下是各阶段任务的触发条件:
-
early-init
:在init
进程开始运行时执行。 -
fs
:在early-init
完成后、post-fs-data
之前进行。 -
post-fs-data
:在文件系统挂载后进行的数据任务阶段。 -
early-boot
:在 `post-fs-data