Uyumluluk Matrisleri

Bu bölümde çerçeve ve cihaz uyumluluk matrisleri ve uyumluluk matrisi şeması açıklanmaktadır. Eşleşme kuralları için Eşleştirme Kuralları'na bakın.

Çerçeve uyumluluk matrisi (FCM)

Çerçeve uyumluluk matrisi (FCM), çerçevenin üzerinde çalıştığı cihazdaki gereksinimlerini açıklar. Çerçeve uyumluluk matrisi, sistem uyumluluk matrisi, ürün uyumluluk matrisi ve system_ext uyumluluk matrisinden oluşur. FCM'nin gereksinimleri, cihaz bildirimi (derleme zamanında, çalışma zamanında ve VTS'de uygulanan gereksinimler) tarafından karşılanmalıdır.

System_ext FCM ve ürün FCM'si, cihaza özgü FCM'nin (sistem bölümünde yüklü) tamamlayıcılarıdır.

  • Cihaz FCM'si, sistem bölümündeki modüllerin gereksinimlerini yansıtmalıdır.
  • System_ext FCM, system_ext bölümündeki modüllerin gereksinimlerini yansıtmalıdır.
  • Ürün FCM'si, ürün bölümündeki modüllere göre gereksinimleri yansıtmalıdır.

FCM'lerin tümü, OEM'in sistem, ürün ve system_ext bölümlerindeki çerçevede yaptığı değişikliklerle uyumlu olmalıdır. Örneğin, ürün bölümünde yüklü bir uygulama HAL arayüzünün satıcı uzantısını kullanıyorsa, HAL arayüzü gereksinimi ürün FCM'sinde bildirilmelidir.

Örnek sistem uyumluluk matrisi dosyası:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Comments, Legal notices, etc. here -->
<compatibility-matrix version="1.0" type="framework" level="3">
    <hal>
        <name>android.hardware.camera</name>
        <version>1.0</version>
        <version>3.1-4</version>
        <interface>
            <name>ICameraProvider</name>
            <instance>default</instance>
            <regex-instance>[a-z_]+/[0-9]+</regex-instance>
        </interface>
    </hal>
    <hal>
        <name>android.hardware.nfc</name>
        <version>1.0</version>
        <interface>
            <name>INfc</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal optional="true">
        <name>android.hardware.graphics.composer</name>
        <version>2.1</version>
        <interface>
            <name>IComposer</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="aidl" optional="true">
        <name>android.hardware.light</name>
        <version>1-2</version>
        <interface>
            <name>ILights</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="native">
        <name>GL</name>
        <version>1.1</version>
        <version>3.0</version>
    </hal>
    <hal format="native">
        <name>EGL</name>
        <version>1.1</version>
    </hal>
    <kernel version="3.18.51">
        <!-- common configs -->
    </kernel>
    <kernel version="3.18.51">
        <!-- arm specific configs -->
        <condition>
            <config>
                <key>CONFIG_ARM</key>
                <value type="tristate">y</value>
            </config>
        <condition>
        <config>
            <key>CONFIG_A</key>
            <value type="string"></value>
        </config>
        <config>
            <key>CONFIG_B</key>
            <value type="tristate">y</value>
        </config>
    </kernel>
    <kernel version="4.1.22">
        <!-- common configs -->
        <config>
            <key>CONFIG_A</key>
            <value type="string">foo</value>
        </config>
        <config>
            <key>CONFIG_B2</key>
            <value type="int">1024</value>
        </config>
    </kernel>
    <sepolicy>
        <kernel-sepolicy-version>30</kernel-sepolicy-version>
        <sepolicy-version>25.0</sepolicy-version>
        <sepolicy-version>26.0-3</sepolicy-version>
    </sepolicy>
    <avb>
        <vbmeta-version>2.1</vbmeta-version>
    </avb>
    <xmlfile format="dtd">
        <name>media_profile</name>
        <version>1.0</version>
        <path>/system/etc/media_profile_V1_0.dtd</path>
    </xmlfile>
</compatibility-matrix>

Daha fazla ayrıntı için bkz. FCM Yaşam Döngüsü .

Ürün uyumluluk matrisi

Ürün FCM'si, ürün bölümündeki bir çerçeve uyumluluk matrisi dosyasıdır. VINTF nesnesi, ürün FCM'sini sistemdeki FCM'lerle ve çalışma zamanında system_ext bölümleriyle birleştirir.

Örnek ürün FCM dosyası:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Comments, Legal notices, etc. here -->
<compatibility-matrix version="1.0" type="framework">
    <hal>
        <name>vendor.foo.camera</name>
        <version>1.0</version>
        <interface>
            <name>IBetterCamera</name>
            <instance>default</instance>
        </interface>
    </hal>
</compatibility-matrix>

System_ext uyumluluk matrisi

system_ext FCM, system_ext bölümündeki bir çerçeve uyumluluk matrisi dosyasıdır. VINTF nesnesi, system_ext FCM'yi çalışma zamanında sistemdeki ve ürün bölümlerindeki FCM'lerle birleştirir. Örnek bir system_ext FCM dosyası için ürün uyumluluk matrisine bakın.

