Android init.rc各阶段的定义和功能

Android开机优化系列文档-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

相关推荐
千里马学框架3 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台3 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone3 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc3 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo3 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077003 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼3 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
liangshanbo12153 天前
React 性能优化实战
性能优化·react
AFinalStone3 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen3 天前
属性动画原理与高级动画实现
android·kotlin·canvas