【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系統啟動自動開啟mtklogAndroid
- Android系統啟動流程(四)Launcher啟動過程與系統啟動流程Android
- Android 系統原始碼-1:Android 系統啟動流程原始碼分析Android原始碼
- Android系統啟動流程(二)解析Zygote程式AndroidGo
- Android系統原始碼分析--Service啟動流程Android原始碼
- Android系統原始碼分析–Service啟動流程Android原始碼
- 梳理一下Android 系統啟動流程Android
- 圖解 Android 系列(一)揭祕 Android 系統啟動過程圖解Android
- Android小知識-深入淺出Android系統啟動流程(上)Android
- Android小知識-深入淺出Android系統啟動流程(下)Android
- Android系統原始碼分析--Activity啟動過程Android原始碼
- 【系統之音】Android程式的建立及啟動簡述Android
- Android系統原始碼分析–Zygote和SystemServer啟動過程Android原始碼GoServer
- (連載)Android 8.0 : 系統啟動流程之init程式(一)Android
- (連載)Android 8.0 : 系統啟動流程之init程式(二)Android
- Android 系統開發_啟動階段篇 — 深入鑽研 SystemServerAndroidServer
- Android 系統開發_啟動階段篇 — 深入鑽研 initAndroid
- android開啟系統聯絡人介面Android
- 直播系統搭建,簡單實現Android應用的啟動頁Android
- 系統的啟動流程
- 基於APK加速啟動時間的Android系統資源優化APKAndroid優化
- 3.1.5.8 隨系統啟動自動啟動資料庫資料庫
- Android啟動模式Android模式
- 《10分鐘剖析》系統啟動2——啟動zygoteGo
- Linux系統啟動過程Linux
- 修改yocto系統啟動logoGo
- 使用 flutter 啟動系統桌面Flutter
- mac系統如何啟動mysqlMacMySql
- 【Android系統】Android系統架構簡介Android架構
- 征服Android面試官路漫漫(四):5 張圖帶你搞懂Android系統啟動的核心流程Android面試
- FlutterEngin啟動流程&androidFlutterAndroid
- Android ContentProvider 啟動分析AndroidIDE
- Android LocationManagerService啟動(一)Android
- SpringBoot系統學習 - 啟動篇Spring Boot
- linux系統開機啟動流程Linux
- 標題:Windows系統啟動流程Windows
- centos 讓 mysql 隨系統啟動CentOSMySql