Android Framework学习四:init进程实现
文章目录
- init流程简介
- init源码执行顺序
- 执行顺序
- init进程的具体工作事项
- 挂载文件系统
- 设置 SELinux
- SecondStageMain
- init.rc启动zygote和serviceManager进程的重要性
- serviceManager工作原理
- Framework学习之系列文章
init流程简介
下面图片主要围绕 Android 系统中init进程的运行机制展开介绍
init源码执行顺序
init进程是 Android 系统启动时第一个用户空间进程,它从执行main.cpp文件里的main函数开始运行。main函数以循环调用的方式来维持进程的持续运行,确保后续的系统初始化操作能够逐步完成。
执行顺序
- FirstStageMain
- SetupSelinux
- SecondStageMain
init进程的具体工作事项
挂载文件系统
将系统所需的各种文件系统挂载到合适的挂载点,这样系统才能访问和使用这些文件系统中的数据和资源。
FirstStageMain:
设置 SELinux
SELinux(Security-Enhanced Linux)是一种基于 Linux 内核的强制访问控制(MAC)系统,init进程负责对其进行配置和初始化,以增强系统的安全性。
SetupSelinux:
SecondStageMain
下面的功能都是由SecondStageMain函数实现的。
- 启动属性服务:属性服务是 Android 系统中用于存储和管理系统属性的服务,init进程启动该服务后,系统的各个组件就可以通过属性服务来获取和设置系统属性,PropertyInit()。
- 解析和执行脚本:除了前面提到的解析init.rc文件,init进程还会执行其他相关的脚本文件,以完成更多的系统初始化和配置工作。
解析init.rc是由LoadBootScripts函数实现:
- 循环处理脚本:通过while循环不断处理脚本中的命令和任务,确保系统的初始化和配置工作能够持续进行。
- 守护关键进程:init进程会对系统中的关键进程进行监控和守护,当这些进程出现异常退出时,init进程会尝试重新启动它们,以保证系统的稳定性。
init.rc启动zygote和serviceManager进程的重要性
-
zygote进程:如前面所述,它是所有应用进程的父进程。通过zygote进程,系统可以快速创建新的应用进程,提高应用启动的效率。
-
serviceManager进程:是 Android 系统里核心的系统服务注册与发现机制 ,处于 Android Framework 层,充当服务注册中心。它为进程间通信(IPC)提供基础架构,允许进程注册、查询和使用系统服务。
init.rc中启动servicemanager的内容:
serviceManager工作原理
- 服务注册:应用或系统组件可将 Binder 对象作为服务注册到 ServiceManager。比如系统服务 ActivityManagerService,通过 addService () 方法向 ServiceManager 注册自身服务。
- 服务发现:客户端凭借 ServiceManager 查询所需服务的 Binder 接口。若服务存在,ServiceManager 返回对应 Binder 引用;若不存在,客户端可选择等待服务注册。
- IPC 中转:为 Android 的 Binder IPC 提供全局目录,用于绑定客户端和服务端。客户端获取 Binder 引用后,可直接与服务端通信,无需再经 ServiceManager 。
Framework学习之系列文章
Android Framework学习一:系统框架、启动过程
Android Framework学习二:Activity创建及View绘制流程
Android Framework学习三:zygote剖析
Android Framework学习四:init进程实现
作者:帅得不敢出门