管理啟動時間

開機程序是一系列動作,從開機 ROM 開始,接著是系統啟動載入程式、核心、InitZygote系統伺服器 (粗體字代表 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

  • 系統伺服器。只啟動所需的系統服務。

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 都移至核心啟動映像檔,並將所有依附程式庫靜態連結。