深入理解Android操作系统
Android Source:7.1.1
Linux Kernel:3.18
主线:开机到启动桌面过程
|引导 ▪|内核空间 ▪|用户空间(初始化) ▪|部分核心服务 ▪|Art虚拟机初始化 ▪|Java Runtime ▪|Java Runtime服务 ▪|Java Runtime服务 ▪| |–:|–:|–:|–:|–:|–:|–:| |PBL ↓ |init.S ↓| |main.c:_main →|(PID=0) main.c:start_kernel ↓| ||main.c:rest_init ↓| ||main.c:kernel_init →|(PID=1)init.c:main ↓| |||init.rc →|(PPID=1 假设PID=200)zygote →|AndroidRuntime.cpp:start ↓| |||→|(PPID=1) servicemanager |AndroidRuntime.cpp:startVm ↓| |||→|(PPID=1) surfaceflinger|java_vm_ext.cc:JNI_CreateJavaVM ↓| |||→|(PPID=1) cameraserver|runtime.cc:Create ↓| |||→|(PPID=1) mediaserver|runtime.cc:Init ↓| |||→|(PPID=1) audioserver|runtime.cc:Start ↓| |||||AndroidRuntime.cpp:startReg ↓| |||||END →|ZygoteInit.java:main →|——————————-|
PID = 当前进程ID PPID = 父进程ID
PBL
当电源按下,引导芯片代码开始从预定义的地方(固化在ROM)开始执行。加载引导程序到RAM,然后执行
ZygoteInit.java:main ↓ fork ZygoteInit.java:startSystemServer ↓
进入轮询等待连接
引导 | 内核空间 | 用户空间(初始化) | 部分核心服务 | Art虚拟机初始化 | Java Runtime | Java Runtime服务 |
---|---|---|---|---|---|---|
PBL↓ | ||||||
init.S ↓ | ||||||
[main.c] _main | (PID=0) [main.c] start_kernel | |||||
- | [main.c] rest_init | |||||
- | [main.c] kernel_init | (PID=1) [init.cpp] main | ||||
- | - | init.rc → | (PPID=1) zygote → | [AndroidRuntime.cpp] start | ||
- | - | - | (PPID=1)servicemanager | [AndroidRuntime.cpp] startVm ↓ | ||
- | - | - | (PPID=1) surfaceflinger | [java_vm_ext.cc] JNI_CreateJavaVM | ||
- | - | - | (PPID=1) cameraserver | [runtime.cc] Create ↓ | ||
- | - | - | (PPID=1) mediaserver | [runtime.cc] Init ↓ | ||
- | - | - | (PPID=1) audioserver | [runtime.cc] Start ↓ | ||
- | - | - | - | [AndroidRuntime.cpp] startReg ↓ | ||
- | - | - | - | END → | [ZygoteInit.java] main |