android 啓動過程的分析

android 啓動過程的分析

本文翻譯自:https://thecyberfibre.com/android-boot-process/,來源於嘶吼: http://www.4hou.com/mobile/7373.html

基本核心過程

引導ROM >引導加載程序 >內核 > init過程> Zygote > Dalvik V M >系統服務器 >管理器
該過程是Android啓動的核心過程,下面讓我來詳細介紹每一步及其並行操作(如果有的話)。

引導ROM

一旦Android操作系統開始運行,就會執行負責“Boot ROM”部分的代碼。起始代碼恰好是預定義的硬編碼位置,代碼將引導加載程序加載到RAM中並開始執行。

引導程序

雖然引導程序只是Android系統的一小部分,但卻非常重要。你可能已經聽說過OEM或製造商放置的某些限制和規則,而引導程序正是存儲所有這些“規則”的地方。一開始提到的“引導加載程序”的過程其實包括兩個階段:

第一階段:檢測RAM。引導加載程序檢測RAM並執行啓動第二步所需的應用程序。

第二步:設置。引導加載程序現在繼續設置網絡、低級內存管理和安全選項。
這一步對於執行內核至關重要。位於/ bootable / bootloader / legacy / usbloader的引導加載程序包含兩個非常重要的文件,即init.s和main.c。

init.s文件基本上負責的是初始化棧, 0和BSS段,然後繼續在main.c.中初始化call_main()。 main.c文件在並行創建Linux標籤的同時初始化硬件,特別是時間,控制檯和鍵盤。

內核

Android內核的初始化過程模仿的是Linux內核的初始化,當內核執行時,它將高速緩存,受保護的內存設置爲不同的加載驅動程序。當完成所有設置和調度驅動程序後,內核會在系統文件中查找init。

初始化過程

init過程是相當重要的一步,這一步,不僅會安裝/ sys和/ dev等目錄或分區,還會啓動init.rc腳本。 init進程位於/ init,而init.rc腳本位於/ rootdir。

Zygote 和Dalvil VM

Zygote是一個VM進程,會在系統啓動時啓動。它可以實現Dalvik VM的代碼共享,從而有助於把啓動時間降至最低。 Zygote還確保更低的內存佔用,使Dalvik VM不會消耗大量內存。此外,它還會初始化核心庫類。

Zygote加載過程的框架看起來與開頭概述的框架完全相同:

加載Zygote init類 > registerZygoteSocket() > preloadClasses() > preloadResources() >用戶看到啓動的動畫

系統服務器

在這一步,Zygote會要求一個新的過程,這樣以下的過程纔會啓動,處理和執行。

啓動電源管理器 >創建活動管理器 >啓動電話註冊表 >啓動包管理器 >將活動管理器服務設置爲系統進程 >啓動上下文管理器 >啓動系統聯繫人 >啓動電池服務 >啓動警報管理 >啓動 >傳感器服務 >啓動窗口管理器 >啓動藍牙服務 >啓動安裝服務 >啓動狀態欄服務 >啓動硬件服務 >啓動NetStat服務 >啓動連接服務 >啓動通知管理器 >啓動DeviceStorageMonitor服務 >啓動位置管理器 >啓動搜索服務 >啓動剪貼板服務 >啓動檢查服務 >啓動牆紙服務 >啓動音頻服務 >啓動HeadsetObserver >啓動AdbSettingsObserver >呈現到用戶眼前

分析

現在,啓動就已經全部完成,與此同時服務已啓動並運行,這時,你可能需要了解創建日誌的一些方法。

使用adb logca從啓動過程獲取日誌,你可以按照相應順序輸入以下命令:

adb logcat –d –b events | grep “boot”
adb logcat –d | grep preload“`

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章