您的位置:首页 > 移动开发 > Android开发

Android开机启动流程

2016-08-22 17:14 651 查看


Android是一个基于Linux内核的操作系统,了解Android开机流程有助于理解Linux系统的开机过程。Android系统开机流程图如下所示:

                                                      


                                                                                                                  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系统启动完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息