Android Automotive OS(AAOS)は、trout という新しいプロダクトを通じて、VirtIO 標準に対応している環境にゲスト仮想マシン(VM)としてデプロイするためのサポートを提供するようになりました。trout は Cuttlefish 仮想リファレンス プラットフォームに基づいており、trout デバイス設定として利用できます。ユーザー空間のソースコードは device/google/trout にあります。以下の表に、trout で各サブシステムの仮想化に使用されるテクノロジーを示します。
| 機能 | テクノロジー |
|---|---|
| オーディオ コントロール HAL | vsock/gRPC |
| オーディオ HAL | virtio-snd |
| Bluetooth | virtio-console |
| Dumpstate HAL | vsock/gRPC |
| 拡張ビューシステム(EVS) | virtio-video |
| ガレージモード | vsock/gRPC |
| グラフィック | virtio-gpu |
| グローバル ナビゲーション衛星システム(GNSS) | virtio-console |
| センサー HAL 2.0 | virtio-scmi and IIO |
| タッチスクリーン入力 | virtio-input |
| 車両 HAL | vsock/gRPC |
trout の拡張
trout は、新しい車載インフォテインメント(IVI)Android ターゲットを作成する際のベースとして使用できます。ビルド インフラストラクチャは、拡張とカスタマイズができるように設計されています。次に例を示します。
# Inherit trout-arm64 default values and settings
$(call inherit-product, device/google/trout/aosp_trout_arm64.mk)
# Customize HALs as needed
LOCAL_VHAL_PRODUCT_PACKAGE := vendor.oem.vhal@2.0-service
LOCAL_AUDIO_PRODUCT_PACKAGE := vendor.oem.audio@6.0-impl
# Configure SELinux policy
BOARD_SEPOLICY_DIRS += device/oem/car/sepolicy/vendor/oem
# Configure properties
LOCAL_DUMPSTATE_PROPERTIES := \
ro.vendor.dumpstate.server.cid=22 \
ro.vendor.dumpstate.server.port=406 \
ro.vendor.helpersystem.log_loc=/data/dumpstate
[... and more as needed ...]
複数の Android HAL を個別にカスタム実装に置き換えることができます。デフォルト実装は維持されますが、特定の構成パラメータは、ターゲット環境で適切な VM 間通信を確立するように調整されます。これらの HAL(車両 HAL、オーディオ コントロール HAL、Dumpstate HAL を含む)は、AAOS ゲストと基となる機能の実装を提供するホストシステムとの間の vsock 接続に基づく gRPC インターフェースによって実装されています。ベンダー プロパティとして適切な vsock 接続パラメータを指定して構成する必要があります。ソースコードは、設定とそのセマンティクスでプロパティが利用できる最終的なグラウンド トゥルースの役割を果たします。
trout のビルド
ユーザー空間のコンパイル
ユーザー空間をコンパイルするには:
- 以下のコマンドで、Android ソースツリーをダウンロードします。
repo init -u https://android.googlesource.com/platform/manifest -b main repo sync -j8
- 環境を構築します。
source build/envsetup.sh lunch aosp_trout_arm64-userdebug make -j24
カーネルのビルド
trout 1.1 の場合、カーネルのコードベースは AOSP で提供されています。trout カーネルは、アップストリームの ACK 5.10 と同じコードで構成され、VirtIO サブシステム用の trout 固有のモジュールが追加されています。
- カーネルのクローンを作成するには、次のコマンドを実行します。
repo init https://android.googlesource.com/kernel/manifest -b trout-android12-5.10 && repo sync
- カーネルをビルドするには、次のコマンドを実行します。
BUILD_CONFIG=common-modules/virtual-device/build.config.trout.coqos build/build.sh
ハイパーバイザ サプライヤーによっては、異なるカーネル設定が必要となる場合や、コンパイルを必要とする追加モジュールがある場合があります。具体的なガイダンスが提供されている場合は、それに沿うようにしてください。
コンプライアンス
AAOS がゲスト VM として実行される場合の目標は、フレームワークの観点から互換性のある Android デプロイを提供することです。ホスト側の問題は各実装の範囲であり、trout 1.1 の範囲外です。
trout 1.1 では、追加の xTS 検証を実施していません。trout 1.0 での CTS サポートについての以下の説明を引き続きご参照ください。
trout 1.0 では、CTS に関するいくつかの問題が残っています。次の CTS モジュールには、テストの失敗が含まれることがわかっています。
| CtsStagedInstallHostTestCases CtsRollbackManagerHostTestCases CtsVideoTestCases CtsHostsideNetworkTests CtsActivityManagerBackgroundActivityTestCases CtsAdbHostTestCases CtsNativeHardwareTestCases CtsContentTestCases CtsCarHostTestCases CtsOsTestCases CtsStatsdHostTestCases CtsVoiceInteractionTestCases CtsViewTestCases CtsCameraTestCases CtsLocationGnssTestCases CtsGraphicsTestCases CtsIncidentHostTestCases CtsInstallHostTestCases CtsNativeVerifiedBootTestCases CtsNetTestCases |
CtsWindowManagerDeviceTestCases CtsMediaStressTestCases CtsAppTestCases CtsUsbTests CtsAutoFillServiceTestCases CtsDisplayTestCases CtsMediaTestCases CtsDeqpTestCases CtsDumpsysHostTestCases CtsOpenGLTestCasesCtsLibcoreTestCases CtsSecurityHostTestCases CtsInputMethodTestCases CtsStatsdAtomHostTestCases CtsPermission4TestCases CtsNNAPIBenchmarkTestCases CtsSimpleperfTestCases CtsAccessibilityTestCases CtsAppSecurityHostTestCases CtsKeystoreTestCases |
次の CTS-V 領域には、テストの失敗が含まれることがわかっています。
| 自動車ランチャー テスト Bluetooth Low Energy(BLE)広告主テスト ストリーミング動画品質検証ツール Bluetooth HID デバイステスト Hifi 超音波マイクテスト Hifi 超音波スピーカー テスト |
デバイスのロック解除が必要なテスト ダイナミック センサー検出テスト オフボディ センサーのテスト 大きなモーション テスト 音声出力ルーティング通知テスト ネットワーク リクエストまたは提案のテスト |
リリースノート
trout 1.1 には、次の既知の問題があります。
troutのユーザービルドは利用できません。システムは-userdebugとしてビルドされるため、一部の CTS テストに影響する可能性があります。- Android 確認付きブート(AVB)はサポートされていません。
- セキュア環境や NNHAL など、一部の Android サブシステムは使用できない場合があります。
- 一般に、ゲスト ネットワークへのアクセスは、仮想化 Wi-Fi アダプターと
virtio-netトンネルを使用して提供されます。ホスト側の接続は、特定のハイパーバイザ デプロイに応じて異なります。 - 実装によっては、Bluetooth 機能が制限される、または提供されない場合があります。
- VHAL イベント挿入は、一部のセンサーで機能しない場合があります。
- 大量のワークロードが原因で、音声の再生が途切れる場合があります。
- 一部の実装では、AAOS ゲストの adb 再起動によりシステム全体が再起動される場合があります。
- STS が原因でシステムが不安定になり、再起動が必要になる場合があります。
詳細については、trout の特定のデプロイに関するパートナー リリースノートをご覧ください。