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
相关推荐: