追加リソース

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

次のリソースでは、コードの場所、ツール、テスト、およびライセンスに関する詳細を提供します。

クエリ可能なコードの場所

クエリ可能なベンダー インターフェイス オブジェクトのコードは、 system/libvintfに移動します。

手書きのマニフェスト ファイルと互換性マトリックスは難しい場合があります。次のツールを使用して、ボイラープレート マニフェスト/互換性マトリックスを生成して開始します。

LSHAL

LSHAL は、 hwservicemanagerに登録されているすべての HAL と、デバイスで使用可能なすべてのパススルー実装 (例: android.hardware.foo@1.0-impl.so ) を一覧表示するデバイス側のツールです。リストに基づいてデバイス マニフェストファイルを生成することもできます。

adb shell su 0 /system/bin/lshal --init-vintf

次の点に注意してください。

  1. パッケージがhwservicemanagerに登録され、パススルー HAL として検出された場合、 <transport>hwbinderに設定されます。
  2. SELinux バージョンはマニフェストに書き込まれません。以下で説明するように、要素はassemble_vintfを介して注入されることをお勧めします。
  3. 生成された HAL マニフェスト ファイルは不正確である可能性があります。デバイス マニフェストとvendor.imgが実際に提供するものとの間の不一致を修正するには、人間の注意が必要です。

ASSEMBLE_VINTF

assemble_vintfは、次のようなホスト側ツールです。

  1. 互換性マトリックスまたはマニフェスト ファイルが有効であることを確認します。
  2. ビルド時に利用可能なマニフェスト/互換性マトリックスに変数を挿入し、デバイスにインストールする必要がある新しいファイルを生成します。
  3. 生成されたファイルとそのデュアルの間の互換性をチェックします。
  4. マニフェスト ファイルが指定されている場合、オプションで、マニフェスト ファイルと互換性のあるボイラープレート互換性マトリックスを生成します。

例:フレームワーク マニフェスト ファイルからデバイス互換性マトリックスを生成する

assemble_vintf -m --hals-only \
    -i system/libhidl/manifest.xml \
    -o device/manufacturer/device_name/compatibility_matrix.xml

すべての HAL がoptional="true"に設定されていることに注意してください。

例:デバイス マニフェスト ファイルからスケルトン フレームワーク互換性マトリックスを生成する

assemble_vintf -m --hals-only \
    -i device/foo/bar/manifest.xml \
    -o path/to/place/output/compatibility_matrix.xml

すべての HAL がoptional="true"に設定されていることに注意してください。

例:変数からデバイス マニフェスト XML ファイルを生成する

ビルド時に、次の変数がdevice/manufacturer/device_name/BoardConfig.mkで定義されている場合:

# Vendor manifest is named DEVICE_MANIFEST_FILE for legacy reasons.
DEVICE_MANIFEST_FILE := \
    device/manufacturer/device_name/vendor_manifest.xml
ODM_MANIFEST_FILES := \
    device/manufacturer/device_name/odm_manifest.xml
ODM_MANIFEST_SKUS := sku1 sku2
ODM_MANIFEST_SKU1_FILES := \
    device/manufacturer/device_name/odm_manifest_sku1.xml
ODM_MANIFEST_SKU2_FILES := \
    device/manufacturer/device_name/odm_manifest_sku2.xml

次に、次のコマンドが実行され (ビルド システムで、実装の詳細を省略するように変更されています)、デバイス マニフェスト XML ファイルが生成されます。

# vendor manifest; only when DEVICE_MANIFEST_FILE is set
BOARD_SEPOLICY_VERS=$(BOARD_SEPOLICY_VERS) assemble_vintf \
    $(addprefix,-i ,$(DEVICE_MANIFEST_FILE)) \
    -o $(TARGET_OUT_VENDOR)/etc/vintf/manifest.xml

# ODM manifests
assemble_vintf \
    $(addprefix,-i ,$(ODM_MANIFEST_FILES)) \
    -o $(TARGET_OUT_ODM)/etc/vintf/manifest.xml

# ODM manifests for each sku
assemble_vintf \
    $(addprefix,-i ,$(ODM_MANIFEST_SKU1_FILES)) \
    -o $(TARGET_OUT_ODM)/etc/vintf/manifest_sku1.xml
