Android 开机启动流程解析
上一篇 / 下一篇 2016-10-17 14:27:54 / 个人分类:Android
我的栏目
- 栏目:
- Activity(活动)
- Broadcast Intent Receiver(广播意图接收者)
- Service(服务)
- Content Provider(内容提供者)
- Intent and Intent Filter(意图和意图过滤器)
- Bionic系统C库。
- 媒体库,基于PacketVideo OpenCORE。
- Surface Manager 顾名思义,用于管理Surface。
- Webkit,LibWebCore 浏览器,基于Webkit引擎。
- SGL 底层的2D图形引擎
- 3D libraries 基于OpenGL ES 1.0 APIs实现
- FreeType 位图(bitmap)和矢量(vector)字体显示。
- SQLite 一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。
- java语言:即其语法,其写代码的程式
- java虚拟机:为了实现一次编译到处可以运行的原则,java在编译连接以后并没有产生目标机器语言,而是采用了Java bytecode。这种Java共用指令,这时就需要一个虚拟机来执行改指令。
- 库:跟我们常用的C语言一样提供一些常用的库
*p{5vv1aQ+Bi~.l0
b)`L4t;qA6is!u0
1 - Boot ROM
按下开机键后,跳至硬件编码的BOOT ROM指定地址:加载Bootloader到内存中,开始执行Bootloader代码51Testing软件测试网+^TJ!s|;J)\Hk-^^e
2 - Bootloader
Bootloader 执行分为两个阶段:
5\.X7`z6x8t`0- 检测外部RAM
- 初始化网络、内存等,为启动kernel做准备
Bootloader的核心代码在init.S.51Testing软件测试网R!Eao'g
3 - Kernel
Android的Kernel启动跟Linux Kernel启动过程很相似,在这个过程中主要是初始化cache, 内存保护,进程调度,驱动以及挂载root文件系统。初始化完成之后,开始加载 Android的第一个进程 init51Testing软件测试网Br.X4Nskoi
4 - Init
init进程是Android所有进程的父进程,其主要有两个作用:51Testing软件测试网(p*| ~ v3I
- 挂载系统目录:/sys, /dev/, /proc
- 执行初始化脚本init.rc
此阶段init进程会启动系统的必须的守护进程,如RILD,netd,vold,meadiaserver,installd,adbd等,然后通过 脚本命令:
]e+ZN2dDsB02}4`T6I(Z4o@0
- 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核心服务。51Testing软件测试网:MYhi ^O:S
- 有关 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命令链接的socketpreloadClasses(); preloadResources()
: 预加载常用类以及系统资源(themes, layouts等)
至此,系统会有开机画面显示51Testing软件测试网h+F g&t8?
6 - System Server/services
Zygote启动一个新的system server进程用于启动系统服务,需要启动的服务主要有两类:(1) core services; (2) other services: