Android的开机流程
Android 的开机流程
#移动开发 #Android
y
1. 系统引导 bootloader
源码:bootable/bootloader/*
说明:加电后,CPU 将先执行 bootloader 程序,此处有三种选择
- 开机按 Camera+Power 启动到 fastboot,即命令或 SD
卡烧写模式,不加载内核及文件系统,此处可以进行工厂模式的烧写
- 开机按 Home+Power 启动到 recovery 模式,加载 recovery.img,recovery.img
包含内核,基本的文件系统,用于工程模式的烧写
- 开机按 Power,正常启动系统,加载 boot.img,boot.img
包含内核,基本文件系统,用于正常启动手机(以下只分析正常启动的情况)
2. 内核 kernel
源码:kernel/*
说明:kernel 由 bootloader 加载
3. 文件系统及应用 init
源码:system/core/init/*
配置文件:system/rootdir/init.rc,
说明:init 是一个由内核启动的用户级进程,它按照 init.rc 中的设置执行:启动服务(这里的服务指 linux 底层服务,如
adbd 提供 adb 支持,vold 提供 SD 卡挂载等),执行命令和按其中的配置语句执行相应功能
4. 重要的后台程序 zygote
源码:frameworks/base/cmds/app_main.cpp 等
说明:zygote 是一个在 init.rc 中被指定启动的服务,该服务对应的命令是 /system/bin/app_process
建立 Java Runtime,建立虚拟机
建立 Socket 接收 ActivityManangerService 的请求,用于 Fork 应用程序
启动 System Server
5. 系统服务 system server
源码:frameworks/base/services/java/com/android/server/SystemServer.java
说明:被 zygote 启动,通过 System Manager 管理 android 的服务(这里的服务指
frameworks/base/services 下的服务,如卫星定位服务,剪切板服务等)
6. 桌面 launcher
源码:ActivityManagerService.java 为入口,packages/apps/launcher* 实现
说明:系统启动成功后 SystemServer 使用 xxx.systemReady() 通知各个服务,系统已经就绪,桌面程序 Home
就是在 ActivityManagerService.systemReady() 通知的过程中建立的,最终调用
startHomeActivityLocked() 启 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) 和
system server,zygote
它负责最基本的虚拟机的建立,以支持各个应用程序的启动,而 system server 用于管理 android 后台服务,启动步骤及顺序。
10. 参考
[http://blog.csdn.net/basonjiang_sz/category/648399.aspx
](http://blog.csdn.net/basonjiang_sz/category/648399.aspx)
(转载请注明出处: http://xy0811.spaces.live.com/)