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

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

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

android系统启动流程

注意:

1) 解析rc文件中所有的action,token,ketwork,section,service等:

一直跟踪parse_new_section,会发现最后数据存在servicelist,actionlist等链表中去了,后续执行这些解析出来的数据的时候,正是从servicelist,actionlist中取出来,加入到执行队列queue中.。至于rc文件到底是怎么解析的,其中有什么关键内容,先放到后面。

2) 嵌套调用init_parse_config_file:

继续解析完init.rc用import导入的所有其他rc. 看看init.rc的开头是如何导入其他文件的:

其中的import /init.${ro.hardware}.rc,显然需要知道ro. hardware到底是什么值。 前面分析init.c的main函数的时候,我们注意到下面2个函数:

9 / 52

android系统启动流程

3)进入\\system\\core\\init\%util.c的get_hardware_name: 该函数的源代码如下:

我们在终端cat /proc/cpuinfo获得如下信息

前面是4个CPU信息(4核处理器),最后明确看到Hardware的值是bigfish.

10 / 52

android系统启动流程

4)回到\\system\\core\\init\\init.c的 process_kernel_cmdline:

process_kernel_cmdline中调用了export_kernel_boot_props函数,这个函数设置了 ro. hardware这个属性的值:

ro.boot.hardware在 系统中没有设值,所以hardware这个字符串保持为bigfish,导致:

目录下,和init.rc同级.

5)接下来,解析得到的所有action就开始加入到执行队列:

所以import /init.${ro.hardware}.rc就是import /init. bigfish.rc,而这个文件在终端的根

并在\\system\\core\\init\\init.c的main的for循环中得以执行。

11 / 52

android系统启动流程

3.4核心任务三:执行command,监控service重启h和socket请求

\\system\\core\\init\\init.c的main:

poll这个api其实就是检测传入的socket的可读,可写,异常等状态;返回POLLIN表示该socket可读,此时就分别调调三种类型任务对应的handle接口进行任务处理。

这三个socket分别是在各自的模块初始化函数(init)中创建的:

3.5疑问:传说中的zygote进程启动在 哪里?

通过上面对\\system\\core\\rootdir\\init.c下面main函数及其执行的相关核心任务的解析,init进程到底干了些什么事,已经基本清楚了,但是我们似乎没发现传说中的zygote进程在哪里启动?

main函数的任务中,唯一确实看到他到底是内容,到底在做什么的就是init.rc的内容,整理我们还没有详细分析过,而zygote和servicemanager等的启动其实就藏在里面,我们这里只关注zygote。

12 / 52

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