《Android安全技術(shù)揭秘與防范》讀書筆記
在講述Android啟動過程前,先簡單介紹一下Android的層次結(jié)構(gòu)和分區(qū)結(jié)構(gòu)
Android系統(tǒng)的層次結(jié)構(gòu)
整體架構(gòu)分為如下4層
- 應(yīng)用層(Application)
- 框架層(Framework)
- 核心庫與運行環(huán)境層(Libraries & Android Runtime)
- Linux內(nèi)核層(Linux Kernel)
Android系統(tǒng)的分區(qū)結(jié)構(gòu)
分區(qū)是邏輯層存儲單位用來區(qū)分設(shè)備內(nèi)部的永久性存儲結(jié)構(gòu)。不同廠商和平臺有不同的分區(qū)布局。然而,有幾個分區(qū)最常見,即Boot、Data、Recovery和Cache分區(qū)。通常的情況下NAND閃存的設(shè)備都具備一下分區(qū)布局
-
Boot Loader分區(qū)
中文名稱“系統(tǒng)加載區(qū)”,它的作用相當(dāng)于電腦的BIOS,在手機進入系統(tǒng)之前初始化軟硬件環(huán)境、加載硬件設(shè)備,最終讓手機成功啟動。
-
Boot分區(qū)
存儲著Android的Boot鏡像,其中包含著Linux kernel(zImage)與initrd等文件。
-
Splash分區(qū)
主要是存儲系統(tǒng)啟動后第一屏顯示的內(nèi)容,一般都是一些公司的Logo或者動畫,存儲在Boot Loader中。
-
Radio分區(qū)
這個事基帶所在的分區(qū),存儲著一些與通信質(zhì)量相關(guān)的Linux驅(qū)動,如電話、GPS等。常用的驅(qū)動是可以打包存在于Linux的內(nèi)核Boot分區(qū),但為了提升設(shè)備的通信質(zhì)量,所以單獨開辟了Radio分區(qū)。
-
Recovery分區(qū)
存儲著一個mini型的Android Boot鏡像文件,主要的作用是用來做故障維修和系統(tǒng)恢復(fù)。
-
System分區(qū)
存儲著Android系統(tǒng)的鏡像文件,鏡像文件中包含著Android的Framework、Libraries、Binaries和一些預(yù)裝應(yīng)用。系統(tǒng)掛載后既/system目錄
-
User Data分區(qū)
也稱為數(shù)據(jù)分區(qū),它是設(shè)備的內(nèi)部存儲分區(qū),如應(yīng)用產(chǎn)生的圖片、聲音等數(shù)據(jù)文件。系統(tǒng)掛載后在/data目錄下
-
Cache區(qū)
用于存儲各種使用的文件,如回復(fù)日志和OTA下載的更新包。在應(yīng)用程序安裝在SD卡上時,它也可能包含Dalvik緩存文件夾,其中存儲了Dalvik虛擬機的緩存文件。
Android啟動流程
主要分為6個階段:BootLoader加載階段、加載Kernel與initrd階段、初始化設(shè)備服務(wù)階段、加載系統(tǒng)服務(wù)階段、虛擬機初始化階段、啟動完成階段。

-Boot Loader階段
Boot Loader是在物理電源按下之后第一個加載的。在此階段會運行一些制造商自定義的初始化代碼。Boot Loader內(nèi)部也分為多個階段,對此不做深入討論。
-加載Kernel與initrd階段
Boot分區(qū)加載Linux kernel與initrd到RAM,最后跳轉(zhuǎn)到Kernel繼續(xù)完成啟動。
-初始化設(shè)備服務(wù)階段
Android kernel則會啟動所有Android系統(tǒng)設(shè)備所必須的服務(wù),如初始化Memory、初始化IO、內(nèi)存保護、中斷處理程序、CPU調(diào)度、設(shè)備驅(qū)動,最后還會掛載文件系統(tǒng),啟動第一個用戶進程init。
-加載系統(tǒng)服務(wù)階段
init是Linux系統(tǒng)中用戶空間的第一個進程,其進程PID是1,父進程為Linux Kernel核的0號進程。init具有特殊的初始化使命,它會加載一個初始化腳本文件init.rc,啟動Android系統(tǒng)的一些核心服務(wù),如針對通話的rild、針對VPN鏈接的mtpd、提供adb相關(guān)功能adbd、支持存儲外設(shè)的熱插撥功能vold、負責(zé)進程孵化服務(wù)的Zygote、Service Manager等。
-虛擬機初始化階段
其中啟動的Zygote進程會創(chuàng)建Dalvik VM,會啟動第一個Java組件系統(tǒng)服務(wù),最后是Android Framework服務(wù),如Activity Manager、Package Manager、Window Manager
-啟動完成階段
當(dāng)系統(tǒng)完成啟動之后,載入Home(桌面應(yīng)用程序),然后做一些應(yīng)用層的初始化的工作,如播放一個全局的廣播ACTION_BOOT_COMPLETED.