玩转Android Framework:Init进程

本文将介绍有关Android Init进程相关的一些知识。

系统版本: Ubuntu 22.04 lts

AOSP分支: android-14.0.0_r28

什么是Init进程

当我们在adb shel中输入ps -A列出所有进程时,我们可以看到有一个名字为init,pid为1的进程,

再往下看,可以看到很多ppid为1的进程,这意味着这些进程都是从init进程中fork出来的,包括我们最熟悉的zygote进程:

可以说,init进程是我们整个Android世界的起始点,那么了解它的作用,就变得十分重要了。

谁启动了Init进程

在Android设备启动时,第一个步骤便是bootloader,这部分Android官网有相关的介绍:

source.android.com/docs/core/a...

之后,就会开始启动我们的Linux Kernel,当Linux Kernel启动完成,就会启动我们的Init进程了,关于这部分,可以在Android Linux Kernel源码中,查看/init/main.crest_init方法,这里即是Linux Kernel启动我们的Init进程的地方:

如果不知道如何查看Android Linux Kernel源码的,可以看这篇文章:

juejin.cn/post/734350...

Init进程做了什么

Init相关的代码主要集中在/system/core/init,入口方法是这个目录下的main.cppmain方法,打开之后,我们可以看到如下代码,这就是init进程的初始化逻辑的主干部分:

Init进程执行顺序

从上面的代码我们可以看到,我们的Init貌似有好几个步骤,根据参数的不同,要执行不同的逻辑,那么这些步骤都是干什么的?

其实我们可以打开/system/core/init/README.md,可以看到Google已经为我们做了大致的解释:

从这里我们可以知道,这个main方法会被传入不同的参数反复执行,执行的顺序大概是first stage, selinux stage和second stage。

解析RC文件并启动服务

first stage从文档中可以看到,工作和逻辑较为繁杂,对这部分有兴趣的可以查看/system/core/init/first_stage_init.cpp,这里不做过多赘述:

selinux stage,则是为Android加载selinux,关于Android对SELinux的支持,可以看这里:

source.android.com/docs/securi...

最后,就是second stage了,文档里面也提到了,在second stage,我们就会开始解析rc文件并根据rc文件启动一系列进程,打开/system/core/init/init.cpp,就可以看到我们的second stage的主要处理方法了:

在这个方法中查找,我们可以看到LoadBootScripts方法被调用,进入此方法,我们就可以看到,在这里,Android完成了对rc文件的读取以及解析工作:

最后,就是开始启动rc文件中的early-initinit了:

下面是/system/core/rootdir/init.rc文件中early-initinit两个trigger的定义:

如果不知道如何阅读rc文件,可以看这里:

juejin.cn/post/734166...

至此,可以说Android已经开始基于rc文件要启动起来了。

相关推荐
AC赳赳老秦39 分钟前
Dify工作流+DeepSeek:运维自动化闭环(数据采集→报告生成)
android·大数据·运维·数据库·人工智能·golang·deepseek
2501_9444241243 分钟前
Flutter for OpenHarmony游戏集合App实战之记忆翻牌配对消除
android·java·开发语言·javascript·windows·flutter·游戏
2501_944526421 小时前
Flutter for OpenHarmony 万能游戏库App实战 - 设置功能实现
android·javascript·flutter·游戏·harmonyos
冬奇Lab1 小时前
【Kotlin系列11】协程原理与实战(下):Flow与Channel驯服异步数据流
android·开发语言·kotlin
_昨日重现1 小时前
Jetpack系列之Compose Scaffold
android·android jetpack
2501_944424122 小时前
Flutter for OpenHarmony游戏集合App实战之数字拼图打乱排列
android·开发语言·flutter·游戏·harmonyos
文 丰2 小时前
【Android Studio】gradle下载慢解决方案(替换配置-非手工下载安装包)
android·ide·android studio
2501_944526422 小时前
Flutter for OpenHarmony 万能游戏库App实战 - 知识问答游戏实现
android·开发语言·javascript·python·flutter·游戏·harmonyos
路人与大师3 小时前
[深度架构] 拒绝 Prompt 爆炸:LLM Skills 的数学本质与“上下文压缩”工程论
android·架构·prompt
zhangphil3 小时前
Android系统如何把Bitmap通过RenderThread及GPU器件显示到屏幕
android