Android开机启动最详细注解Word格式文档下载.docx
- 文档编号:15878535
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:16
- 大小:97.93KB
Android开机启动最详细注解Word格式文档下载.docx
《Android开机启动最详细注解Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Android开机启动最详细注解Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
c)
开机按Power,正常启动系统,加载boot.img,boot.img包含内核,基本文件系统,用于正常启动手机(以下只分析正常启动的情况)
2.
内核kernel
kernel/*
kernel由bootloader加载
3.
文件系统及应用init
system/core/init/*
配置文件:
system/rootdir/init.rc,
3)
init是一个由内核启动的用户级进程,它按照init.rc中的设置执行:
启动服务(这里的服务指linux底层服务,如adbd提供adb支持,vold提供SD卡挂载等),执行命令和按其中的配置语句执行相应功能
4.
重要的后台程序zygote
frameworks/base/cmds/app_main.cpp等
zygote是一个在init.rc中被指定启动的服务,该服务对应的命令是/system/bin/app_process
建立JavaRuntime,建立虚拟机
建立Socket接收ActivityManangerService的请求,用于Fork应用程序
启动SystemServer
5.
系统服务systemserver
frameworks/base/services/java/com/android/server/SystemServer.java
被zygote启动,通过SystemManager管理android的服务(这里的服务指frameworks/base/services下的服务,如卫星定位服务,剪切板服务等)
6.
桌面launcher
ActivityManagerService.java为入口,packages/apps/launcher*实现
系统启动成功后SystemServer使用xxx.systemReady()通知各个服务,系统已经就绪,桌面程序Home就是在ActivityManagerService.systemReady()通知的过程中建立的,最终调用()启launcher
7.
解锁
frameworks/policies/base/phone/com/android/internal/policy/impl/*lock*
系统启动成功后SystemServer调用wm.systemReady()通知WindowManagerService,进而调用PhoneWindowManager,最终通过LockPatternKeyguardView显示解锁界面,跟踪代码可以看到解锁界面并不是一个Activity,这是只是向特定层上绘图,其代码了存放在特殊的位置
8.
开机自启动的第三方应用程序
frameworks/base/services/java/com/android/server/am/ActivityManagerService.java
系统启动成功后SystemServer调用ActivityManagerNative.getDefault().systemReady()通知ActivityManager启动成功,ActivityManager会通过置变量mBooting,通知它的另一线程,该线程会发送广播android.intent.action.BOOT_COMPLETED以告知已注册的第三方程序在开机时自动启动。
9.
总结
综上所述,系统层次关于启动最核心的部分是zygote(即app_process)和systemserver,zygote它负责最基本的虚拟机的建立,以支持各个应用程序的启动,而systemserver用于管理android后台服务,启动步骤及顺序。
10.参考
Android启动过程详解
Android从Linux系统启动有4个步骤;
(1)init进程启动
(2)Native服务启动
(3)SystemServer,Android服务启动
(4)Home启动
总体启动框架图如:
第一步:
initial进程(system/core/init)
init进程,它是一个由内核启动的用户级进程。
内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。
init始终是第一个进程.
Init.rc
Init.marvell.rc
Init进程一起来就根据init.rc和init.xxx.rc脚本文件建立了几个基本的服务:
servicemanamger
zygote
。
。
最后Init并不退出,而是担当起propertyservice的功能。
1.1脚本文件
init@System/Core/Init
Init.c:
parse_config_file(Init.rc)
@parse_config_file(Init.marvel.rc)
解析脚本文件:
Init.rc和Init.xxxx.rc(硬件平台相关)
Init.rc是Android自己规定的初始化脚本(AndroidInitLanguage,System/Core/Init/readme.txt)
该脚本包含四个类型的声明:
Actions
Commands
Services
Options.
1.2服务启动机制
我们来看看Init是这样解析.rc文件开启服务的。
(1)打开.rc文件,解析文件内容@system/core/init/init.c
将service信息放置到service_list中。
@system/core/initparser.c
(2)restart_service()@system/core/init/init.c
service_start
execve(…).建立service进程。
第二步Zygote
Servicemanager和zygote进程就奠定了Android的基础。
Zygote这个进程起来才会建立起真正的Android运行空间,初始化建立的Service都是Navtiveservice.在.rc脚本文件中zygote的描述:
servicezygote/system/bin/app_process-Xzygote/system/bin--zygote--start-system-server
所以Zygote从main(…)@frameworks/base/cmds/app_main.cpp开始。
(1)main(…)@frameworks/base/cmds/app_main.cpp
建立JavaRuntime
runtime.start("
com.android.internal.os.ZygoteInit"
startSystemServer);
(2)runtime.start@AndroidRuntime.cpp
建立虚拟机
运行:
com.android.internal.os.ZygoteInit:
main函数。
(3)main()@com.android.internal.os.ZygoteInit//真正的Zygote。
registerZygoteSocket();
//登记Listen端口
startSystemServer();
进入Zygote服务框架。
经过这几个步骤,Zygote就建立好了,利用Socket通讯,接收ActivityManangerService的请求,Fork应用程序。
第三步SystemServer
startSystemServer@com.android.internal.os.ZygoteInit在Zygote上fork了一个进程:
com.android.server.SystemServer.于是SystemServer@(SystemServer.java)就建立了。
Android的所有服务循环框架都是建立SystemServer@(SystemServer.java)上。
在SystemServer.java中看不到循环结构,只是可以看到建立了init2的实现函数,建立了一大堆服务,并AddService到serviceManager。
main()@com/android/server/SystemServer
{
init1();
}
Init1()是在Native空间实现的(com_andoird_server_systemServer.cpp)。
我们一看这个函数就知道了,init1->
system_init()@System_init.cpp
在system_init()我们看到了循环闭合管理框架。
Call"
com/android/server/SystemServer"
"
init2"
…..
ProcessState:
:
self()->
startThreadPool();
IPCThreadState:
joinThreadPool();
init2()@SystemServer.java中建立了Android中所有要用到的服务。
这个init2()建立了一个线程,来NewService和AddService来建立服务
第三步Home启动
在ServerThread@SystemServer.java后半段,我们可以看到系统在启动完所有的Android服务后,做了这样一些动作:
(1)使用xxx.systemReady()通知各个服务,系统已经就绪。
(2)
特别对于ActivityManagerService.systemReady(回调)
Widget.wallpaper,imm(输入法)等ready通知。
Home就是在ActivityManagerService.systemReady()通知的过程中建立的。
下面是ActivityManagerService.systemReady()的伪代码:
systemReady()@ActivityManagerService.java
resumeTopActivityLocked()
startHomeActivityLocked();
//如果是第一个则启动HomeA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 开机 启动 详细 注解