Ek kaynaklar

Aşağıdaki kaynaklar kod konumları, araçlar, testler ve lisanslama hakkında ayrıntılar sağlar.

Sorgulanabilir kod konumu

Sorgulanabilir satıcı arabirimi nesnesinin kodu system/libvintf gider.

El yazısı bildirim dosyaları ve uyumluluk matrisleri zor olabilir. Başlamak için bir standart bildirim/uyumluluk matrisi oluşturmak için aşağıdaki araçları kullanın.

LSHAL

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

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

Aşağıdakilere dikkat et:

  1. Bir paket hem hwservicemanager kayıtlıysa hem de geçiş HAL'ı olarak bulunursa, <transport> hwbinder olarak ayarlanır.
  2. Bildirime hiçbir SELinux sürümü yazılmaz. Elemanın aşağıda açıklandığı gibi assemble_vintf yoluyla enjekte edilmesi önerilir.
  3. Oluşturulan HAL bildirim dosyası yanlış olabilir. Aygıt bildirimi ile vendor.img gerçekte sağladığı arasındaki tutarsızlıkları düzeltmek için insanların dikkat etmesi gerekir.

ASSEMBLE_VINTF

assemble_vintf , aşağıdakileri sağlayan bir ana bilgisayar tarafı aracıdır:

  1. Bir uyumluluk matrisi veya bildirim dosyasının geçerli olduğunu doğrular.
  2. Oluşturma zamanında mevcut olan bildirimlere/uyumluluk matrislerine değişkenler enjekte eder ve cihaza yüklenmesi gereken yeni bir dosya oluşturur.
  3. Oluşturulan dosya ile ikilisi arasındaki uyumluluğu kontrol eder.
  4. Bir bildirim dosyası verilirse, isteğe bağlı olarak bildirim dosyasıyla uyumlu bir standart uyumluluk matrisi oluşturur.

Örnek: Bir çerçeve bildirim dosyasından cihaz uyumluluk 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: Bir aygıt bildirim dosyasından bir iskelet çerçeve uyumluluk matrisi oluşturun

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 aygıt bildirimi XML dosyaları oluşturun

Derleme zamanında, device/manufacturer/device_name/BoardConfig.mk 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, aygıt bildirim XML dosyalarını oluşturmak için aşağıdaki komutlar yürütülür (yapı sisteminde, uygulama ayrıntılarını atlayacak şekilde değiştirilir):

# 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, satıcı bildirimlerini ve ODM bildirimlerini aygıt bildirimi olarak birleştirir. Ayrıntılar için Cihaz bildirimine bakın.

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

Derleme zamanında, device/manufacturer/device_name/BoardConfig.mk 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 yürütülür (yapı sisteminde, uygulama ayrıntılarını atlayacak şekilde değiştirilir):

# 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, cihaz uyumluluk matrisi olarak satıcı uyumluluk matrisini kullanır. Ayrıntılar için Cihaz uyumluluk matrisine bakın.

Örnek: Değişkenlerden çerçeve bildirimi XML dosyaları oluşturun

device/manufacturer/device_name/BoardConfig.mk 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 bildirim XML dosyalarını oluşturmak için aşağıdaki komutlar yürütülür (yapı sisteminde, uygulama ayrıntılarını atlayacak şekilde değiştirilir):

# 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 bildirimini, sistem bildirimi parçalarını, ürün bildirimini ve ürün bildirimi parçalarını çerçeve bildirimi olarak birleştirir. Ayrıntılar için Çerçeve bildirimine bakın.

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

Ürün FCM'sini ve cihaza özel sistem FCM'sini tanımlamak için device/manufacturer/device_name/BoardConfig.mk 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 birlikte kurulmalıdır. FCM ürünü ayrıca Soong modülleri ile de kurulabilir; bu yöntem kullanılıyorsa DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE tanımlamayın. Ayrıca, Soong modülleriyle birden fazla ürün FCM sürümü ve system_ext FCM sürümü kurulabilir. Aşağıdakini tanımlayınız:

  • device/manufacturer/device_name/Android.bp içinde bir modül tanımlayın. Örneğin (system_ext'i FCM ürünü için ürünle değiştirin):
    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 . Örneğin:
    PRODUCT_PACKAGES += system_ext_compatibility_matrix.xml
    

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

# 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 uyumluluk matrislerinin bir alt kümesini ve ürün uyumluluk matrislerini çerçeve uyumluluk matrisi olarak birleştirir. Ayrıntılar için Çerçeve uyumluluk matrisine bakın.

Örnek: Parçalardan satıcı bildirimini oluşturun

Birden çok satıcı bildirim parçası, derleme sırasında paketlenebilir. Örneğin:

<!-- 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>
-yer tutucu15 l10n-yer
# 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'yi satıcı bildirimine ekler ve BOARD_ENABLE_IR tanımlı değilse BOARD_ENABLE_IR atlar. Satıcı bildirimini oluşturmak için aşağıdaki komutlar (uygulama ayrıntılarını atlayacak şekilde değiştirildi) 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 yapmak

platform/system/libvintf projesi, serileştirme, seri durumdan çıkarma ve uyumluluk denetimi için GTest'i kullanır.

lisanslama

  • Nesneyi XML'e/XML'den seri hale getirmek/seri hale getirmek için tinyxml2 (harici/tinyxml2). BSD benzeri lisans.
  • libselinux (harici/selinux/libselinux). Kamu malı lisansı.
  • libz sıkıştırmasını /proc/config.gz için libz (harici/zlib). BSD benzeri lisans.
  • libvintf projesi Apache 2.0 lisansını kullanır (uygun MODULE_LICENSE_APACHE2 ve NOTICE dosyalarıyla).