Android啟動過程_大致流程


Android大致啟動過程如圖(基於O版本  使用draw.io畫的)。

注:這是通過查詢結合自己了解的,還有不少不明確的,后續有進展完善,歡迎指正。

說明:綠色是主要幾個的階段。其他圍繞這幾個階段的重要過程。

啟動過程(綠色的):

1.按下電源,引導芯片從預定義的地方(固化在ROM中),加載引導程序到RAM。

2.引導程序:BootLoader,Android內核啟動前的程序,為內核運行提供必要的條件。a,檢測外部的RAM以及加載對第二階段有用的程序;b,引導程序設置網絡、內存等。

3.內核:內核的啟動后,設置緩存,受保護的內存,調度和加載驅動程序。 當內核完成系統設置時,它會在系統文件中查找“init”。

4.init進程:兩個主要責任(1)掛在目錄(2)運行init.rc腳本。

5.Zygote:虛擬器進程,預加載和初始化核心庫。

Zygote會執行一個app_process可執行文件,在這個文件中首先添加了Android運行時環境,在Android運行時中調用了ZygoteInit.java,這就從c++代碼跳到了java代碼。
在ZytofeInit.java代碼中首先設置了Java虛擬機的堆內存空間,然后啟動一個類加載器加載Android啟動依賴的類比如Activity等四大組件,dialog等UI的類,然后分出一個子進程啟動SystemServer系統服務

6.系統服務:如電源管理器,電話注冊,上下文管理器等。

7.引導完成:ACTION_BOOT_COMPLETED開機啟動廣播發出。

 

開機過程的關鍵log[串口log]

  • "Preparing for EL3 exit to normal world, LK"

如果串口log里面沒有走到這里,說明在PL就卡住了,這句表示進入LK

  • "lk finished --> jump to linux kernel"

如果串口log里面沒有走到這里,但是上面走到了,說明在lk卡住了,這句表示進入kernel

  • "Kernel_init_done"

這句表示kernel初始化完成了,正准備啟動init進程,如果這就沒有走到:請搜索關鍵字initcall,
initcall是順序執行例如module_init注冊的init函數,看看卡在哪個call back上

  • "BOOTPROF"

這是開機過程中,每走過一個重要階段都會打印的標志,例如上面Kernel_init_done這一句就會打上這個標志

  • "init: init first stage started"

這句表示init進程正常起來執行

  • "fs_mgr" 和"e2fsck"

這里標志是在檢查和mount 文件系統,如果失敗會有如下log:fs_mgr_mount_all returned an error                           fs_mgr_mount_all returned unexpected error 255

  • "zygote"

Starting service 'zygote':這里表示要啟動zygote,如果沒有這一句表示zygote還沒啟動,則要檢查之前的initrc                 執行情況,文件系統mount情況

  • "SysServerInit_START"

啟動system_server

  • "system_server"

這里表示system_server有起來

  • "BOOT_Animation:END"

表示開機動畫正常結束,進入安卓

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM