第五章 Android系统启过程分析.docVIP

  • 4
  • 0
  • 约1.47万字
  • 约 16页
  • 2017-06-22 发布于湖北
  • 举报
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)

1亿VIP精品文档

相关文档