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

select/poll/epoll

当电源按下,引导芯片代码开始从预定义的地方(固化在ROM)开始执行。加载引导程序到RAM,然后执行

ZygoteInit.java:mainfork 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  

[Back to Top]