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

  
Android开机优化系列文档-CSDN博客

  • 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-initinitlate-initearly-sffspost-fs-dataearly-bootbootservice 等不同阶段(phases)用于定义系统初始化的不同任务和服务的启动顺序。

这些阶段也基本上init.rc启动的流程,我们再按init.rc中定义的这些阶段来梳理下init.rc的启动流程,以和之前分析逻辑流程相互对应。启动流程如下:

1) early-init a) wait_for_coldboot_done b) property_init c) keychord_int d) console_init e) set_init_properties2) init
3) late-init
4) early-fs5) fs6) post-fs f) property_service_init g) signal_init h) check_startup7) early-boot8) boot9) 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

  • 设置基本系统属性

  • 进行一些基础的初始化操作

配置示例

# 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(图形显示管理器)。

  • 执行系统配置脚本

配置示例

# init 阶段的任务
on init {# 启动 Zygote 进程start zygote# 启动 SurfaceFlinger 服务start surfaceflinger
}

触发时机: 在 early-init 完成后进行。

功能总结

  • 启动系统服务。

  • 执行系统配置任务。

1.3 late-init 阶段

定义late-init 阶段是 init 阶段完成之后进行的,通常用于应用层服务的启动。

功能

  • 启动应用框架服务:如 ActivityManagerPackageManager

  • 执行系统初始化后的配置任务

配置示例

# late-init 阶段的任务
on late-init {# 启动 Activity Manager 服务start activity# 启动 Package Manager 服务start package
}

触发时机: 在 init 阶段完成后进行。

功能总结

  • 启动应用框架服务。

  • 执行系统初始化后的任务。

1.4 early-sf 阶段

定义early-sfinit 进程中的一个特殊阶段,专注于启动 SurfaceFlinger 服务。

功能

  • 启动 SurfaceFlinger:图形层管理器,用于处理图形显示和合成。

配置示例

# early-sf 阶段的任务
on early-sf {# 启动 SurfaceFlinger 服务start surfaceflinger
}

触发时机: 在 init 阶段中,SurfaceFlinger 配置完成后执行。

功能总结

  • 启动 SurfaceFlinger,管理图形显示层。

1.5 fs 阶段

定义fs 阶段用于挂载文件系统和执行文件系统相关的操作。

功能

  • 挂载额外的文件系统

  • 设置文件系统的相关操作

配置示例

# 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 阶段是在文件系统挂载后执行的阶段。

功能

  • 执行数据相关的任务:如设置文件权限、初始化文件内容等。

配置示例

# post-fs-data 阶段的任务
on post-fs-data {# 初始化数据分区ensure_path_mounted /data
}

触发时机: 在 fs 阶段完成后进行。

功能总结

  • 完成文件系统的数据相关任务。

1.7 early-boot 阶段

定义early-boot 阶段是在 init 阶段之后进行的,主要处理系统启动的早期任务。

功能

  • 进行系统启动的早期任务

配置示例

# early-boot 阶段的任务
on early-boot {# 执行启动前的任务# (示例内容可以根据需求进行调整)
}

触发时机: 在 post-fs-data 阶段之后、boot 阶段之前进行。

功能总结

  • 进行启动时的早期任务。

1.8 boot 阶段

定义boot 阶段是系统启动的主要阶段,用于执行系统启动的最后任务。

功能

  • 启动应用程序和系统服务

  • 进行系统启动的最后配置

配置示例

# boot 阶段的任务
on boot {# 启动服务和应用程序start some_service
}

触发时机: 在 early-boot 阶段完成后进行。

功能总结

  • 启动服务。

  • 完成系统启动任务。

1.9 service 阶段

定义service 阶段用于定义和管理服务的启动和配置。

功能

  • 启动和管理系统服务

配置示例

# service 阶段的任务
service zygote /system/bin/app_process /system/bin --zygotesocket zygote stream 660 system systemonrestart 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/48469.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时间卷积网络(TCN):序列建模的强大工具(附Pytorch网络模型代码)

这里写目录标题 1. 引言2. TCN的核心特性2.1 序列建模任务描述2.2 因果卷积2.3 扩张卷积2.4 残差连接 3. TCN的网络结构4. TCN vs RNN5. TCN的应用TCN的实现 1. 引言 引用自:Bai S, Kolter J Z, Koltun V. An empirical evaluation of generic convolutional and re…

Linux系统之部署扫雷小游戏(三)

Linux系统之部署扫雷小游戏(三) 一、小游戏介绍1.1 小游戏简介1.2 项目预览二、本次实践介绍2.1 本地环境规划2.2 本次实践介绍三、检查本地环境3.1 检查系统版本3.2 检查系统内核版本3.3 检查软件源四、安装Apache24.1 安装Apache2软件4.2 启动apache2服务4.3 查看apache2服…

大厂生产解决方案:泳道隔离机制

更多大厂面试内容可见 -> http://11come.cn 大厂生产解决方案:泳道隔离机制 背景 在公司中,由于项目多、开发人员多,一般会有多套测试环境(可以理解为多个服务器),同一套服务会在多套测试环境中都部署…

《逻辑003:实现request接口获取数据》

描述:在开发小程序过程中,发现一些不错的案例,平时使用也比较多,稍微总结了下经验,以下内容可以直接复制使用,希望对大家有所帮助,废话不多说直接上干货! 一、实现request接口获取数…

如何解决微服务下引起的 分布式事务问题

