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配置项三、 数据打包四、 部署云服务器五、开放端口号六 、 验证程序 部署项目到云服务器 什么是部署 ⼯作中涉及到的"环境" 开发环境:开发⼈员写代码⽤的机器.测试环境:测试⼈员测试程序使⽤…...
IDEA的断点调试(Debug)
《IDEA破解、配置、使用技巧与实战教程》系列文章目录 第一章 IDEA破解与HelloWorld的实战编写 第二章 IDEA的详细设置 第三章 IDEA的工程与模块管理 第四章 IDEA的常见代码模板的使用 第五章 IDEA中常用的快捷键 第六章 IDEA的断点调试(Debug) 第七章 …...
部署django
部署Django项目到Apache HTTP服务器上,通常会使用mod_wsgi模块,这是Apache的一个扩展,专为Python web应用设计,可以很好地与Django集成。以下是部署Django项目的简要步骤: 准备工作 确保环境准备就绪: 确保你的系统中已安装了Python、Django以及Apache HTTP Server。安装…...
Android Framework学习笔记(4)----Zygote进程
Zygote的启动流程 Init进程启动后,会加载并执行init.rc文件。该.rc文件中,就包含启动Zygote进程的Action。详见“RC文件解析”章节。 根据Zygote对应的RC文件,可知Zygote进程是由/system/bin/app_process程序来创建的。 app_process大致处…...
澎湃算力 玩转AI 华为昇腾AI开发板——香橙派OriengePi AiPro边缘计算案例评测
澎湃算力 玩转AI 华为昇腾AI开发板 香橙派OriengePi AiPro 边缘计算案例评测 人工智能(AI)技术正以前所未有的速度改变着我们的生活、工作乃至整个社会的面貌。作为推动这一变革的关键力量,边缘计算与AI技术的深度融合正成为行业发展的新趋势…...
<数据集>铁轨缺陷检测数据集<目标检测>
数据集格式:VOCYOLO格式 图片数量:844张 标注数量(xml文件个数):844 标注数量(txt文件个数):844 标注类别数:3 标注类别名称:[Spalling, Squat, Wheel Burn] 序号类别名称图片数框数1Spalling3315522…...
第2章 矩阵
A 乘以此列向量,1的位置依次往下,所以A的列向量全为0 B C、D 取BE 要统一...
抖音seo短视频矩阵源码系统开发搭建----开源+二次开发
抖音seo短视频矩阵源码系统开发搭建 是一项技术密集型工作,需要对大数据处理、人工智能等领域有深入了解。该系统开发过程中需要用到多种编程语言,如Java、Python等。同时,需要使用一些框架和技术,如Hadoop、Spark、PyTorch等&am…...
【ELK】简述
ELK 堆栈的作用 大规模日志管理与分析 随着系统规模的扩大,应用程序、服务器和网络设备会产生大量的日志数据。ELK 堆栈可以集中收集、存储和索引这些分散在不同服务器和系统中的日志,方便快速检索和分析,帮助您快速定位系统故障、异常事件和…...
PyTorch张量数值计算
文章目录 1、张量基本运算2、阿达玛积3、点积运算4、指定运算设备⭐5、解决在GPU运行PyTorch的问题 🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法&am…...
Dockerfile相关命令
Dockerfile Dockerfile 是一个用来构建Docker镜像的文本文件,包含了一系列构建镜像所需的指令和参数。 指令详解 Dockerfile 指令说明FROM指定基础镜像,用于后续的指令构建,必须为第一个命令MAINTAINER指定Dockerfile的作者/维护者。&…...
猎聘做简历的网站收费靠谱吗/什么网站百度收录快
爬虫训练场基础铺垫目录 Bootstrap 5 加载器Bootstrap 5 分页组件Bootstrap 5 列表组Bootstrap 5 卡片Bootstrap 5 下拉列表本篇博客为大家继续补充,爬虫训练场这一项目需要的 Bootstrap 基础知识,其内容设计加载器,分页,列表组,卡片,下拉菜单。 Bootstrap 5 加载器 Boo…...
wordpress建站模板/宁波专业seo服务
在.NET环境中,非托管系统资源由开发人员来负责释放,且非托管系统资源必须显式的使用IDisposable接口的Dispose()来释放(详见:了解.NET内存管理机制)。所有封装或使用了非托管资源的类型都实现了IDisposable接口。同时这些类也在终结器中调用D…...
南阳网站排名价格/最近的电脑培训学校
1. Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展。2. Apache和Tomcat都可以做为独立的web服务器来运行,但是Apache不能解释java程序(jsp,serverlet&#…...
wordpress登录密码错误也不报错/百度推广竞价是什么意思
2019年高考结束最后一门英语考试的时候,王恒杰这个懂得感恩的大男孩被我们记住了。在高考英语结束后,所有人都放下了心中的担心,轻轻松松的走出了考场。此刻王恒杰也是万千学子中的一名,但是,他之后的举动却让他在众多…...
江阴网站建设哪家好/网络营销品牌有哪些
开头 在一般的互联网公司的技术人员的面试中,大概会经历3到4轮的面试,差不多2-3轮的技术面,还有1轮的HR面试,有人面试题是有关“目标”,有的关于“方法”,有的关于“算法”,有的关于“基础”。…...
百度不收录网站/seo专业培训费用
为什么80%的码农都做不了架构师?>>> Question 345. Reverse Vowels of a String Solution 思路:交换元音,第一次遍历,先把出现元音的索引位置记录下来,第二遍遍历元音的索引并替换。 Java实现:…...