Ek Kaynaklar

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

Sorgulanabilir kod konumu

Sorgulanabilir satıcı arayüzü nesnesinin kodu system/libvintf gider.

El yazısı bildirim dosyaları ve uyumluluk matrisleri zor olabilir. Başlamak üzere standart bir 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ı olarak bir cihaz bildirim dosyası da 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'si olarak bulunuyorsa, <transport> hwbinder olarak ayarlanır.
  2. Manifest'e hiçbir SELinux sürümü yazılmadı. Elemanın aşağıda açıklandığı gibi assemble_vintf aracılığıyla enjekte edilmesi önerilmektedir.
  3. Oluşturulan HAL bildirim dosyası hatalı olabilir. Cihaz bildirimi ile vendor.img gerçekte sağladığı şey arasındaki tutarsızlıkları düzeltmek için insanların dikkat etmesi gerekir.

ASSEMBLE_VINTF

assemble_vintf , aşağıdaki özelliklere sahip bir ana bilgisayar tarafı aracıdır:

  1. Uyumluluk matrisinin veya bildirim dosyasının geçerli olduğunu doğrular.
  2. Değişkenleri derleme sırasında mevcut olan bildirim/uyumluluk matrislerine 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 ortak metin uyumluluk matrisi oluşturur.

Örnek: Bir çerçeve bildirim 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 bildirim 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 bildirimi XML dosyaları oluşturma

Derleme sırasında, aşağıdaki değişkenler device/manufacturer/device_name/BoardConfig.mk dosyasında 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

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

# 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şturma

Derleme sırasında, aşağıdaki değişkenler device/manufacturer/device_name/BoardConfig.mk dosyasında 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

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

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

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

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

# 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şturma

Ürün FCM'sini ve cihaza özgü sistem FCM'yi tanımlamak için device/manufacturer/device_name/BoardConfig.mk dosyasında 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ülleriyle birlikte 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 dosyasında bir modül tanımlayın. Örneğin (system_ext'yi 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 adresine yükleyin. Örneğin:
    PRODUCT_PACKAGES += system_ext_compatibility_matrix.xml
    

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

# 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 matrisleri ve ürün uyumluluk matrislerinin bir alt kümesini ç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şturma

Derleme sırasında birden fazla satıcı bildirimi parçası 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>
# 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

Daha sonra assemble_vintf , BOARD_ENABLE_IR tanımlanmışsa IR HAL'yi satıcı bildirimine ekler ve BOARD_ENABLE_IR tanımlanmamışsa bunu 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 kontrolü için GTest'i kullanıyor.

Lisanslama

  • tinyxml2 (harici/tinyxml2), nesneyi XML'e/XML'den serileştirmek/seri durumdan çıkarmak için. BSD benzeri lisans.
  • Policydb sürümünü almak için libselinux (harici/selinux/libselinux). Kamu malı lisansı.
  • /proc/config.gz dosyasının sıkıştırmasını açmak için libz (harici/zlib). BSD benzeri lisans.
  • libvintf projesi Apache 2.0 lisansını kullanıyor (uygun MODULE_LICENSE_APACHE2 ve NOTICE dosyalarıyla).