Ek kaynaklar

Aşağıdaki kaynaklarda kod konumları, araçlar, test, ve lisanslama.

Sorgulanabilir kod konumu

Sorgulanabilir tedarikçi firma arayüzü nesnesinin kodu, system/libvintf

El yazısı manifest dosyaları ve uyumluluk matrisleri zor olabilir. Şunu kullanın: aşağıdaki araçlardan yararlanarak bir ortak metin manifest/uyumluluk matrisi oluşturabilir var.

SHAL

LSHAL, kayıtlı tüm HAL'leri listeleyen hwservicemanager ve mevcut tüm geçiş reklamı uygulamaları (ör. android.hardware.foo@1.0-impl.so) . Ayrıca Aşağıdaki listeye dayalı bir cihaz manifest dosyası oluşturun:

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

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

  1. Bir paket hem hwservicemanager için kayıtlıysa hem de bulunursa geçiş HAL'si olarak <transport>, hwbinder.
  2. Manifest'e SELinux sürümü yazılmamış. Optimum kampanya öğesi, aşağıda açıklandığı gibi assemble_vintf aracılığıyla yerleştirilir.
  3. Oluşturulan HAL manifest dosyası yanlış olabilir. İnsanın dikkati manifest dosyası ile e-posta arasındaki vendor.img sağlar.

ASSEMBLE_VINTF

assemble_vintf, aşağıdakileri yapan bir ana makine tarafı aracıdır:

  1. Uyumluluk matrisinin veya manifest dosyasının geçerli olduğunu doğrular.
  2. Derleme sırasında kullanılabilen manifestlere/uyumluluk matrislerine değişkenler ekler zaman alır ve cihaza yüklenmesi gereken yeni bir dosya oluşturur.
  3. Oluşturulan dosya ile ikili dosya arasındaki uyumluluğu kontrol eder.
  4. Manifest dosyası sağlanırsa isteğe bağlı olarak bir ortak metin oluşturur. uyumluluk matrisi ile uyumlu olup olmadığını gösterir.

Örnek: Cihaz uyumluluğu oluşturma matrisi oluşturun.

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: İskelet çerçeve uyumluluğu oluşturma bir cihaz manifest dosyasından matris

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 aşağıdaki değişkenler device/manufacturer/device_name/BoardConfig.mk içinde tanımlı:

# 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 aşağıdaki komutlar yürütülür (derleme sisteminde, uygulamayı atlayacak şekilde ayrıntılar) kullanarak cihaz manifest XML dosyalarını oluşturabilirsiniz:

# 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

Çalışma zamanında VINTF nesnesi, tedarikçi firma manifestlerini ve ODM manifestlerini cihaz manifestini açın. Bkz. Cihaz manifesto'nu inceleyin.

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

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

# 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 aşağıdaki komutlar yürütülür (derleme sisteminde, uygulamayı atlayacak şekilde ayrıntılar) kullanarak cihaz uyumluluğu matrisi XML dosyaları oluşturun:

# 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

Çalışma zamanında VINTF nesnesi, tedarikçi firma uyumluluk matrisini cihaz uyumluluk matrisi. Bkz. Cihaz uyumluluk matrisini inceleyin.

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

Aşağıdaki değişkenler 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

Aşağıdaki komutlar yürütülür (derleme sisteminde, uygulamayı atlayacak şekilde ayrıntılarını) kullanarak çerçeve manifest XML dosyalarını oluşturabilirsiniz:

# 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

Çalışma zamanında, VINTF nesnesi sistem manifestini, sistem manifestini birleştirir parçalarını, ürün manifestini ve ürün bildirimi parçalarını çerçeve manifesti olarak sunar. Görüntüleyin Çerçeve manifesto'nu inceleyin.

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

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

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, Shortg modülleriyle birlikte yüklenmelidir. Ürün FCM'si de yüklenebilir. Shortg modülleriyle bu durumda DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE öğesini tanımlamayın yöntemi kullanılır. Ayrıca, ürünün birden fazla FCM sürümü ve system_ext FCM sürümü olabilir. bir uygulamadır. Şunları tanımlayın:

  • device/manufacturer/device_name/Android.bp uygulamasında modül tanımlayın. Örneğin ( system_ext (ürün FCM'si için ürün ile):
    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 uygulamasına yükleyin. Örnek:
    PRODUCT_PACKAGES += system_ext_compatibility_matrix.xml
    
    .

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

# 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

Çalışma zamanında, VINTF nesnesi sistem uyumluluğunun bir alt kümesini birleştirir ürün uyumluluk matrislerini ve matrislerini matristir. Görüntüleyin Çerçeve uyumluluk matrisini inceleyin.

Örnek: Parçalardan tedarikçi manifesti oluşturma

Derleme sırasında birden çok tedarikçi firma manifesti parçası paket hâline getirilebilir. Ö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, aşağıdaki durumlarda IR HAL'yi tedarikçi manifestine ekler: BOARD_ENABLE_IR tanımlanır ve varsa atlanır BOARD_ENABLE_IR tanımlı değil. Aşağıdaki komutlar (uygulama ayrıntıları atlanacak şekilde değiştirilmiş) tedarikçi firma manifestini oluşturmak için 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, GTest: serileştirme, seri durumdan çıkarma ve uyumluluk kontrolünü ele aldık.

Lisanslama

  • tinyxml2 (harici/tinyxml2) kullanarak XML'den dışa aktarmak için kullanılır. BSD benzeri lisans.
  • policydb'yi almak için libselinux (harici/selinux/libselinux) sürümünü değil. Kamu alanı lisansı.
  • Sıkıştırmayı açmak için libz (harici/zlib) /proc/config.gz. BSD benzeri lisans.
  • libvintf projesi Apache 2.0 lisansı kullanıyor (uygun MODULE_LICENSE_APACHE2 ve NOTICE dosyaları)