Ek kaynaklar

Aşağıdaki kaynaklarda kod konumları, araçlar, test ve lisanslama hakkında ayrıntılı bilgi verilmektedir.

Sorgulanabilen kod konumu

Sorgulanabilen tedarikçi firma arayüzü nesnesinin kodu system/libvintf alanına gider.

El yazısı manifest dosyaları ve uyumluluk matrisleri zor olabilir. Başlangıç noktası olarak kullanabileceğiniz bir şablon manifest/uyumluluk matrisi oluşturmak için aşağıdaki araçları kullanın.

LSHAL

LSHAL, hwservicemanager için kayıtlı tüm HAL'leri ve cihazdaki tüm geçiş uygulamaları (ör. android.hardware.foo@1.0-impl.so) listeleyen cihaz tarafında bir araçtır. Ayrıca listeye göre bir cihaz manifesti dosyası da oluşturabilir:

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

Aşağıdakileri göz önünde bulundurun:

  1. Bir paket hem hwservicemanager'e kayıtlıysa hem de geçiş HAL'si olarak bulunursa <transport>, hwbinder olarak ayarlanır.
  2. Manifest'e SELinux sürümü yazılmamış. Öğenin aşağıda açıklandığı gibi assemble_vintf aracılığıyla eklenmesi önerilir.
  3. Oluşturulan HAL manifest dosyası yanlış olabilir. Cihaz manifesti ile vendor.img'ün aslında sunduğu özellikler arasındaki tutarsızlıkları düzeltmek için manuel müdahale gerekir.

ASSEMBLE_VINTF

assemble_vintf, barındıran tarafında aşağıdakileri yapan bir araçtır:

  1. Bir uyumluluk matrisinin veya manifest dosyasının geçerli olup olmadığını doğrular.
  2. Derleme sırasında mevcut manifestlere/uyumluluk matrislerine değişkenler ekler ve cihaza yüklenmesi gereken yeni bir dosya oluşturur.
  3. Oluşturulan dosya ile çifti arasındaki uyumluluğu kontrol eder.
  4. Bir manifest dosyası sağlanırsa isteğe bağlı olarak manifest dosyasıyla uyumlu bir şablon uyumluluk matrisi oluşturur.

Örnek: Bir çerçeve manifest dosyasından cihaz uyumluluk matrisi oluşturma

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

Tüm HAL'lerin optional="true" olarak ayarlandığını unutmayın.

Örnek: Bir cihaz manifest dosyasından iskelet çerçeve uyumluluk matrisi oluşturma

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

Tüm HAL'lerin optional="true" olarak ayarlandığını unutmayın.

Örnek: Değişkenlerden cihaz manifest XML dosyaları oluşturma

Derleme sırasında device/manufacturer/device_name/BoardConfig.mk içinde aşağıdaki değişkenler tanımlanmışsa:

# 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

Ardından, cihaz manifesti XML dosyaları oluşturmak için aşağıdaki komutlar (derleme sisteminde, uygulama ayrıntılarını atlayacak şekilde değiştirilmiş şekilde) yürütülür:

# 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 nesnesi, çalışma zamanında tedarikçi manifestlerini ve ODM manifestlerini cihaz manifesti olarak birleştirir. Ayrıntılar için Cihaz manifesti bölümüne bakın.

Örnek: Değişkenlerden cihaz uyumluluk matrisi XML dosyaları oluşturma

Derleme sırasında device/manufacturer/device_name/BoardConfig.mk içinde aşağıdaki değişkenler tanımlanmışsa:

# 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

Ardından, cihaz uyumluluk matrisi XML dosyalarını oluşturmak için aşağıdaki komutlar (derleme sisteminde, uygulama ayrıntılarını atlayacak şekilde değiştirilmiş şekilde) yürütülür:

# 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 nesnesi, çalışma zamanında cihaz uyumluluk matrisi olarak tedarikçi uyumluluk matrisini kullanır. Ayrıntılar için Cihaz uyumluluk matrisini inceleyin.

Örnek: Değişkenlerden çerçeve manifest XML dosyaları oluşturma

device/manufacturer/device_name/BoardConfig.mk politikasında aşağıdaki değişkenler tanımlanabilir:

# 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

Çerçeve manifest XML dosyaları oluşturmak için aşağıdaki komutlar (derleme sisteminde, uygulama ayrıntılarını atlayacak şekilde değiştirilmiş şekilde) yürütülür:

# 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 nesnesi, çalışma zamanında sistem manifestini, sistem manifesti parçalarını, ürün manifestini ve ürün manifesti parçalarını çerçeve manifesti olarak birleştirir. Ayrıntılar için Çerçeve manifestini inceleyin.

Örnek: Değişkenlerden çerçeve uyumluluk matrisi XML dosyaları oluşturma

Ürün FCM'sini ve cihaza özel sistem FCM'sini tanımlamak için device/manufacturer/device_name/BoardConfig.mk içinde aşağıdaki değişkenler tanımlanabilir:

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 modülleriyle yüklenmelidir. Ürün FCM'si Soong modülleriyle de yüklenebilir. Bu yöntem kullanılıyorsa DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE değerini tanımlamayın. Ayrıca, Soong modülleriyle birden fazla ürün FCM sürümü ve system_ext FCM sürümü yüklenebilir. Aşağıdakileri tanımlayın:

  • device/manufacturer/device_name/Android.bp içinde bir modül tanımlayın. Örneğin (ürün FCM'si için system_ext yerine ürün yazın):
    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",
        ],
    }
  • Modülü device/manufacturer/device_name/device.mk'e yükleyin. Örnek:
    PRODUCT_PACKAGES += system_ext_compatibility_matrix.xml

Çerçeve uyumluluk matrisi XML dosyaları oluşturmak için aşağıdaki komutlar (derleme sisteminde, uygulama ayrıntılarını atlayacak şekilde değiştirilmiş şekilde) yürütülür:

# 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 nesnesi, çalışma zamanında sistem uyumluluk matrislerinin ve ürün uyumluluk matrislerinin bir alt kümesini çerçeve uyumluluk matrisi olarak birleştirir. Ayrıntılı bilgi için Çerçeve uyumluluk matrisini inceleyin.

Örnek: Bağlantı parçalarından tedarikçi firma manifestini oluşturma

Derleme sırasında birden fazla tedarikçi manifesti parçası gruplandırılabilir. Örnek:

<!-- 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

Ardından assemble_vintf, BOARD_ENABLE_IR tanımlanmışsa IR HAL'i tedarikçi firma manifest dosyasına ekler, tanımlanmamışsa atlar.BOARD_ENABLE_IR Tedarikçi manifestini oluşturmak için aşağıdaki komutlar (uygulama ayrıntılarını atlayacak şekilde değiştirilmiş) yürütülür:

# 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

Ayrıntılar için bkz.:

assemble_vintf --help

Test

platform/system/libvintf projesi, serileştirme, seri bozma ve uyumluluk kontrolü için GTest'i kullanır.

Lisanslama

  • Nesneyi XML'e/XML'den serileştirmek/seri dışı bırakmak için tinyxml2 (harici/tinyxml2). BSD benzeri lisans.
  • policydb sürümünü almak için libselinux (external/selinux/libselinux). Kamu alanı lisansı.
  • /proc/config.gz sıkıştırmasını açmak için libz (harici/zlib). BSD benzeri lisans.
  • libvintf projesi, Apache 2.0 lisansını (uygun MODULE_LICENSE_APACHE2 ve NOTICE dosyalarıyla) kullanır.