Android系統(tǒng)啟動(dòng)流程

一、啟動(dòng)電源以及系統(tǒng)啟動(dòng)

  • 當(dāng)電源按下時(shí)引導(dǎo)芯片代碼從預(yù)定義的地方(固化在ROM)開(kāi)始執(zhí)行,加載引導(dǎo)程序BootLoader到RAM,然后執(zhí)行。

二、引導(dǎo)程序BootLoader

  • 引導(dǎo)程序BootLoader是在Android操作系統(tǒng)開(kāi)始運(yùn)行前的一個(gè)小程序,它的主要作用是把系統(tǒng)OS拉起來(lái)并運(yùn)行。

三、Linux內(nèi)核啟動(dòng)

  • 當(dāng)內(nèi)核啟動(dòng),設(shè)置緩存、被保護(hù)存儲(chǔ)器、計(jì)劃列表、加載驅(qū)動(dòng)。在內(nèi)核完成系統(tǒng)設(shè)置后,它首先在系統(tǒng)文件中尋找init.rc(啟動(dòng)腳本)文件,并啟動(dòng)init進(jìn)程
    注:init.rc是一個(gè)非常重要的配置文件,它是由Android初始化語(yǔ)言(Android Init Language)編寫(xiě)的腳本,這種語(yǔ)言主要包含五種類型語(yǔ)句:Action、Command、Service、Option和Import。在Android8.0中對(duì)init.rc文件進(jìn)行了拆分,每個(gè)服務(wù)對(duì)應(yīng)一個(gè)rc文件。

四、init進(jìn)程啟動(dòng)

  • init進(jìn)程是Android系統(tǒng)中用戶空間的第一個(gè)進(jìn)程,進(jìn)程號(hào)為1,是Android系統(tǒng)啟動(dòng)流程中一個(gè)關(guān)鍵的步驟。
  • init進(jìn)程做的工作比較多,主要用來(lái)創(chuàng)建和掛載啟動(dòng)所需的文件目錄、初始化和啟動(dòng)屬性服務(wù)、啟動(dòng)Zygote進(jìn)程。
    4.1 Zygote
    • 在Android系統(tǒng)中,DVM和ART、應(yīng)用程序進(jìn)程以及運(yùn)行系統(tǒng)的關(guān)鍵服務(wù)的SystemServer進(jìn)程都是由Zygote進(jìn)程來(lái)創(chuàng)建的,我們稱它為孵化器。它通過(guò)fock的形式來(lái)創(chuàng)建應(yīng)用程序進(jìn)程和SystemServer進(jìn)程,由于Zygote進(jìn)程在啟動(dòng)時(shí)會(huì)創(chuàng)建DVM或者ART,因此通過(guò)fock而創(chuàng)建的應(yīng)用程序進(jìn)程和SystemServer進(jìn)程可以在內(nèi)部獲取一個(gè)DVM或者ART的實(shí)例副本。
    • Zygote進(jìn)程是在init進(jìn)程啟動(dòng)時(shí)創(chuàng)建的,起初Zygote進(jìn)程的名稱并不是叫"zygote",而是叫"app_process",這個(gè)名稱是在Android.mk中定義的,Zygote進(jìn)程啟動(dòng)后,Linux系統(tǒng)下的pctrl系統(tǒng)會(huì)調(diào)用app_process,將其名稱換成了"zygote"。
  • 從Android5.0開(kāi)始,Android開(kāi)始支持64位程序,Zygote也就有了32位和64位的區(qū)別,分別對(duì)用不同的腳本:init.zygote32.rc、init.zygote32_64.rc、init.zygote64.rc、init.zygote64_32.rc
    4.2 Zygote進(jìn)程啟動(dòng)過(guò)程
    • 創(chuàng)建AppRuntime并調(diào)用其start方法,啟動(dòng)Zygote進(jìn)程。
    • 創(chuàng)建Java虛擬機(jī)并為Java虛擬機(jī)注冊(cè)JNI方法。
    • 通過(guò)JNI調(diào)用ZygoteInit的main函數(shù)進(jìn)入Zygote的Java框架層。
    • 通過(guò)registerZygoteSocket方法創(chuàng)建服務(wù)器端Socket,并通過(guò)runSelectLoop方法等待AMS的請(qǐng)求來(lái)創(chuàng)建新的應(yīng)用程序進(jìn)程。
    • 啟動(dòng)SystemServer進(jìn)程。
    4.3 SystemServer進(jìn)程
    • 啟動(dòng)Binder線程池,這樣就可以與其他進(jìn)程進(jìn)行通信。
    • 創(chuàng)建SystemServiceManager,其用于對(duì)系統(tǒng)的服務(wù)進(jìn)行創(chuàng)建、啟動(dòng)和生命周期管理。
    • 啟動(dòng)各種系統(tǒng)服務(wù)(引導(dǎo)服務(wù)、核心服務(wù)、其他服務(wù))。

五、Launcher啟動(dòng)

  • 通俗來(lái)講Launcher就是Android系統(tǒng)的桌面,它的作用主要有一下兩點(diǎn):
    • 作為Android系統(tǒng)的啟動(dòng)器,用于啟動(dòng)應(yīng)用程序。
    • 作為Android系統(tǒng)的桌面,用于顯示和管理應(yīng)用程序的快捷圖標(biāo)或者其他桌面組件。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容