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-init
、init
、late-init
、early-sf
、fs
、post-fs-data
、early-boot
、boot
和 service
等不同阶段(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
阶段完成之后进行的,通常用于应用层服务的启动。
功能:
-
启动应用框架服务:如
ActivityManager
和PackageManager
。 -
执行系统初始化后的配置任务。
配置示例:
# late-init 阶段的任务
on late-init {# 启动 Activity Manager 服务start activity# 启动 Package Manager 服务start package
}
触发时机: 在 init
阶段完成后进行。
功能总结:
-
启动应用框架服务。
-
执行系统初始化后的任务。
1.4 early-sf
阶段
定义: early-sf
是 init
进程中的一个特殊阶段,专注于启动 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
难度:中等 题目: 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i j] 处: 0 < j < nums[…...

学习大数据DAY20 Linux环境配置与Linux基本指令
目录 Linux 介绍 Linux 发行版 Linux 和 Windows 比较 Linux 就业方向: 下载 CentOS Linux 目录树 Linux 目录结构 作业 1 常用命令分类 文件目录类 作业 2 vim 编辑文件 作业 3 你问我第 19 天去哪了?第 19 天在汇报第一阶段的知识总结,没什…...
达梦+flowable改造
原项目springbootflowablemysql模式现需改造springbootflowable达梦, 1.在项目中引入达梦jpa包 引入高版本包已兼容flowable(6.4.2)liquibase(3.6.2) 我没有像网上做覆盖及达梦配置 <dependency> …...
【乐吾乐2D可视化组态编辑器】消息
消息 乐吾乐2D可视化组态编辑器demo:https://2d.le5le.com/ 监听消息 const fn (event, data) > {}; meta2d.on(event, fn);// 监听全部消息 meta2d.on(*, fn);// 取消监听 meta2d.off(event, fn); meta2d.off(*, fn); Copy 系统消息 event(…...

Qt创建列表,通过外部按钮控制列表的选中下移、上移以及左侧图标的显现
引言 项目中需要使用列表QListWidget,但是不能直接拿来使用。需要创建一个列表,通过向上和向下的按钮来向上或者向下移动选中列表项,当当前项背选中再去点击确认按钮,会在列表项的前面出现一个图标。 实现效果 本实例实现的效果如下: 实现思路 思路一 直接采用QLis…...
svn不能记住密码,反复弹出GNOME,自动重置svn.simple文件
1. 修改文件 打开 ~/.subversion/auth/svn.simple/xxx 更新前 K 15 svn:realmstring V 32 xxxxx //svn 地址,库的地址 K 8 username V 4 xxx //用户名 END在顶部插入下面内容, 注意,如果密码不对,则文件文法正常生效 更新后…...

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

03 Git的基本使用
第3章:Git的基本使用 一、创建版本仓库 一)TortoiseGit 选择项目地址,右键,创建版本库 初始化git init版本库 查看是否生成.git文件(隐藏文件) 二)Git 选择项目地址,…...

【Linux】将IDEA项目部署到云服务器上,让其成为后台进程(保姆级教学,满满的干货~~)
目录 部署项目到云服务器什么是部署一、 创建MySQL数据库二、 修改idea配置项三、 数据打包四、 部署云服务器五、开放端口号六 、 验证程序 部署项目到云服务器 什么是部署 ⼯作中涉及到的"环境" 开发环境:开发⼈员写代码⽤的机器.测试环境:测试⼈员测试程序使⽤…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...

数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...