一、什么是分布式事务? 虽然叫分布式事务,但不是一定是分布式部署的服务之间才会产生分布式事务。不是在同一个服务或同一个数据库架构下,产生的事务,也就是分布式事务。 跨数据源的分布式事务 跨服务的分布式事务 二、解决方…

【适合初学者】这可能是全网最简单的Bert代码学习

最简单的Bert代码学习 教程数据集说明建立词表任务一:随机mask并预测重建举例说明构建输入构建目标segment_label 随机mask的具体实现 任务二:预测两个子句是否来自同一个句子举例说明构建输入构建目标 随机选择子句的实现方式 BERT模型输入生成mask三种…

配置服务器

参考博客 1. https://blog.csdn.net/qq_31278903/article/details/83146031 2. https://blog.csdn.net/u014374826/article/details/134093409 3. https://blog.csdn.net/weixin_42728126/article/details/88887350 4. https://blog.csdn.net/Dreamhai/article/details/109…

JS设计模式(一)单例模式

注释很详细,直接上代码 本文建立在已有JS面向对象基础的前提下,若无,请移步以下博客先行了解 JS面向对象(一)类与对象写法 特点和用途: 全局访问点:通过单例模式可以在整个应用程序中访问同一个…

了解 JSON Web 令牌 (JWT)

一. 介绍 在现代 Web 开发领域,确保客户端和服务器之间的通信安全至关重要。JSON Web Tokens (JWT) 已成为确保安全高效数据交换的流行解决方案。本文将深入探讨 JWT 是什么、它们的工作原理以及它们为何对于 Web 应用程序中的安全身份验证和授权至关重要。 二. 什…

AWS全服务历史年表:发布日期、GA和服务概述一览(二)

我一直在尝试从各种角度撰写关于Amazon Web Services(AWS)的信息和魅力。由于我喜欢技术历史,这次我总结了AWS服务发布的历史年表。 虽然AWS官方也通过“Whats New”发布了官方公告,但我一直希望能有一篇文章将公告日期、GA日期&…

javac详解 idea maven内部编译原理 自制编译器

起因 不知道大家在开发中,有没有过下面这些疑问。有的话,今天就一次解答清楚。 如何使用javac命令编译一个项目?java或者javac的一些参数到底有什么用?idea或者maven是如何编译java项目的?(你可能猜测底层…

【一刷《剑指Offer》】面试题 47:不用加减乘除做加法

力扣对应题目链接:LCR 190. 加密运算 - 力扣(LeetCode) 牛客对应题目链接:不用加减乘除做加法_牛客题霸_牛客网 (nowcoder.com) 一、《剑指Offer》对应内容 二、分析题目 sumdataA⊕dataB 非进位和:异或运…

Unity UGUI 之 Graphic Raycaster

本文仅作学习笔记与交流,不作任何商业用途 本文包括但不限于unity官方手册,唐老狮,麦扣教程知识,引用会标记,如有不足还请斧正 首先手册连接如下: Unity - Manual: Graphic Raycaster 笔记来源于&#xff…

mqtt协议有哪些机制

MQTT协议提供了一些关键机制来确保消息传递的可靠性、效率和灵活性。这些机制使得MQTT非常适用于物联网(IoT)和其他需要高效、低带宽通信的应用。以下是MQTT协议的主要机制: 1. 发布/订阅(Pub/Sub)模型 发布/订阅模型…

无人车技术浪潮真的挡不住了~

正文 无人驾驶汽车其实也不算是新鲜玩意了,早在十年前大家都开始纷纷投入研发,在那时就已经蠢蠢欲动,像目前大部分智驾系统和辅助驾驶系统都是无人驾驶系统的一个中间过度版本,就像手机进入智能机时代的中间版本。 然而前段时间突…

SpringBoot 介绍和使用(详细)

使用SpringBoot之前,我们需要了解Maven,并配置国内源(为什么要配置这些,下面会详细介绍),下面我们将创建一个SpringBoot项目"输出Hello World"介绍. 1.环境准备 ⾃检Idea版本: 社区版: 2021.1 -2022.1.4 专业版: ⽆要求 如果个⼈电脑安装的idea不在这个范围, 需要…

LeetCode 热题 HOT 100 (001/100)【宇宙最简单版】

【链表】 No. 0160 相交链表 【简单】👉力扣对应题目指路 希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#x…

搜维尔科技:【产品推荐】Euleria Health Riablo 运动功能训练与评估系统

Euleria Health Riablo 运动功能训练与评估系统 Riablo提供一种创新的康复解决方案,将康复和训练变得可激励、可衡量和可控制。Riablo通过激活本体感觉,并通过视听反馈促进神经肌肉的训练。 得益于其技术先进和易用性,Riablo是骨科、运动医…

centos软件安装

安装方式 一、二进制安装 --解压即用,只针对特殊平台 --jdk tomcat 二、RPM:按照一定规范安装软件,无法安装依赖的文件 --mysql 三、yum:远程安装基于RPM,把依赖的文件安装上去,需要联网 四、源码安装 jdk安…

jmeter部署

一、windows环境下部署 1、安装jdk并配置jdk的环境变量 (1) 安装jdk jdk下载完成后双击安装包:无限点击"下一步"直到完成,默认路径即可。 (2) jdk安装完成后配置jdk的环境变量 找到环境变量中的系统变量:此电脑 --> 右键属性 …