Android Framework--开机启动流程

导航

Android Framework – 开机启动流程
Android Framework – Binder
Android Framework – PackageManagerService
Android Framework – 输入系统 InputManagerService
Android Framework – ActivityManagerService
Android Framework – 显示系统 WindowManagerService

Android专用驱动Binder/Logger/Ashmem
Audio图解

Android启动流程

Android Framework--开机启动流程

boot引导启动

【启动模式判断和logo显示】【kernel鉴权和运行】
系统上电后cpu复位,到指定物理地址取指令执行,这个指令就是boot
Android Framework--开机启动流程

linux kernel启动

【kernel系统初始】 【驱动初始化】【系统环境初始化】
Android Framework--开机启动流程

init

【init.main中执行基本初始化和配置】【解析并运行init.rc启动本地守护进程】

init代码位于system/core/init目录下,编译后打包进ramdisk中,最后一并打包到boot.img中。
init主要有两个过程:init.main中执行基本的初始化和配置;解析并运行init.rc,启动本地的守护进程
Android Framework--开机启动流程

ServiceManager 独立进程

管理系统所有的Service,所有Service的都需要在此注册及查询

zygote

【创建VM虚拟机 注册JNI】【通过JNI调用Java层,进入Java的世界】【作为进程孵化器,坐等其他进程发来创建新进程的请求】

始于App_main.cpp的main函数
主要工作是startVM启动虚拟机,注册JNI
加载各种资源(预加载类/系统资源/openGL/字体/全局so等)
进入Java世界
进入循环等待,负责fork新进程

systemserver

【启动并初始化SurfaceFlinger、SensorService、Binder】【开一个ServiceThread线程来启动七大类Service】【启动Launcher】

system_server中分init1和init2两个阶段,
第一阶段主要负责初始化还有SurfaceFlinger/SensorService/Binder等系统的启动。
第二阶段会启一个ServerThread线程来负责启动各种服务(可分为七大类)
第一类:Android核心服务;AMS,WMS等
第二类:通信相关服务;Wifi,Telephone等
第三类:系统功能相关服务;AudioService,MountService,UsbService等
第四类:BatteryService,VibratorService等服务
第五类:EntropyService,DiskStatsService,Watchdog等独立的服务
第六类:蓝牙服务
第七类:UI相关服务。状态栏服务,通知栏服务等
最后在ActivityManagerService.systemReady里启动Launcher

最后附一张较为详细的流程图(始于App_main.cpp#main;亿图打开)