【android 7.1.2】系統啟動
啟動概述
第一步:系統引導bootloader,即xxx_aboot.bin檔案
加電後,CPU將先執行 bootloader程式,然後bootloader首先會讀暫存器地址base + APP_DATA1的內容, 根據這個地址的值決定是否進入recovery模式或者其它模式。bootloader還會讀取MISC分割槽第一塊的內容, 決定進入recovery模式還是升級基帶Baseband Processor(BP)或做其它事情
而上述暫存器與分割槽的值是有按鍵觸發或者軟體觸發的。
- 開機按reset+返回鍵,系統進入recovery模式,載入recovery.img,recovery.img包含核心,基本的檔案系統,用於工程模式的燒寫
- 開機按Power,正常啟動系統,載入boot.img,boot.img包含核心,基本檔案系統,用於正常啟動機器(以下只分析正常啟動的情況)
第二步: 啟動核心kernel
- 原始碼:kernel/*
- 說明:kernel由bootloader載入
- 描述:核心啟動時,設定快取、被保護儲存器、計劃列表,載入驅動。當核心完成系統設定,它首先在系統檔案中尋找”init”檔案,然後啟動root程式或者系統的第一個程式。
第三步: 檔案系統(rootfs)及應用初始化(init)
- 原始碼:system/core/init/*
- 配置檔案:system/rootdir/init.rc,
- 說明:init是一個由核心啟動的使用者級程式,它按照init.rc中的設定執行:啟動服務(這裡的服務指linux底層服務,如adbd提供adb支援,vold提供SD卡掛載等),執行命令和按其中的配置語句執行相應功能
第四步: 重要的後臺程式zygote
- 原始碼:frameworks/base/cmds/app_main.cpp等
- 說明:zygote是一個在init.rc中被指定啟動的服務,該服務對應的命令是/system/bin/app_process
a) 建立Java Runtime,建立虛擬機器
b) 建立Socket接收ActivityManangerService的請求,用於Fork應用程式
c) 啟動SystemServer
第五步: 系統服務system server
- 原始碼:frameworks/base/services/java/com/android/server/SystemServer.java
- 說明:被zygote啟動,通過System Manager管理android的服務(這裡的服務指frameworks/base/services下的服務,如衛星定位服務,剪下板服務等)
第六步:桌面launcher
- 原始碼:ActivityManagerService.java為入口,packages/apps/launcher*實現
詳細的程式碼可以參考基於android7.1分析android啟動過程
後續補充程式碼view
相關文章
- Android 系統啟動流程Android
- Android系統啟動流程(四)Launcher啟動過程與系統啟動流程Android
- Android系統啟動自動開啟mtklogAndroid
- Android 系統啟動過程Android
- android系統啟動之PMS啟動原始碼解析Android原始碼
- Android系統啟動過程剖析Android
- android重新啟動應用程式和重新啟動系統 .Android
- Android 系統原始碼-1:Android 系統啟動流程原始碼分析Android原始碼
- Android系統啟動流程(三)解析SyetemServer程式啟動過程AndroidServer
- Android系統啟動流程(二)解析Zygote程式AndroidGo
- Android系統原始碼分析–Service啟動流程Android原始碼
- 梳理一下Android 系統啟動流程Android
- Android系統啟動流程(一)解析init程式Android
- Android系統原始碼分析--Service啟動流程Android原始碼
- Android系統原始碼分析--Activity啟動過程Android原始碼
- Android系統原始碼分析--Process啟動過程Android原始碼
- Android系統啟動:init程式與init語言Android
- 系統啟動, init
- 圖解 Android 系列(一)揭祕 Android 系統啟動過程圖解Android
- Android小知識-深入淺出Android系統啟動流程(上)Android
- Android小知識-深入淺出Android系統啟動流程(下)Android
- 【系統之音】Android程式的建立及啟動簡述Android
- oracle 隨系統開啟,自動啟動Oracle
- 系統的啟動流程
- Android系統原始碼分析–Zygote和SystemServer啟動過程Android原始碼GoServer
- (連載)Android 8.0 : 系統啟動流程之init程式(二)Android
- (連載)Android 8.0 : 系統啟動流程之init程式(一)Android
- (連載)Android 8.0 : 系統啟動流程之Linux核心AndroidLinux
- Android系統原始碼分析--Zygote和SystemServer啟動過程Android原始碼GoServer
- Android開啟系統設定Android
- 3.1.5.8 隨系統啟動自動啟動資料庫資料庫
- Android 系統開發_啟動階段篇 — 深入鑽研 SystemServerAndroidServer
- Android 系統開發_啟動階段篇 — 深入鑽研 initAndroid
- Android系統程式Zygote啟動過程的原始碼分析(3)AndroidGo原始碼
- 《10分鐘剖析》系統啟動2——啟動zygoteGo
- 使用 flutter 啟動系統桌面Flutter
- mac系統如何啟動mysqlMacMySql
- 啟動 HP-UX 系統UX