梳理一下Android 系統啟動流程

奔跑的土掉渣發表於2020-12-20

Android系統是一款基於Linux的開源系統,系統的架構劃分為:系統應用層、Java API Framework層、native C/C++庫和Android 執行時、硬體抽象層、和Linux核心層。

各層級之間的銜接關係可以以程式的視角來理解。如下圖,

  • 當按下手機的開機鍵,會引導晶片從固化在ROM利的預設程式碼開始執行,載入載入程式到RAM

  • 然後啟動Android系統的載入程式Boot Loader
    載入程式的主要作用是:1 檢測外部的RAM;2 載入程式設定網路、記憶體等。

  • 進入核心層
    ①啟動swapper程式(pid = 0,又叫idle程式,是系統初始化過程中開創的第一個程式),用於初始化程式管理、記憶體管理,載入Display,Camer Driver,Binder Driver等工作。
    ②啟動kthreadd程式(pid = 2),是Liunx系統的核心程式,會建立核心工作執行緒kworkder,是所有核心程式的鼻祖
    pid:是程式號

  • 當kernel啟動過程中會建立init程式(pid = 1),init程式是使用者空間的第一個程式

  • init程式會啟動Zygote程式、serviceManager。Zygote程式是所有app的父程式

  • 接著Zygote程式fork出systemserver程式提供給所有app。
    圖片來自 http://gityuan.com/images/android-arch/android-boot.jpg
    圖片參考自 http://gityuan.com/images/android-arch/android-boot.jpg

相關文章