引導過程是從引導 ROM 開始的一系列操作,然後是引導程式、核心、 Init 、 Zygote和系統伺服器(粗體表示 Android 特定的引導過程)。在汽車專用的啟動過程中,後視攝影機 (RVC) 等早期服務必須在核心啟動期間啟動。
命令 | 成分 | 安卓 | 安卓汽車 |
---|---|---|---|
1 | 引導ROM | 將引導程式的第一階段載入到內部 RAM 中。 | |
2 | 引導程式 | 初始化記憶體、驗證安全性並載入核心。 | |
3 | 核心 | 設定中斷控制器、記憶體保護、快取和調度;啟動使用者空間進程。 | 後視攝影機 (RVC)進程在核心啟動初期啟動。進程啟動後,VMCU 的 GPIO 觸發 RVC 在顯示幕上顯示。 |
4 | 初始化進程 | 解析init.rc 腳本,掛載檔案系統,啟動 Zygote,啟動系統程序。 | Vehicle HAL (VHAL)在初始化階段作為核心服務的一部分啟動。可以根據ServiceManager移至較早的狀態;需要刪除對共享庫(例如 init)的依賴。 |
5 | 合子 | 為 Android 物件設定 Java 運行時和初始化記憶體。 | |
6 | 系統伺服器 | 系統中的第一個 Java 元件啟動核心 Android 服務。 | CarService在所有系統服務啟動後啟動。 |
優化啟動時間
若要縮短系統的啟動時間,請遵循以下準則:
核心。僅載入正在使用的模組並僅初始化正在使用的硬體元件。
init.rc
- 監視阻塞操作(服務與命令呼叫比較)。
- 僅啟動已使用的內容。
- 為服務設定正確的優先權。
合子。類別預先載入最佳化(指定要載入的類別清單)。
套件管理器
優化產品圖像以僅包含正在使用的 APK。
系統伺服器。僅啟動使用的系統服務。
為了幫助優化,Google 提供了以下工具:
使用
packages/services/Car/tools/bootanalyze/bootanalyze.py
來分析logcat和dmesg日誌。使用
packages/services/Car/tools/bootio/
記錄啟動期間進程的I/O。您必須使用特定標誌編譯核心(請參閱README.md
檔案)。
儘早開始服務
在啟動順序中,某些服務可能會在 Android 啟動之前啟動。
後視攝影機
後視攝影機(RVC)應該在核心中處理。當車輛換入倒車檔時,VMCU 通知本機內核進程,之後本機內核進程將 RVC 影像顯示到顯示器上。車輛 HAL 可以使用hardware/libhardware/include/hardware/vehicle_camera.h
控制 RVC。
車輛 HAL (VHAL)
某些系統可能需要在啟動序列的早期階段讀取和緩衝 CAN 資料(例如,車速、檔位狀態),同時等待使用者空間服務啟動(啟動序列稍後發生)。這種情況要求 VNS 以及 HAL 和 CAN 控制器很早就啟動,通常在幾秒鐘內啟動。
可以快速掛載
/system
系統可以簡單地啟動服務管理器,然後儘早啟動 VNS。無法快速掛載
/system
系統必須將服務管理員和 VNS 都移至核心啟動映像,並靜態連結所有依賴函式庫。