第一范文网 - 专业文章范例文档资料分享平台

android系统从init进程开始到systemserver启动详细流程

来源:用户分享 时间:2025/5/23 6:27:21 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

android系统启动流程

android系统启动流程

——从init进程开始到systemserver

目录

android系统启动流程 .............................................................................................................. 1 ——从init进程开始到systemserver ................................................................................... 1 1.概述: .................................................................................................................................................... 3 2 系统启动基本原理 ........................................................................................................................... 4 3 Init进程解析 ................................................................................................................................... 5

3.1/system/core/init/init.c分析 ............................................................................................ 5 3.2 核心任务一:各种初始化 ...................................................................................................... 7 3.3核心任务二: 解析和执行init.rc文件 ............................................................................... 7 3.4核心任务三:执行command,监控service重启h和socket请求........................ 12 3.5疑问:传说中的zygote进程启动在 哪里? ............................................................... 12 4 认识和解析init.rc的内容 ............................................................................................................ 13

4.1认识AIL语言写成的init.rc .............................................................................................. 13

4.1.1 行(line)的概念 ........................................................................................................ 13 4.1.2 段(section)的概念 ................................................................................................. 13 4.1.3 动作(action)和服务(service)的概念 .................................................................. 14

4.1.3.1目前init.rc内已经写入的主要的action和service ............................ 14 4.1.3.2 Actions和command的语法格式: ..................................................... 15 4.1.3.3服务(services)和选项(option)语法......................................................... 17

4.2解析init.rc过程 .................................................................................................................. 19

4.2.1init_parse_config_file和parse_config ............................................................ 19 4.2.2 next_token .............................................................................................................. 21 4.2.3 lookup_keyword、kw_is和keywords.h ....................................................... 25 4.2.4 parse_new_section............................................................................................... 30

5 zygote的启动 ............................................................................................................................. 33

5.1 zygote在init.rc中的启动流程: .................................................................................. 33

5.1.1 zygote在init.rc中配置为class main .............................................................. 33 5.1.2 on boot这个action会执行class_start main ............................................... 33 5.1.3 class_start main对应执行函数do_class_start: ...................................... 33 5.2 do_class_start真正启动zygote .................................................................................... 35

1 / 52

android系统启动流程

5.2.1 do_class_start分析:........................................................................................... 35 5.2.2 service_for_each_class分析 .............................................................................. 35 5.2.3 service_start_if_not_disabled分析: ................................................................. 36 5.2.4 service_start分析: ................................................................................................ 36

6 zygote进程分析 ............................................................................................................................ 40

6.1 分析app_process改名为zygote及其main函数 流程 ........................................ 40 6.2 AndroidRuntime启动dalvik虚拟机和ZygoteInit类 ............................................ 42 6.3 分析ZygoteInit 类: .......................................................................................................... 43

6.3.1 注册socket --registerZygoteSocket分析 .................................................. 44 6.3.2 加载资源-preload ................................................................................................. 45 6.3.3启动systemserver ................................................................................................ 46 6.3.4启动消息循环:runSelectLoop .......................................................................... 48 6.3.5 zygote最终进化为所有app进程的父进程 ..................................................... 49

7 总结: ................................................................................................................................................. 51

2 / 52

android系统启动流程

1.概述:

Linux内核启动之后,执行第一个进程 Init,并最终到达systemserver,

systemserver再往上启动framework层相关服务和进程,启动launcher,完

成整个开机流程。

init进程之前和systemserver启动之后的动作,本文不做分析,专著分析从init到systemserver之间的流程。

本文的核心:

init进程工作内容分 init.rc内容和执行分析 zygote启动和内容分析 systemserver启动和内容简析

android系统启动流程图:

3 / 52

android系统启动流程

2 系统启动基本原理

关键词:内核空间和用户空间

(关于内核空间和应用空间的详细描述(可以参考《Android深度探索(卷1):HAL与驱动开发》)

1)内核空间

Android本质上就是一个基于Linux内核的操作系统+庞杂的上层应用。一个完整的Linux系统首先会将一个Linux内核装载到内存,也就是编译Linux内核源代码生成的bzImage文件,对于为Android优化的Linux内核源代码会生成zImage文件。该文件就是Linux内核的二进制版本,zImage在内核空间运行。内核空间简而言之就是内核kernel的非用户user能控制的运行空间。 2)应用空间

而我们平常使用的软件都是在应用空间运行,这部分空间,用户可以自己分配进程所需内存和其他资源。 3)两个空间需要通讯

内核空间和应用空间是不能直接通过内存地址级别访问的,所以就需要建立某种通讯机制。

目前Linux有很多通讯机制可以在用户空间和内核空间之间交互,例如设备驱动文件(位于/dev目录中)、内存文件(/proc、/sys目录等)。了解Linux的同学都应该知道Linux的重要特征之一就是一切都是以文件的形式存在的,例如,一个设备通常与一个或多个设备文件对应。这些与内核空间交互的文件都在用户空间。

注意:/dev,/proc,/sys这些设备文件路径,在系统编译完的img文件中是不存在的,所以原生的系统是没有他们的。

在Linux内核装载完,需要首先建立这些设备文件所在的目录,而完成这些工作的程序就是本文要介绍的内容之一:init进程。

init进程,它是一个由内核启动的用户级进程。内核自行启动之后,就通过启动一个用户级程序init的方式,完成引导进程。init始终是第一个进程,执行了:文件夹建立,挂载,rc文件解析,属性设置,启动服务,socket监听,启动zygote进程和servicemanager进程等。

4)zygote是所有java进程的父进程:

zygote进程被init启动起来,再往上启动systemserver,并随时等待其他java进程请求,负责java进程的真正的创建和入口函数的执行。

所以我们很有必要搞清楚,zygote到底是怎么启动的以及他自身的工作原理。

4 / 52

搜索更多关于: android系统从init进程开始到systemserve 的文档
android系统从init进程开始到systemserver启动详细流程.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c10vq02ec2q0088s3wpt6_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top