####
Android系统启动过程
Bootloader加载
linux内核加载,文件系统挂载
init进程启动,解析init.rc配置文件
启动serviceManager SurfaceFling MediaServer binder 驱动
启动binder机制:
5.1 打开binder驱动,
5.2 映射虚拟内存,分配内存缓冲区
5.3 注册binder线程
5.4 进入binder loop
Zygote进程启动,根据init.rc配置文件启动zygote
启动Android虚拟机,注册JNI函数
预加载系统资源,提高app启动速度
启动Systemserver
注册socket,开启无限循环,通过监听socket,等待AMS命令fork进程
启动系统服务,AMS,PKMS,WMS等分批启动,把这些系统服务注册到ServerManager,方便快速获得binder对象,
AMS启动后SystemReady回调时候启动launcher
系统服务器启动的互相依赖怎么解决
分批启动
分阶段启动
1
2
3
4
5
6//启动引导服务
startBootstrapServices();
//启动核心服务
startCoreServices();
//启动其他服务
startOtherServices();
ServcieManger启动和工作原理
- 调用函数
binder_open
打开设备文件/dev/binder
以及将它映射到本进程的地址空间. - 调用函数
binder_become_context_manager
将自己注册为所有服务的大管家. - 调用函数
binder_loop
来循环等待和处理 Client 进程的通信请求.