- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
安卓启动过程
Android系统启动过程首先Android框架架构图:(来自网上,我觉得这张图看起来很清晰)?Linux内核启动之后就到Android Init进程,进而启动Android相关的服务和应用。启动的过程如下图所示:(图片来自网上,后面有地址)下面将从Android4.0源码中,和网络达人对此的总结中,对此过程加以学习了解和总结,以下学习过程中代码片段中均有省略不完整,请参照源码。一 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中。system/core/init/init.c中:
[Java]?纯文本查看?复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
int main(){
……
???????for(;;){
?
??????????????execute_one_command();
?
??????????????restart_processes();
?
??????????????for (i = 0; i fd_count; i++) {
?
????????????if (ufds.revents == POLLIN) {
?
????????????????if (ufds.fd == get_property_set_fd())
?
????????????????????handle_property_set_fd();
?
????????????????else if (ufds.fd == get_keychord_fd())
?
????????????????????handle_keychord();
?
????????????????else if (ufds.fd == get_signal_fd())
?
????????????????????handle_signal();
????????????}
????????}
?
???????}
}
循环调用service_start,将状态SVC_RESTARTING启动, 将启动后的service状态设置为SVC_RUNNING。pid=fork();execve();在消息循环中:Init进程执行了Android的Command,启动了Android的NativeService,监听Service的变化需
您可能关注的文档
最近下载
- 2025年部编版四年级下册语文第三单元综合检测试卷及答案A卷.pptx VIP
- 电伴热带说明书.docx
- 统编版(2024)小学道德与法治一年级下册《我们爱分享》教学设计.docx VIP
- 北师大版七年级下 乘法公式在解题中的应用.doc VIP
- PEP人教版英语五年级下册 Unit 2 My favourite season 大单元作业设计 (2).docx
- 江苏省各地市2023年中考化学试题【7套】(附真题答案).docx VIP
- 《Zemax光学设计软》课件.ppt VIP
- 氢氧化钠安全 技术说明书.doc VIP
- 2025年部编版四年级下册语文第六单元综合检测试卷及答案A卷.pptx VIP
- 高等教育学考试试题(附答案).pdf VIP
文档评论(0)