1:BootRom->BootLoader->Linux Kernel->Init->Zygote-
>SystemServer->Launcher
BootLoader
层:主要包括
Boot Rom
和
Boot Loader
Kernel
层:主要是
Android
内核层
Native
层:主要是包括
init
进程以及其
fork
出 来的用户空间的守护
进程、
HAL
层、开机动画等
JAVA Framework
层:主要是
AMS
和
PMS
等
Service
的初始化
Application
层:主要指
SystemUI
、
Launcher
的启动
2:
Android
系统启动流程:
第一步:手机开机后,引导芯片启动,引导芯片开始从固化在
ROM
里的预设代码执行,加载引导程序到到
RAM
,
bootloader
检
查
RAM
,初始化硬件参数等功能;
第二步:硬件等参数初始化完成后,进入到
Kernel
层,
Kernel
层
主要加载一些硬件设备驱动,初始化进程管理等操作。在
Kernel
中首先启动
swapper
进程(
pid=0
),用于初始化进程管理、内管
管理、加载
Driver
等操作,再启动
kthread
进程
(pid=2),
这些
linux
享学课堂
系统的内核进程,
kthread
是所有内核进程的鼻祖;
第三步:
Kernel
层加载完毕后,硬件设备驱动与
HAL
层进行交互。
初始化进程管理等操作会启动
INIT
进程 ,这些在
Native
层中;
第四步:
init
进程
(pid=1
,
init
进程是所有进程的鼻祖,第一个启
动
)
启动后,会启动
adbd
,
logd
等用户守护进程,并且会启动
servicemanager(binder
服务管家
)
等重要服务,同时孵化出
zygote
进程,这里属于
C++ Framework
,代码为
C++
程序;
第五步:
zygote
进程是由
init
进程解析
init.rc
文件后
fork
生成,它
会加载虚拟机,启动
System Server(zygote
孵化的第一个进程
)
;
System Server
负责启动和管理整个
Java Framework
,包含
ActivityManager
,
WindowManager
,
PackageManager
,
PowerManager
等服务;
第六步:
zygote
同时会启动相关的
APP
进程,它启动的第一个
APP
进程为
Launcher
,然后启动
Email
,
SMS
等进程,所有的
APP
进程
都有
zygote fork
生成
3:
init
进程是
linux
系统中用户空间的第一个进程,进程号为
1.
享学课堂
当
bootloader
启动后,启动
kernel
,
kernel
启动完后,在用户空
间启动
init
进程,再通过
init
进程,来读取
init.rc
中的相关配置,从
而来启动其他相关进程以及其他操作。
init
进程被赋予了很多重要工作,
init
进程启动主要分为两个阶
段:
第一个阶段完成以下内容:
ueventd/watchdogd
跳转及环境变量设置
挂载文件系统并创建目录
初始化日志输出、挂载分区设备
启用
SELinux
安全策略
开始第二阶段前的准备
第二个阶段完成以下内容:
初始化属性系统
执行
SELinux
第二阶段并恢复一些文件安全上下文
新建
epoll
并初始化子进程终止信号处理函数
设置其他系统属性并开启属性服务
init进行第三阶段主要是解析
init.rc
来启动其他进程,进入无限循
环,进行子进程实时监控。