導航
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