Cihaz uyumluluk matrisi (DCM)

Cihaz uyumluluk matrisi, cihazın çerçeveden beklediği bir dizi gereksinimi açıklar (lansman sırasında ve OTA zamanında uygulanan gereksinimler).

Örnek DCM dosyası:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Comments, Legal notices, etc. here -->
<compatibility-matrix version="1.0" type="device">
    <hal>
        <name>android.hidl.manager</name>
        <version>1.0</version>
        <interface>
            <name>IServiceManager</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal>
        <name>android.hidl.memory</name>
        <version>1.0</version>
        <interface>
            <name>IMemory</name>
            <instance>ashmem</instance>
        </interface>
    </hal>
    <hal>
        <name>android.hidl.allocator</name>
        <version>1.0</version>
        <interface>
            <name>IAllocator</name>
            <instance>ashmem</instance>
        </interface>
    </hal>
    <hal>
        <name>android.framework.sensor</name>
        <version>1.0</version>
        <interface>
            <name>ISensorManager</name>
            <instance>default</instance>
        </interface>
    </hal>
    <vendor-ndk>
        <version>27</version>
    </vendor-ndk>
    <system-sdk>
        <version>27</version>
    </system-sdk>
</compatibility-matrix>

Uyumluluk matrisi şeması

Bu bölümde bu XML etiketlerinin anlamı açıklanmaktadır. Android kaynak ağacındaki kaynak dosyada bazı "gerekli" etiketler eksik olabilir ve derleme sırasında assemble_vintf tarafından yazılabilir. Cihazdaki ilgili dosyalarda "gerekli" etiketler bulunmalıdır.

?xml
İsteğe bağlı. Yalnızca XML ayrıştırıcısına bilgi sağlar.
compatibility-matrix.version
Gerekli. Bu uyumluluk matrisinin meta sürümü. Uyumluluk matrisinde beklenen öğeleri açıklar. XML sürümüyle ilgisi yok.
compatibility-matrix.type
Gerekli. Bu uyumluluk matrisinin türü:
  • "device" : Cihaz uyumluluk matrisi.
  • "framework" : Çerçeve uyumluluk matrisi.
manifest.level
Çerçeve uyumluluk matrisi için gereklidir. Android 12 ve üzeri sürümlerde, ürün ve system_ext bölümlerindeki çerçeve uyumluluk matrisi dosyalarında izin verilir. Bu dosyanın Çerçeve Uyumluluk Matrisi Sürümünü (FCM Sürümü) belirtir. Bunu cihaza özel çerçeve uyumluluk matrisinde (yani DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE ) beyan etmeyin.
compatibility-matrix.hal
İsteğe bağlı ve tekrarlanabilir. Uyumluluk matrisinin (çerçeve veya cihaz) sahibi tarafından bulunması gereken tek bir HAL'yi (HIDL veya yerel) listeler. HAL girişleri bir <name> öğesiyle ayırt edilir; aynı ada sahip birden fazla HAL girişi olabilir ("ve" koşulunu belirtir).
compatibility-matrix.hal.format
İsteğe bağlı. Değer aşağıdakilerden biri olabilir:
  • "hidl" : HIDL HAL'ler. Bu varsayılandır.
  • "aidl" : AIDL HAL'ler . Yalnızca uyumluluk matrisi meta sürümü 2.0'da geçerlidir.
  • "native" : yerel HAL'ler.
compatibility-matrix.hal.optional
Öznitelik isteğe bağlıdır ve varsayılan olarak false olur. Bu HAL'ın uyumluluk matrisinin (çerçeve veya aygıt) sahibi için isteğe bağlı olup olmadığını belirtir. Bir <hal> girişi isteğe bağlı olarak işaretlenmişse, bu, sahibinin bu HAL ile (varsa) çalışabileceği ancak mevcut olmasını gerektirmediği anlamına gelir.
compatibility-matrix.hal.name
Gerekli. Bu HAL'in tam paket adı. Örnekler:
  • android.hardware.camera (HIDL veya AIDL HAL)
  • GLES (yerel HAL, yalnızca isim gerektirir)
compatibility-matrix.hal.version
Uyumluluk matrisinin (çerçeve veya cihaz) sahibinin hangi sürümleri beklediğini tanımlayan sürüm aralıklarının bir listesi (bkz. HAL eşleşmeleri ).

HIDL ve yerel HAL'ler için gerekliyse kopyalar olmadan tekrarlanabilir. Biçim aşağıdakilerden biridir:
  • MAJOR . MINOR_MIN - MINOR_MAX
  • MAJOR . MINOR ( MAJOR . MINOR - MINOR eşdeğerdir)

AIDL HAL'ler için Android 11 ve önceki sürümleri çalıştıran cihazlarda bulunmamalıdır. Daha sonraki sürümleri çalıştıran cihazlarda isteğe bağlıdır. Belirtilmişse format aşağıdakilerden biridir:
  • VERSION_MIN - VERSION_MAX
  • VERSION ( VERSION - VERSION ile eşdeğerdir)
