Android系统启过程分析.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Android系统启过程分析

Android系统启过程分析 Android系统架构框图: 2.启动流程图: Android内部启动图: 具体分析: 一 Init进程的启动   init进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行, 并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。init始终是第一个进程。   启动过程就是代码init.c中main函数执行过程:system\core\init\init.c 在函数中执行了:文件夹建立,挂载,rc文件解析,属性设置,启动服务,执行动作,socket监听…… 下面看两个重要的过程:rc文件解析和服务启动。 1 rc文件解析   .rc文件是Android使用的初始化脚本文件 (System/Core/Init/readme.txt中有描述: four broad classes of statements which are?Actions,?Commands,?Services, and?Options.)   其中Command 就是系统支持的一系列命令,如:export,hostname,mkdir,mount,等等,其中一部分是 linux 命令, 还有一些是 android 添加的,如:class_start serviceclass: 启动服务,class_stop serviceclass:关闭服务,等等。   其中Options是针对 Service 的选项的。 系统初始化要触发的动作和要启动的服务及其各自属性都在rc脚本文件中定义。 具体看一下启动脚本:\system\core\rootdir\init.rc ?????? 在解析rc脚本文件时,将相应的类型放入各自的List中:   \system\core\init\Init_parser.c? :init_parse_config_file( )存入到   action_queue、?? action_list、 service_list中,解析过程可以看一下parse_config函数,类似状态机形式挺有意思。   这其中包含了服务:adbd、servicemanager、vold、ril-daemon、debuggerd、surfaceflinger、zygote、media…… 2 服务启动 ?????? 文件解析完成之后将service放入到service_list中。 ? 文件解析完成之后将service放入到service_list中。 ?  \system\core\init\builtins.c ???????Service的启动是在do_class_start函数中完成: int do_class_start(int nargs, char **args) { service_for_each_class(args[1], service_start_if_not_disabled); return 0; } ? 遍历所有名称为classname,状态不为SVC_DISABLED的Service启动 ? void service_for_each_class(const char *classname, void (*func)(struct service *svc)) { …… } static void service_start_if_not_disabled(struct service *svc) { if (!(svc-flags SVC_DISABLED)) { service_start(svc, NULL); } } ? ? do_class_start对应的命令: ?   KEYWORD(class_start, COMMAND, 1, do_class_start) ? init.rc文件中有哪些信誉好的足球投注网站class_start:class_start main 、class_start core、…… ?   main、core即为do_class_start参数classname ? init.rc文件中Service class名称都是main: ? ?????? service drm /system/bin/drmserver ?     class?main ?   service surfaceflinger /system/bin/surfaceflinger ? ???    class?main ? 于是就能够通过main名称遍历到所有的Service,将其启动。 do_class_

文档评论(0)

juhui05 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档