起動時間の管理

ブート プロセスは、ブート ROM から始まり、ブートローダー、カーネル、 InitZygote 、およびシステム サーバーが続く一連のアクションです (太字は 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

    • 操作のブロックに注意してください (サービスとコマンド呼び出しの比較)。
    • 使用するものだけを開始します。
    • サービスに正しい優先順位を設定します。
  • 受精卵。クラスのプリロードの最適化 (ロードするクラスのリストを指定します)。

  • パッケージマネージャー

  • システムサーバー。使用されるシステム サービスのみを開始します。

最適化を支援するために、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 の両方をカーネル ブート イメージに移動し、すべての依存ライブラリを静的にリンクする必要があります。