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启动流程
boot引导启动
【启动模式判断和logo显示】【kernel鉴权和运行】
系统上电后cpu复位,到指定物理地址取指令执行,这个指令就是boot
linux kernel启动
【kernel系统初始】 【驱动初始化】【系统环境初始化】
init
【init.main中执行基本初始化和配置】【解析并运行init.rc启动本地守护进程】
init代码位于system/core/init目录下,编译后打包进ramdisk中,最后一并打包到boot.img中。
init主要有两个过程:init.main中执行基本的初始化和配置;解析并运行init.rc,启动本地的守护进程
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