Belirtilmezse değer varsayılan olarak 1 olur.
compatibility-matrix.hal.interface
İsteğe bağlı, tekrarlanabilir. Bu HAL'in gerekli arayüzlerinin listesi.
compatibility-matrix.hal.interface.name
Gerekli. Arayüzün adı.
compatibility-matrix.hal.interface.instance
İsteğe bağlı, tekrarlanabilir. Bu arayüzün gerekli örneklerinin listesi.
compatibility-matrix.hal.interface.regex-instance
İsteğe bağlı, tekrarlanabilir. Bu arayüzde gerekli örnek adı kalıplarının listesi. Genişletilmiş Normal İfade biçimini kullanın.
compatibility-matrix.kernel
İsteğe bağlı, tekrarlanabilir. Çerçevenin her çekirdek sürümünde gerektirdiği çekirdek yapılandırmalarının bir listesini belirtin.
Aynı <version> sahip birden fazla <kernel> , "ve" ilişkisini ima etmek için mevcut olabilir. Her <kernel> yalnızca <conditions> karşılandığında etkinleştirilen gereksinimlerin bir "parçasıdır".
compatibility-matrix.kernel.version
Gerekli. Çekirdek sürümü. Biçim VERSION . MAJOR_REVISION . MINOR_REVISION . Sürüm ve ana revizyon tam olarak eşleşmelidir. Küçük revizyon, çerçevenin beklediği çekirdeğin minimum LTS sürümünü tanımlar.
compatibility-matrix.kernel.condition
İsteğe bağlı. Her sürümün ilk <kernel> için mevcut olmamalıdır. Koşulların bir listesini belirtir. Koşullar karşılandığında bu <kernel> parçasında belirtilen gereksinimler etkinleştirilir.
compatibility-matrix.kernel.config
İsteğe bağlı, tekrarlanabilir. Bu çekirdek sürümü için eşleşmesi gereken CONFIG öğelerini listeler. Her CONFIG öğesi bir anahtar/değer çiftidir; yapılandırma öğeleri anahtarla ayırt edilir.
compatibility-matrix.kernel.config.key
Gerekli. CONFIG öğesinin anahtar adı. CONFIG_ ile başlar.
compatibility-matrix.kernel.config.value
Gerekli. CONFIG öğesinin değeri. Format türe bağlıdır:
  • string . Alıntılar çıkarılmıştır.
  • int . Ondalık ve onaltılık ( 0x veya 0X) değerler kabul edilir. 64 bitlik bir tam sayı olarak yorumlanır; taşmalar kesintiye neden olur. (Ayrıştırıcı -2 64 + 1 ile 2 64 - 1 arasındaki değerleri kabul eder, 65. bit kesilir; ayrıntılar için strtoull kılavuz sayfasına bakın.)
  • range . Format şu şekildedir [int]-[int] , örneğin 10-20 . Onaltılı değerler kabul edilir ve 0x veya 0X ile başlamalıdır. İki sınır işaretsiz 64 bitlik bir tamsayı olmalıdır.
  • tristate Geçerli değerler y , m ve n .
compatibility-matrix.kernel.config.value.type
Gerekli. CONFIG öğesinin değerinin türü; aşağıdakilerden biri:
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
Gerekli. Sepolicy ile ilgili tüm girişleri içerir. Yalnızca çerçeve uyumluluk matrisi tarafından kullanılır.
compatibility-matrix.sepolicy.sepolicy-version
Gerekli, tekrarlanabilir. Sepolicy sürümündeki gereksinimi açıklar. manifest.sepolicy.version dosyasına karşılık gelir. Bir öğenin her örneği, bir dizi sepolicy versiyonunu tanımlar.
compatibility-matrix.sepolicy.kernel-sepolicy-version
Gerekli. Çerçevenin birlikte çalıştığı policydb veritabanı sürümünü bildirir.
compatibility-matrix.avb.vbmeta-version
İsteğe bağlı; yalnızca çerçeve uyumluluk matrisi tarafından kullanılır. system.img imzalamak için kullanılan AVB sürümünü bildirir. Android 10'da kullanımdan kaldırıldı.
compatibility-matrix.vendor-ndk
İsteğe bağlı; yalnızca cihaz uyumluluk matrisi tarafından kullanılır. VNDK satıcı anlık görüntüsünün gerekliliğini bildirir. Eksikse sistem görüntüsü üzerinde VNDK gereksinimi yapılmaz.
compatibility-matrix.vendor-ndk.version
Gerekli. Satıcı görüntüsünün gerektirdiği VNDK sürümünü bildiren pozitif bir tam sayı.
compatibility-matrix.vendor-ndk.library
İsteğe bağlı, tekrarlanabilir. Satıcı görüntüsünün gerektirdiği bir dizi VNDK kitaplığını bildirir. manifest.vendor-ndk.library ile aynı anlambilim.
compatibility-matrix.system-sdk.version
İsteğe bağlı olarak tekrarlanabilir; yalnızca cihaz uyumluluk matrisi tarafından kullanılır. Sistem SDK sürümlerindeki satıcı uygulamalarının gereksinimini bildirir. Eksikse sistem görüntüsü üzerinde Sistem SDK gereksinimi yapılmaz.