Android 的开机流程

#移动开发 #Android

y

1. 系统引导 bootloader

  1. 源码:bootable/bootloader/*

  2. 说明:加电后,CPU 将先执行 bootloader 程序,此处有三种选择

  1. 开机按 Camera+Power 启动到 fastboot,即命令或 SD

卡烧写模式,不加载内核及文件系统,此处可以进行工厂模式的烧写

  1. 开机按 Home+Power 启动到 recovery 模式,加载 recovery.img,recovery.img

包含内核,基本的文件系统,用于工程模式的烧写

  1. 开机按 Power,正常启动系统,加载 boot.img,boot.img

包含内核,基本文件系统,用于正常启动手机(以下只分析正常启动的情况)

2. 内核 kernel

  1. 源码:kernel/*

  2. 说明:kernel 由 bootloader 加载

3. 文件系统及应用 init

  1. 源码:system/core/init/*

  2. 配置文件:system/rootdir/init.rc,

  3. 说明:init 是一个由内核启动的用户级进程,它按照 init.rc 中的设置执行:启动服务(这里的服务指 linux 底层服务,如

adbd 提供 adb 支持,vold 提供 SD 卡挂载等),执行命令和按其中的配置语句执行相应功能

4. 重要的后台程序 zygote

  1. 源码:frameworks/base/cmds/app_main.cpp 等

  2. 说明:zygote 是一个在 init.rc 中被指定启动的服务,该服务对应的命令是 /system/bin/app_process

  1. 建立 Java Runtime,建立虚拟机

  2. 建立 Socket 接收 ActivityManangerService 的请求,用于 Fork 应用程序

  3. 启动 System Server

5. 系统服务 system server

  1. 源码:frameworks/base/services/java/com/android/server/SystemServer.java

  2. 说明:被 zygote 启动,通过 System Manager 管理 android 的服务(这里的服务指

frameworks/base/services 下的服务,如卫星定位服务,剪切板服务等)

6. 桌面 launcher

  1. 源码:ActivityManagerService.java 为入口,packages/apps/launcher* 实现

  2. 说明:系统启动成功后 SystemServer 使用 xxx.systemReady() 通知各个服务,系统已经就绪,桌面程序 Home

就是在 ActivityManagerService.systemReady() 通知的过程中建立的,最终调用

startHomeActivityLocked() 启 launcher

7. 解锁

  1. 源码: frameworks/policies/base/phone/com/android/internal/policy/impl/lock

  2. 说明:系统启动成功后 SystemServer 调用 wm.systemReady() 通知 WindowManagerService

,进而调用 PhoneWindowManager,最终通过 LockPatternKeyguardView

显示解锁界面,跟踪代码可以看到解锁界面并不是一个 Activity,这是只是向特定层上绘图,其代码了存放在特殊的位置

8. 开机自启动的第三方应用程序

  1. 源码: frameworks/base/services/java/com/android/server/am/ActivityManagerService.java

  2. 说明:系统启动成功后 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/)