Android是一个基于Linux内核的操作系统,了解Android开机流程有助于理解Linux系统的开机过程。Android系统开机流程图如下所示:
                                                      Android开机启动流程_第1张图片                                                                                                                  Fig. Android Booting Process

1 - Boot ROM

按下开机键后,跳至硬件编码的BOOT ROM指定地址:加载Bootloader到内存中,开始执行Bootloader代码

2 - Bootloader

Bootloader 执行分为两个阶段:

  •   检测外部RAM 
  •  初始化网络、内存等,为启动kernel做准备

Bootloader的核心代码在init.S.

3 - Kernel

Android的Kernel启动跟Linux Kernel启动过程很相似,在这个过程中主要是初始化cache, 内存保护,进程调度,驱动以及挂载root文件系统。初始化完成之后,开始加载 Android的第一个进程 init

4 - Init

init进程是Android所有进程的父进程,其主要有两个作用:

  • 挂载系统目录:/sys, /dev/, /proc
  • 执行初始化脚本init.rc

此阶段init进程会启动系统的必须的守护进程,如RILD,netd,vold,meadiaserver,installd,adbd等,然后通过 脚本命令:

service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server 

开始加载 Android系统VM以及核心服务。 上述脚本通过/android/frameworks/base/cmds/app_process/app_main.cpp 解析后,启动 zygote进程和system server核心服务。
  • 有关 init.rc 的语法可以参看 AOSP 代码目录: /android/system/core/init/readme.txt
  • init 进程代码可以参看AOSP目录: /android/system/core/init/
  • init.rc 可参看 AOSP目录: /android/system/core/rootdir/init.rc

5 - Zygote/Dalvik

在Java中,不同的应用有不同的Virtual Machine(VM)实例,Android考虑到APP的加载速度,防止内存消耗过大,通过创建一个zygote进程,从而实现不同Dalvik VM之间的代码、数据共享。 zygote进程主要用于预加载并初始化Android的核心库类。

一旦init初始化完Android Runtime,zygote开始创建 第一个Dalvik VM实例,由此 zygote进程开始加载system server进程。 zygote的执行主要有几个关键步骤: 

  •  加载并执行 ZygoteInit 类
  • registerZygoteSocket(): 注册用于zygote命令链接的socket
  • preloadClasses(); preloadResources(): 预加载常用类以及系统资源(themes,layouts等)

至此,系统会有开机画面显示

6 - System Server/services

Zygote启动一个新的system server进程用于启动系统服务,需要启动的服务主要有两类:(1) core services; (2) other services:

core services

  • Power Manager
  • Activity Manager
  • Telephony Registry
  • Package Manager
  • Alarm Manager
  • Sensor Service
  • Window Manager
  • Mount Service
  • Context Manager

Other Service

  • Status bar service
  • hardware service
  • connectivity service
  • notification manager
  • location manager
  • wallpaper service

7 - 启动HOME Activity

ActivityManager 初始化完成后,会发送一个 CATEGORY_HOME 的Intent,从而启动HOME Screen,至此可以看到手机开机完成后的IDLE界面,Android系统启动完成。

更多相关文章

  1. Android 图片加载图片_OOM异常解决
  2. IPC进程间通信
  3. [置顶] Android进程间通信AIDL的使用分析
  4. 求助: Android 加载 webview, 点击webview 中网页时间, 如何触发
  5. android后台进程隐藏手段
  6. android kernel 初始化 1

随机推荐

  1. 高仿android微信源码下载
  2. 2011.08.12(2)——— android MediaPlayer
  3. Android 获取通讯录信息
  4. 探索Android该Parcel机制(上)
  5. 在下方的tab页
  6. android BadTokenException之token is no
  7. android 内存清理
  8. android截屏代码:C++实现
  9. GoogleAndroid常用的Android常量
  10. 读取raw文件下文件内容