Android系統啟動流程(一)解析init進程啟動過程
整體流程大致如下:

1.init簡介
init進程是Android系統中用戶空間的第一個進程,作為第一個進程,它被賦予了很多極其重要的工作職責,比如創建zygote(孵化器)和屬性服務等。init進程是由多個源文件共同組成的,這些文件位于源碼目錄system/core/init。本文將基于Android7.0源碼來分析Init進程。
2.引入init進程
說到init進程,首先要提到Android系統啟動流程的前幾步:
1.啟動電源以及系統啟動
當電源按下時引導芯片代碼開始從預定義的地方(固化在ROM)開始執行。加載引導程序Bootloader到RAM,然后執行。
2.引導程序Bootloader
引導程序是在Android操作系統開始運行前的一個小程序,它的主要作用是把系統OS拉起來并運行。
3.linux內核啟動
內核啟動時,設置緩存、被保護存儲器、計劃列表,加載驅動。當內核完成系統設置,它首先在系統文件中尋找”init”文件,然后啟動root進程或者系統的第一個進程。
4.init進程啟動
講到第四步就發現我們這一節要講的init進程了。關于Android系統啟動流程的所有步驟會在本系列的最后一篇做講解。
3.init入口函數
4.init.rc
init.rc是一個配置文件,內部由Android初始化語言編寫(Android Init Language)編寫的腳本,它主要包含五種類型語句:
Action、Commands、Services、Options和Import
5.解析service
接下來我們來解析service,會用到兩個函數,一個是ParseSection,它會解析service的rc文件,比如上文講到的init.zygote64.rc,ParseSection函數主要用來搭建service的架子。另一個是ParseLineSection,用于解析子項。
6.init啟動zygote
講完了解析service,接下來該講init是如何啟動service,在這里我們主要講解啟動zygote這個service。在zygote的啟動腳本中我們得知zygote的class name為main。
7.屬性服務
Windows平臺上有一個注冊表管理器,注冊表的內容采用鍵值對的形式來記錄用戶、軟件的一些使用信息。即使系統或者軟件重啟,它還是能夠根據之前在注冊表中的記錄,進行相應的初始化工作。Android也提供了一個類似的機制,叫做屬性服務。
8.init進程總結
講到這,總結起來init進程主要做了三件事:
1.創建一些文件夾并掛載設備
2.初始化和啟動屬性服務
3.解析init.rc配置文件并啟動zygote進程
浙公網安備 33010602011771號