assemble_vintf \
    $(addprefix,-i ,$(ODM_MANIFEST_SKU2_FILES)) \
    -o $(TARGET_OUT_ODM)/etc/vintf/manifest_sku2.xml

実行時に、VINTF オブジェクトはベンダー マニフェストと ODM マニフェストをデバイス マニフェストとして結合します。詳細については、デバイス マニフェストを参照してください。

例:変数からデバイス互換性マトリックス XML ファイルを生成する

ビルド時に、次の変数がdevice/manufacturer/device_name/BoardConfig.mkで定義されている場合:

# vendor compatibility matrix is named DEVICE_MATRIX_FILE for legacy reasons.
DEVICE_MATRIX_FILE := \
    device/manufacturer/device_name/vendor_compatibility_matrix.xml \
    device/manufacturer/device_name/vendor_compatibility_matrix_additional.xml

次に、次のコマンドが実行され (ビルド システムで、実装の詳細を省略するように変更されています)、デバイス互換性マトリックス XML ファイルが生成されます。

# vendor compatibility matrix; only when DEVICE_MATRIX_FILE is set
assemble_vintf \
    $(addprefix,-i ,$(DEVICE_MATRIX_FILE)) \
    -o $(TARGET_OUT_VENDOR)/etc/vintf/compatibility_matrix.xml

実行時に、VINTF オブジェクトはベンダー互換性マトリックスをデバイス互換性マトリックスとして使用します。詳細については、デバイスの互換性マトリックスを参照してください。

例:変数からフレームワーク マニフェスト XML ファイルを生成する

次の変数は、 device/manufacturer/device_name/BoardConfig.mkで定義できます。

# Device-specific system manifest is named DEVICE_FRAMEWORK_MANIFEST_FILE for legacy reasons
DEVICE_FRAMEWORK_MANIFEST_FILE := \
    device/manufacturer/device_name/device_system_manifest.xml

# Product manifest
PRODUCT_MANIFEST_FILES := \
    device/manufacturer/device_name/product_manifest.xml

次のコマンドが実行され (ビルド システムでは、実装の詳細を省略するように変更されています)、フレームワーク マニフェスト XML ファイルが生成されます。

# system manifest
assemble_vintf \
    -i system/libhidl/vintfdata/manifest.xml \
    $(addprefix,-i ,$(DEVICE_FRAMEWORK_MANIFEST_FILE)) \
    -o $(TARGET_OUT)/etc/vintf/manifest.xml

# product manifest
assemble_vintf \
    $(addprefix,-i ,$(PRODUCT_MANIFEST_FILES)) \
    -o $(TARGET_OUT_PRODUCT)/etc/vintf/manifest.xml

実行時に、VINTF オブジェクトは、システム マニフェスト、システム マニフェスト フラグメント、製品マニフェスト、および製品マニフェスト フラグメントをフレームワーク マニフェストとして結合します。詳細については、フレームワーク マニフェストを参照してください。

例:変数からフレームワーク互換性マトリックス XML ファイルを生成する

次の変数をdevice/manufacturer/device_name/BoardConfig.mkで定義して、製品 FCM およびデバイス固有のシステム FCM を定義できます。

DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE := \
    device/manufacturer/device_name/product_compatibility_matrix.xml
# Device-specific system compatibility matrix is named
# DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE for legacy reasons.
DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE := \
    device/manufacturer/device_name/device_system_compatibility_matrix.xml

system_ext FCM は Soong モジュールと共にインストールする必要があります。製品 FCM は、Soong モジュールと一緒にインストールすることもできます。この方法を使用する場合は、 DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILEを定義しないでください。さらに、複数の製品 FCM バージョンと system_ext FCM バージョンが Soong モジュールとともにインストールされる場合があります。以下を定義します。

  • device/manufacturer/device_name/Android.bpでモジュールを定義します。例 (system_ext を製品 FCM の製品に置き換えます):
    vintf_compatibility_matrix {
        name: "system_ext_compatibility_matrix.xml",
        stem: "compatibility_matrix.xml",
        system_ext_specific: true,
        // product_specific: true, // for product FCM
        srcs: [
            "system_ext_compatibility_matrix.xml",
        ],
    }
    
  • モジュールをdevice/manufacturer/device_name/device.mkにインストールします。例:
    PRODUCT_PACKAGES += system_ext_compatibility_matrix.xml
    

