当前位置: 首页 > news >正文

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

相关文章:

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

Android开机优化系列文档-CSDN博客 Android 14 开机时间优化措施汇总-CSDN博客Android 14 开机时间优化措施-CSDN博客根据systrace报告优化系统时需要关注的指标和优化策略-CSDN博客Android系统上常见的性能优化工具-CSDN博客Android上如何使用perfetto分析systrace-CSDN博客A…...

.net dataexcel 脚本公式 函数源码

示例如: ScriptExec(""sum(1, 2, 3, 4)"") 结果等于10 using Feng.Excel.Builder; using Feng.Excel.Collections; using Feng.Excel.Interfaces; using Feng.Script.CBEexpress; using Feng.Script.Method; using System; using System.Collections.Gen…...

HarmonyOS ArkUi @CustomDialog 和promptAction.openCustomDialog踩坑以及如何选择

CustomDialog 内使用Link,如何正常使用 错误使用方式: 定义一个函数,在函数内使用弹窗,如下面代码showDialog: 这种使用方式,无法在自定义的CustomDialog内使用 Link,进行父子双向绑定&#x…...

Python面试题:详细讲解Python的多线程与多进程编程问题

在 Python 中,多线程和多进程编程是并发编程的两种主要方式,用于提高程序的执行效率和响应性。虽然它们都可以实现并发执行,但它们的工作原理和适用场景有所不同。以下是对 Python 多线程和多进程编程的详细讲解,包括它们的工作原…...

前端Canvas入门——用canvas写五子棋?

前言 五子棋的实现其实不难,因为本身就是一个很小的游戏。 至于画线什么的,其实很简单,都是lineTo(),moveTo()就行了。 难的在于——怎么让棋子落入到指定的格子上,怎么判断连子胜利。 当然啦,这部分是…...

[PaddlePaddle飞桨] PaddleDetection-通用目标检测-小模型部署

PaddleDetection的GitHub项目地址 推荐环境: PaddlePaddle > 2.3.2 OS 64位操作系统 Python 3(3.5.1/3.6/3.7/3.8/3.9/3.10),64位版本 pip/pip3(9.0.1),64位版本 CUDA > 10.2 cuDNN > 7.6pip下载指令: python -m pip i…...

Golang | Leetcode Golang题解之第239题滑动窗口最大值

题目: 题解: func maxSlidingWindow(nums []int, k int) []int {n : len(nums)prefixMax : make([]int, n)suffixMax : make([]int, n)for i, v : range nums {if i%k 0 {prefixMax[i] v} else {prefixMax[i] max(prefixMax[i-1], v)}}for i : n - 1…...

深度解析:在 React 中实现类似 Vue 的 KeepAlive 组件

在前端开发中,Vue 的 keep-alive 组件是一个非常强大的工具,它可以在组件切换时缓存组件的状态,避免重新渲染,从而提升性能。那么,如何在 React 中实现类似的功能呢?本文将带你深入探讨,并通过代…...

2024-7-20 IT新闻

目录 微软全球IT系统故障 中国量子计算产业峰会召开 其他IT相关动态 微软全球IT系统故障 后续处理: 微软和CrowdStrike均迅速响应,发布了相关声明并部署了修复程序。CrowdStrike撤销了有问题的软件更新,以帮助用户恢复系统正常运作。微软也…...

前端组件化开发:以Vue自定义底部操作栏组件为例

摘要 随着前端技术的不断演进,组件化开发逐渐成为提升前端开发效率和代码可维护性的关键手段。本文将通过介绍一款Vue自定义的底部操作栏组件,探讨前端组件化开发的重要性、实践过程及其带来的优势。 一、引言 随着Web应用的日益复杂,传统的…...

11.斑马纹列表 为没有文本的链接设置样式

斑马纹列表 创建一个背景色交替的条纹列表。 使用 :nth-child(odd) 或 :nth-child(even) 伪类选择器,根据元素在一组兄弟元素中的位置,对匹配的元素应用不同的 background-color。 💡 提示:你可以用它对其他 HTML 元素应用不同的样式,如 <div>、<tr>、<p&g…...

【算法】跳跃游戏II

难度&#xff1a;中等 题目&#xff1a; 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[…...

学习大数据DAY20 Linux环境配置与Linux基本指令

目录 Linux 介绍 Linux 发行版 Linux 和 Windows 比较 Linux 就业方向&#xff1a; 下载 CentOS Linux 目录树 Linux 目录结构 作业 1 常用命令分类 文件目录类 作业 2 vim 编辑文件 作业 3 你问我第 19 天去哪了&#xff1f;第 19 天在汇报第一阶段的知识总结&#xff0c;没什…...

达梦+flowable改造

原项目springbootflowablemysql模式现需改造springbootflowable达梦&#xff0c; 1.在项目中引入达梦jpa包 引入高版本包已兼容flowable&#xff08;6.4.2&#xff09;liquibase&#xff08;3.6.2&#xff09; 我没有像网上做覆盖及达梦配置 <dependency> …...

【乐吾乐2D可视化组态编辑器】消息

消息 乐吾乐2D可视化组态编辑器demo&#xff1a;https://2d.le5le.com/ 监听消息 const fn (event, data) > {}; meta2d.on(event, fn);// 监听全部消息 meta2d.on(*, fn);// 取消监听 meta2d.off(event, fn); meta2d.off(*, fn); Copy 系统消息 event&#xff08;…...

Qt创建列表,通过外部按钮控制列表的选中下移、上移以及左侧图标的显现

引言 项目中需要使用列表QListWidget,但是不能直接拿来使用。需要创建一个列表,通过向上和向下的按钮来向上或者向下移动选中列表项,当当前项背选中再去点击确认按钮,会在列表项的前面出现一个图标。 实现效果 本实例实现的效果如下: 实现思路 思路一 直接采用QLis…...

svn不能记住密码,反复弹出GNOME,自动重置svn.simple文件

1. 修改文件 打开 ~/.subversion/auth/svn.simple/xxx 更新前 K 15 svn:realmstring V 32 xxxxx //svn 地址&#xff0c;库的地址 K 8 username V 4 xxx //用户名 END在顶部插入下面内容&#xff0c; 注意&#xff0c;如果密码不对&#xff0c;则文件文法正常生效 更新后…...

对称加密与非对称加密

对称加密 对称加密指的是加密和解密使用同一个秘钥,所以叫对称加密。对称加密只有一个秘钥,称为私钥。 优点:算法公开、计算量小、加密速度快、效率高 缺点:数据传输前,发送方和接收方必须确定好秘钥,双方也必须要保存好秘钥。 常见对称加密算法: DES、3DES、AES、3…...

03 Git的基本使用

第3章&#xff1a;Git的基本使用 一、创建版本仓库 一&#xff09;TortoiseGit ​ 选择项目地址&#xff0c;右键&#xff0c;创建版本库 ​ 初始化git init版本库 ​ 查看是否生成.git文件&#xff08;隐藏文件&#xff09; 二&#xff09;Git ​ 选择项目地址&#xff0c…...

【Linux】将IDEA项目部署到云服务器上,让其成为后台进程(保姆级教学,满满的干货~~)

目录 部署项目到云服务器什么是部署一、 创建MySQL数据库二、 修改idea配置项三、 数据打包四、 部署云服务器五、开放端口号六 、 验证程序 部署项目到云服务器 什么是部署 ⼯作中涉及到的"环境" 开发环境:开发⼈员写代码⽤的机器.测试环境:测试⼈员测试程序使⽤…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...