### Android系统启动流程源码分析 #### 一、Init 进程启动 **Init 进程**是一个由内核启动的用户级进程。当内核完成自身加载后,接下来的任务便是启动用户空间的第一个进程——`init`。此进程在Android系统中扮演着极其重要的角色,不仅因为它承担了启动系统的重任,还因为它是所有其他用户空间进程的祖先。 - **启动代码**位于 `system\core\init.c` 中的 `main` 函数。`init` 进程的启动过程可以分为以下几个关键步骤: 1. **RC 文件解析**:`init` 会读取 `/init.rc` 文件,并解析其中定义的服务和动作。 2. **命令和服务执行**:解析完成后,`init` 进程会进入一个无限循环,该循环不断执行 `execute_one_command` 和 `restart_processes` 函数。这两个函数负责根据 `/init.rc` 中的配置启动并维护服务。 - **启动服务示例**:以 `zygote` 进程为例,在 `/init.rc` 文件中有相应的描述,其中 `svc->args[0]` 的值即为 `zygote`。通过调用 `execve()` 来执行 `zygote` 进程,该函数用于在当前进程中执行一个新的程序。其参数分别为: - 文件名:通常为 `/system/bin/app_process`。 - 参数数组:包含 `--zygote` 和 `--start-system-server` 等选项。 - 环境变量数组:通常为空或包含必要的环境变量。 - **Action 启动流程**:除了服务外,`/init.rc` 文件还可以定义动作(Actions)。当特定条件满足时(例如设备状态变化),这些动作会被触发。在 `init.c` 中的 `main` 函数中有一段代码专门处理这些动作队列。例如,`early-init` 动作触发时,会调用 `do_start` 函数,进而启动 `init` 进程。 #### 二、启动 serviceManager - **Service Manager** 是负责管理 Android 系统中所有 Binder 服务的进程。无论是本地 C++ 实现的服务还是 Java 语言实现的服务,都需要通过 `serviceManager` 进行统一管理。 - **源码位置**:根据 `/system/bin/servicemanager` 的路径,可以定位到源码所在位置:`frameworks\base\cmds\servicemanager\service_manager.c`。 - **主要功能**: - 注册服务:通过 `do_add_service()` 函数注册新服务。 - 查找服务:通过 `do_find_service()` 函数查找已注册的服务。 - 事件处理:通过 `svcmgr_handler()` 函数处理来自客户端的请求。 #### 三、Zygote 进程启动 **Zygote** 进程是 Android 系统中一个非常重要的进程,它是所有应用程序进程的父进程。Zygote 的作用在于减少应用程序的启动时间,并提高内存的使用效率。当应用程序被启动时,实际上是通过 Zygote 进程复制一个实例来运行该应用,而不是重新创建一个全新的进程。 - **启动过程**: 1. 根据 `/init.rc` 文件中的配置,`init` 进程会启动 Zygote。 2. Zygote 的启动通过调用 `app_process` 并传递 `--zygote` 和 `--start-system-server` 参数来实现。 3. 进入 `AndroidRuntime` 类的 `startReg` 方法,该方法会初始化虚拟机,并最终调用 `ZygoteInit` 类的静态 `main` 方法。 4. 在 `ZygoteInit` 中,通过监听一个特定的 Socket,等待来自 `system_server` 的请求。当收到请求时,Zygote 会复制自身,并将控制权交给新的应用程序进程。 从 `init` 进程的启动到 `serviceManager` 的初始化,再到 Zygote 进程的建立,整个 Android 系统的启动流程涉及多个层次和组件的交互与协作。通过对这些关键进程及其内部机制的理解,可以帮助开发者更深入地掌握 Android 系统的工作原理。





























- 粉丝: 7433
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 中海南联石化(D30环保优质溶剂油)Excel2003应用技术02.doc
- 人工智能与现代船舶管理.docx
- 实用可编程序控制器的典型电气控制.doc
- 信用管理在新型智慧城市建设中的价值分析.docx
- 大数据在教育领域的运用.docx
- 基于物联网的图书与档案智能化管理分析.docx
- 手机移动互联网犯罪问题研究.docx
- 智慧城市运行管理平台建设方案.docx
- matlab的数值逼近仿真设计方案与实现.doc
- 公众信息服务网络系统建设与维护方案建议书.doc
- 智慧政务云计算中心-灾备系统规划.docx
- 软件开发周期估算及探讨-Read.doc
- 在高职计算机软件应用教育中开展信息化探究.docx
- 单片机的低频信号发生器研究与设计开发.doc
- 基于51单片机火灾报警系统方案设计书.doc
- 实现目标检测和对象计数