次のコマンドが実行され (ビルド システムで、実装の詳細を省略するように変更されています)、フレームワーク互換性マトリックス XML ファイルが生成されます。

# common system compatibility matrix for each FCM version
BOARD_SEPOLICY_VERS=$(BOARD_SEPOLICY_VERS) \
POLICYVERS=$(POLICYVERS) \
BOARD_AVB_VBMETA_VERSION=$(BOARD_AVB_VBMETA_VERSION)
assemble_vintf \
    -i hardware/interfaces/compatibility_matrices/compatibility_matrix.empty.xml
    $(addprefix,-i ,$(DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE)) \
    -o $(TARGET_OUT)/etc/vintf/compatibility_matrix.device.xml

# framework compatibility matrixes at each FCM version
assemble_vintf
    -i hardware/interfaces/compatibility_matrices/compatibility_matrix.{level}.xml \
    -o $(TARGET_OUT)/etc/vintf/compatibility_matrix.{level}.xml \
    --kernel=...

# product framework compatibility matrix; only when
# DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE is set or when the Soong module for
# product FCM is defined
assemble_vintf
    -i $(DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE)
    -o $(TARGET_OUT_PRODUCT)/etc/vintf/compatibility_matrix.xml

# system_ext framework compatibility matrix; only when the Soong module for
# system_ext FCM is defined
assemble_vintf
    -i <srcs for the soong module>
    -o $(TARGET_OUT_SYSTEM_EXT)/etc/vintf/compatibility_matrix.xml

実行時に、VINTF オブジェクトは、システム互換性マトリックスと製品互換性マトリックスのサブセットをフレームワーク互換性マトリックスとして結合します。詳細については、フレームワークの互換性マトリックスを参照してください。

例:フラグメントからベンダー マニフェストを生成する

ビルド時に複数のベンダー マニフェスト フラグメントをバンドルできます。例えば:

<!-- device/manufacturer/device_name/manifest_common.xml -->
<manifest version="1.0" type="device">
    <!-- common HALs here -->
</manifest>
<!-- device/manufacturer/device_name/ir.xml -->
<manifest version="1.0" type="device">
    <hal>
        <name>android.hardware.ir</name>
        <version>1.0</version>
        <!-- other fields -->
    </hal>
</manifest>
# device/manufacturer/device_name/BoardConfig.mk
DEVICE_MANIFEST_FILE := device/manufacturer/device_name/manifest_common.xml
ifdef BOARD_ENABLE_IR
    DEVICE_MANIFEST_FILE += device/manufacturer/device_name/ir.xml
endif

次に、 BOARD_ENABLE_IRは、 assemble_vintfが定義されている場合は IR HAL をベンダー マニフェストに追加し、 BOARD_ENABLE_IRが定義されていない場合は省略します。次のコマンド (実装の詳細を省略するように変更) を実行して、ベンダー マニフェストを生成します。

# if BOARD_ENABLE_IR is defined
BOARD_SEPOLICY_VERS=10000.0 assemble_vintf \
    -i device/manufacturer/device_name/manifest_common.xml:device/manufacturer/device_name/ir.xml \
    -o $(TARGET_OUT_VENDOR)/manifest.xml

# if BOARD_ENABLE_IR is not defined
BOARD_SEPOLICY_VERS=10000.0 assemble_vintf \
    -i device/manufacturer/device_name/manifest_common.xml \
    -o $(TARGET_OUT_VENDOR)/manifest.xml

詳細については、次を参照してください。

assemble_vintf --help

テスト

platform/system/libvintfプロジェクトは、シリアライゼーション、デシリアライゼーション、および互換性チェックにGTestを使用します。

ライセンス

  • オブジェクトを XML との間でシリアライズ/デシリアライズするためのtinyxml2 (external/tinyxml2)。 BSD ライクなライセンス。
  • libselinux (external/selinux/libselinux)。パブリック ドメイン ライセンス。
  • libzを解凍するための/proc/config.gz (external/zlib)。 BSD ライクなライセンス。
  • libvintfプロジェクトは Apache 2.0 ライセンスを使用します (適切な MODULE_LICENSE_APACHE2 および NOTICE ファイルと共に)。