開機程序是一系列動作,從開機 ROM 開始,接著是系統啟動載入程式、核心、Init、Zygote 和系統伺服器 (粗體字代表 Android 專屬的開機程序)。在汽車專屬啟動程序中,後置鏡頭 (RVC) 等早期服務必須在核心啟動期間啟動。
訂購 | 元件 | Android | Android Automotive |
---|---|---|---|
1 | 開機 ROM | 將系統啟動載入程式的第一個階段載入內部 RAM。 | |
2 | 系統啟動載入程式 | 初始化記憶體、驗證安全性,並載入核心。 | |
3 | 核心 | 設定中斷控制器、記憶體保護、快取和排程;啟動使用者空間程序。 | 後視攝影機 (RVC) 程序會在核心啟動時提早啟動。程序啟動後,VMCU 的 GPIO 會觸發 RVC,以顯示在螢幕上。 |
4 | 初始化程序 | 剖析 init.rc 指令碼、掛載檔案系統、啟動 Zygote、啟動系統程序。 |
Vehicle HAL (VHAL) 會在初始化階段啟動,做為核心服務的一部分。可根據 ServiceManager 移至較早的狀態;需要移除對共用程式庫的依附元件 (例如 init)。 |
5 | 茲戈特 | 為 Android 物件設定 Java 執行階段和 init 記憶體。 | |
6 | 系統伺服器 | 系統中的第一個 Java 元件,可啟動核心 Android 服務。 | CarService 會在所有系統服務啟動後啟動。 |
改善啟動時間
如要縮短系統的啟動時間,請遵循下列指南:
-
Kernel. 僅載入使用中的模組,並只初始化使用中的硬體元件。
-
init.rc
- 請留意阻斷作業 (服務與指令叫用作業的比較)。
- 只啟用實際使用的功能。
- 為服務設定正確的優先順序。
-
合子。類別預先載入最佳化 (指定要載入的類別清單)。
-
Package Manager
-
請將產品圖片最佳化,只納入目前使用的 APK。
-
-
系統伺服器。只啟動所需的系統服務。
Google 提供下列工具,協助您進行最佳化:
-
使用
packages/services/Car/tools/bootanalyze/bootanalyze.py
分析 logcat 和 dmesg 記錄。 -
使用
packages/services/Car/tools/bootio/
在啟動期間記錄程序的 I/O。您必須使用特定旗標編譯核心 (請參閱README.md
檔案)。
提早啟動服務
在啟動序列中,部分服務可能會在 Android 啟動之前就啟動。
後視鏡頭
後視攝影機 (RVC) 應在核心中處理。當車輛切換為倒車時,VMCU 會通知原生核心程序,然後原生核心程序會將 RCV 圖像顯示在螢幕上。車輛 HAL 可使用 hardware/libhardware/include/hardware/vehicle_camera.h
控制 RVC。
車輛 HAL (VHAL)
在等待使用者空間服務啟動 (會在啟動序列的後期發生) 時,某些系統可能需要在啟動序列的早期階段讀取及緩衝 CAN 資料 (例如車速、變速箱狀態)。在這種情況下,VNS 和 HAL 與 CAN 控制器必須盡早啟動,通常在幾秒內。
-
可快速掛載
/system
的系統,只要在早期啟動服務管理工具和 VNS 即可。 -
無法快速掛載
/system
的系統必須將服務管理器和 VNS 都移至核心啟動映像檔,並將所有依附程式庫靜態連結。