Android系统启过程分析

Android系统启过程分析

ID:37708827

大小:448.00 KB

页数:16页

时间:2019-05-29

Android系统启过程分析_第1页
Android系统启过程分析_第2页
Android系统启过程分析_第3页
Android系统启过程分析_第4页
Android系统启过程分析_第5页
资源描述:

《Android系统启过程分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Android系统启过程分析1.Android系统架构框图:2.启动流程图:1.Android内部启动图:具体分析:一Init进程的启动  init进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。init始终是第一个进程。  启动过程就是代码init.c中main函数执行过程:systemcoreinitinit.c在函数中执行了:文件夹建立,挂载,rc文件解析

2、,属性设置,启动服务,执行动作,socket监听……下面看两个重要的过程:rc文件解析和服务启动。1rc文件解析  .rc文件是Android使用的初始化脚本文件(System/Core/Init/readme.txt中有描述:fourbroadclassesofstatementswhichare Actions, Commands, Services,and Options.)  其中Command就是系统支持的一系列命令,如:export,hostname,mkdir,mount,等等,其中

3、一部分是linux命令,还有一些是android添加的,如:class_start:启动服务,class_stop:关闭服务,等等。  其中Options是针对Service的选项的。系统初始化要触发的动作和要启动的服务及其各自属性都在rc脚本文件中定义。具体看一下启动脚本:systemcorerootdirinit.rc      在解析rc脚本文件时,将相应的类型放入各自的List中:  systemcoreinitIni

4、t_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中。 文件

5、解析完成之后将service放入到service_list中。   systemcoreinitbuiltins.c       Service的启动是在do_class_start函数中完成:intdo_class_start(intnargs,char**args){service_for_each_class(args[1],service_start_if_not_disabled);return0;} 遍历所有名称为classname,状态不为SVC_DISABLED的Servi

6、ce启动 voidservice_for_each_class(constchar*classname,void(*func)(structservice*svc)){……}staticvoidservice_start_if_not_disabled(structservice*svc){if(!(svc->flags&SVC_DISABLED)){service_start(svc,NULL);}}  do_class_start对应的命令:   KEYWORD(class_start,COM

7、MAND,1,do_class_start) init.rc文件中搜索class_start:class_startmain、class_startcore、……   main、core即为do_class_start参数classname init.rc文件中Serviceclass名称都是main:       servicedrm/system/bin/drmserver     class main   servicesurfaceflinger/system/bin/surfacefli

8、nger       class main 于是就能够通过main名称遍历到所有的Service,将其启动。do_class_start调用:      init.rc中    onboot  //action      class_startcore    //执行command对应 do_class_start        class_startmain Init进程main函数中: system/core/init/init.c中:intmain(){     //挂在文件

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。