Android啟動(dòng)過(guò)程

本篇文章主要對(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/

https://github.com/jeanboydev/Android-ReadTheFuckingSourceCode/blob/master/android/Android-系統(tǒng)啟動(dòng)過(guò)程.md

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容