標籤:

Android啟動過程的分析

大多數智能手機用戶使用的Android操作系統的功能和操作過程都比較複雜。

對於Android操作系統的初學者來說,引導過程,只不過是終端用戶的一些花哨的圖像和動畫。但當你閱讀完這篇文章後,你可能會打破原來對引導過程的狹隘思維。

基本核心過程

引導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和Dalvik 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```

本文翻譯自:thecyberfibre.com/andro,如若轉載,請註明來源於嘶吼: 4hou.com/mobile/7373.ht 更多內容請關注「嘶吼專業版」——Pro4hou

推薦閱讀:

如何看待「小紅書用戶信息遭大面積泄露:至少50人被騙,總額近90萬」這一事件?
俄羅斯黑客暗網出售勒索軟體服務(RaaS),價格低廉人人可用
微軟Office文檔中的DDE攻擊演示
懂技術的女人有多可怕系列 その一
從明年開始 FBI可任意控制你的電腦

TAG:信息安全 |