概述
- Android系統(tǒng)基于Linux內(nèi)核,所以Android系統(tǒng)啟動時涡贱,首先要初始化Linux內(nèi)核巧勤;
- 整體流程分為三部分:BootLoader;Linux Kernel湾揽;Android Kernel瓤逼;
流程
BootLoader
- 開機(jī)時系統(tǒng)開始供電笼吟,硬件電路會產(chǎn)生一個確定的復(fù)位時序(CPU時最后一個被復(fù)位的硬件)库物;正確完成復(fù)位后,CPU開始執(zhí)行第一條指令贷帮,這條指令地址是固定戚揭,由CPU制造商指定,指向的就是BootLoader程序撵枢,BootLoader作用是裝載真正的系統(tǒng)軟件民晒;
Linux Kernel
- Linux Kernel初始化時執(zhí)行的操作包括:初始化各種硬件,包括內(nèi)存锄禽,網(wǎng)絡(luò)接口潜必,顯示器,輸入設(shè)備等沃但;然后建立各種內(nèi)部數(shù)據(jù)結(jié)構(gòu)磁滚,用于內(nèi)存管理,線程調(diào)度等宵晚;
Android Kernel
- 1.啟動第一個進(jìn)程Init(初始化進(jìn)程)垂攘;
- 2.啟動守護(hù)進(jìn)程
- 啟動USB守護(hù)進(jìn)程(usbd)來管理USB連接;
- 啟動Android Debug Bridge守護(hù)進(jìn)程(adbd)來管理ADB連接淤刃;
- 啟動Debug守護(hù)進(jìn)程(debuggerd)來管理調(diào)試進(jìn)程的請求(包括內(nèi)存轉(zhuǎn)換)晒他;
- 啟動無線接口守護(hù)進(jìn)程(rild)來管理無線通信;
- 3.啟動第一個Zygote進(jìn)程
- 在啟動Linux守護(hù)進(jìn)程的同時逸贾,還需要啟動Zygote陨仅;
- Zygote主要功能包括
- 初始化第一個Dalvik/Art虛擬機(jī)實例,包括Framework共享類和共享資源的加載铝侵;
- 開啟Socket服務(wù)端監(jiān)聽灼伤,創(chuàng)建虛擬機(jī)實例來管理應(yīng)用程序的進(jìn)程(包括SystemServer);
- Java層有個相關(guān)類ZygoteInit哟沫,在main函數(shù)中饺蔑,會調(diào)用preload(包括類和資源);如果Zygote啟動參數(shù)中要求啟動SystemServer嗜诀,那么會調(diào)用forkSystemServer猾警,啟動SystemServer進(jìn)程孔祸;
- 4.初始化runtime進(jìn)程
- runtime進(jìn)程主要功能包括
- 初始化ServiceManager,并注冊ServiceManager发皿,Binder驅(qū)動以它為Binder服務(wù)的管理器崔慧;
- 請求Zygote啟動SystemServer;
- runtime進(jìn)程主要功能包括
- 5.啟動SystemServer
- 啟動原生系統(tǒng)服務(wù)穴墅,主要包括Surface Flinger和Audio Flinger惶室,并注冊到ServiceManager;
- 啟動Android管理服務(wù)玄货,并注冊到ServiceManager皇钞;
- Java層有個相關(guān)類SystemServer,SystemServer.run方法用來啟動服務(wù)松捉,包括:
- BootstrapService
- CoreService
- OtherService
- 6.啟動第一個應(yīng)用