Android开机启动流程
2016-08-22 17:14
651 查看
Android是一个基于Linux内核的操作系统,了解Android开机流程有助于理解Linux系统的开机过程。Android系统开机流程图如下所示:
![](http://img.blog.csdn.net/20160822171609121?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
Fig. Android Booting Process
检测外部RAM
初始化网络、内存等,为启动kernel做准备
Bootloader的核心代码在init.S.
Android的第一个进程 init
挂载系统目录:/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以及核心服务。 上述脚本通过
server核心服务。
有关 init.rc 的语法可以参看 AOSP 代码目录:
init 进程代码可以参看AOSP目录:
init.rc 可参看 AOSP目录:
VM之间的代码、数据共享。
一旦init初始化完Android
Runtime,
第一个Dalvik VM实例,由此
server进程。
加载并执行
注册用于zygote命令链接的socket
至此,系统会有开机画面显示
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
Screen,至此可以看到手机开机完成后的IDLE界面,Android系统启动完成。
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,从而启动HOMEScreen,至此可以看到手机开机完成后的IDLE界面,Android系统启动完成。
相关文章推荐
- Android开机启动流程初探
- Android开机启动流程初探
- Android开机启动流程初探
- Android开机启动流程初探
- Android开机启动流程初探
- Android开机启动流程初探
- Android开机启动流程初探
- Android开机启动流程初探 .
- Android开机启动流程初探
- android开机启动流程
- Android开机启动流程说明
- Android系统开机启动流程
- android开机启动流程说明
- Android开机启动流程初探
- Android开机启动流程初探
- Android开机启动流程初探
- Android系统开机启动流程
- Android 开机启动流程分析
- Android开机启动流程初探
- android从init到开机动画启动关闭流程一简易图(surfaceflinger启动的位置)