本篇文章主要對(duì)于Android啟動(dòng)過(guò)程做簡(jiǎn)單介紹,之前從網(wǎng)上看到兩張比較清晰,一目了然的圖片,可以更好的了解Android系統(tǒng)的全貌,在此整合梳理劃重點(diǎn)并和大家一起分享

上圖是以進(jìn)程的視角分層來(lái)詮釋系統(tǒng)的啟動(dòng)過(guò)程,啟動(dòng)過(guò)程由下往上,下面開(kāi)始劃重點(diǎn):
swapper進(jìn)程:
該進(jìn)程又稱為idle進(jìn)程, 系統(tǒng)初始化過(guò)程Kernel由無(wú)到有開(kāi)創(chuàng)的第一個(gè)進(jìn)程, 用于初始化進(jìn)程管理、內(nèi)存管理,加載Display Driver?,Camera Driver,Binder Driver等相關(guān)工作;
kthreadd進(jìn)程:
kthreadd進(jìn)程是所有內(nèi)核進(jìn)程的鼻祖
kthreadd進(jìn)程會(huì)創(chuàng)建內(nèi)核工作線程kworkder,軟中斷線程ksoftirqd,thermal等內(nèi)核守護(hù)進(jìn)程
init進(jìn)程:
init進(jìn)程是所有用戶進(jìn)程的鼻祖
init進(jìn)程fork出多個(gè)用戶守護(hù)進(jìn)程
? ? ? ? ? ? ? ?- 如?mountd:設(shè)備安裝 Daemon,負(fù)責(zé)設(shè)備安裝及狀態(tài)通知
? ? ? ? ? ? ? ? - debuggerd:?jiǎn)?dòng) debug system,處理調(diào)試進(jìn)程的請(qǐng)求
? ? ? ? ? ? ? ?- rild:?jiǎn)?dòng) radio interface layer daemon 服務(wù),處理電話相關(guān)的事件和請(qǐng)求
? ? ? ? ? ? ? ? - ueventd、logd、healthd、installd、adbd、lmkd等;
init進(jìn)程啟動(dòng)ServiceManager(binder服務(wù)管家)、bootanim(開(kāi)機(jī)動(dòng)畫(huà))等重要服務(wù);
init進(jìn)程fork出Zygote進(jìn)程,即進(jìn)程孵化器,啟動(dòng) Android Java Runtime 和啟動(dòng) systemserver,負(fù)責(zé) Android 應(yīng)用進(jìn)程的孵化工作
init進(jìn)程fork出Media Server進(jìn)程(包含AudioFlinger,MediaPlayerService, Camera Service等服務(wù),負(fù)責(zé)多媒體播放相關(guān)的功能,包括音視頻解碼)
Zygote進(jìn)程:
Zygote進(jìn)程是Android系統(tǒng)的第一個(gè)Java進(jìn)程(即虛擬機(jī)進(jìn)程),是所有Java進(jìn)程的父進(jìn)程。
Zygote進(jìn)程fork出System Server進(jìn)程;
?所有的App進(jìn)程都是由Zygote進(jìn)程fork生成的;
?Zygote進(jìn)程孵化出的第一個(gè)App進(jìn)程是Launcher(桌面App);
System Server進(jìn)程:
System Server進(jìn)程是Zygote fork的第一個(gè)進(jìn)程。
System Server負(fù)責(zé)啟動(dòng)和管理整個(gè)Java framework,包含ActivityManagerService,PowerManagerService, WindowManagerService等服務(wù).
通過(guò)對(duì)上述進(jìn)程的了解,我們根據(jù)下面這張圖再對(duì)具體啟動(dòng)過(guò)程做下補(bǔ)充和梳理

Boot ROM: 當(dāng)手機(jī)處于關(guān)機(jī)狀態(tài)時(shí),長(zhǎng)按Power鍵開(kāi)機(jī),引導(dǎo)芯片開(kāi)始從固化在ROM里的預(yù)設(shè)代碼開(kāi)始執(zhí)行,然后加載引導(dǎo)程序到RAM;
Boot Loader:系統(tǒng)啟動(dòng)加載器,就是啟動(dòng)Android系統(tǒng)之前的引導(dǎo)程序, 它類似于 BIOS(Basic Input/Output System),在系統(tǒng)加載前,用于檢查RAM,初始化硬件設(shè)備,建立內(nèi)存空間的映像圖,為最終調(diào)用系統(tǒng)內(nèi)核準(zhǔn)備好環(huán)境
Boot Loader會(huì)讀取 ROM 找到操作系統(tǒng)并將 Linux 內(nèi)核加載到 RAM 中。
對(duì)于ROM, 主要有以下幾個(gè)分區(qū):
/boot:存放引導(dǎo)程序,包括內(nèi)核和內(nèi)存操作程序
/system:存放Android系統(tǒng)及系統(tǒng)應(yīng)用
/recovery:恢復(fù)分區(qū),可以進(jìn)入該分區(qū)進(jìn)行系統(tǒng)恢復(fù)
/data:用戶數(shù)據(jù)區(qū),包含了用戶的數(shù)據(jù):聯(lián)系人、短信、設(shè)置、用戶安裝的程序
/cache:安卓系統(tǒng)緩存區(qū),保存系統(tǒng)最常訪問(wèn)的數(shù)據(jù)和應(yīng)用程序
/misc:包含一些雜項(xiàng)內(nèi)容,如系統(tǒng)設(shè)置和系統(tǒng)功能啟用禁用設(shè)置
/sdcard:用戶自己的存儲(chǔ)區(qū),可以存放照片,音樂(lè),視頻等文件
當(dāng) Linux 內(nèi)核啟動(dòng)后會(huì)初始化各種軟硬件環(huán)境,加載驅(qū)動(dòng)程序,掛載根文件系統(tǒng),Linux 內(nèi)核加載的最后階段會(huì)啟動(dòng)執(zhí)行第一個(gè)用戶空間進(jìn)程 init 進(jìn)程
init進(jìn)程fork其他進(jìn)程是通過(guò)解析init.rc文件生成的,其中init.rc 文件是 Android 系統(tǒng)的重要配置文件,位于 /system/core/rootdir/ 目錄中。
其中SurfaceFlinger進(jìn)程 也是init進(jìn)程創(chuàng)建的,負(fù)責(zé)圖像繪制,是應(yīng)用 UI 的核心,其功能是合成所有 Surface 并渲染到顯示設(shè)備。SurfaceFlinger 進(jìn)程主要是啟動(dòng) FrameBuffer,初始化顯示系統(tǒng)。
圖片和參考文章:http://gityuan.com/android/