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

最後附一張較爲詳細的流程圖(始於App_main.cpp#main;億圖打開)

發佈了48 篇原創文章 · 獲贊 8 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章