Referensi lain

Referensi berikut memberikan detail tentang lokasi kode, alat, pengujian, dan pemberian lisensi.

Lokasi kode yang dapat dikueri

Kode untuk objek antarmuka vendor yang dapat dikueri mengarah ke system/libvintf.

File manifes tulisan tangan dan matriks kompatibilitas bisa jadi sulit. Gunakan alat berikut untuk membuat manifes boilerplate/matriks kompatibilitas untuk memulai dari mereka.

{i>LSHAL<i}

LSHAL adalah alat sisi perangkat yang mencantumkan semua HAL yang terdaftar ke hwservicemanager dan semua penerapan passthrough yang tersedia (misalnya, android.hardware.foo@1.0-impl.so) di perangkat. Ini juga dapat buat file manifes perangkat berdasarkan daftar:

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

Perhatikan hal berikut:

  1. Jika sebuah paket terdaftar ke hwservicemanager dan ditemukan sebagai HAL passthrough, <transport> disetel ke hwbinder.
  2. Tidak ada versi SELinux yang ditulis ke dalam manifes. Disarankan agar diinjeksikan melalui assemble_vintf seperti yang dijelaskan di bawah.
  3. File manifes HAL yang dihasilkan mungkin tidak akurat. Perhatian manusia yang diperlukan untuk memperbaiki inkonsistensi antara manifes perangkat dan apa yang disediakan oleh vendor.img.

{i>ASSEMBLE_VINTF<i}

assemble_vintf adalah alat sisi host yang:

  1. Memverifikasi bahwa matriks kompatibilitas atau file manifes valid.
  2. Memasukkan variabel ke manifes/matriks kompatibilitas yang tersedia di build dan menghasilkan file baru yang harus diinstal ke perangkat.
  3. Memeriksa kompatibilitas antara file yang dihasilkan dan dual-nya.
  4. Jika file manifes diberikan, boilerplate akan dibuat secara opsional kompatibilitas yang kompatibel dengan file manifes.

Contoh: Membuat kompatibilitas perangkat matriks dari file manifes framework

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

Perhatikan bahwa semua HAL disetel ke optional="true".

Contoh: Membuat kompatibilitas framework kerangka matriks dari file manifes perangkat

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

Perhatikan bahwa semua HAL disetel ke optional="true".

Contoh: Membuat file XML manifes perangkat dari variabel

Pada waktu build, jika variabel berikut ditentukan di device/manufacturer/device_name/BoardConfig.mk:

# 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

Kemudian perintah berikut dieksekusi (dalam sistem build, dimodifikasi untuk menghilangkan implementasi detail) untuk menghasilkan file XML manifes perangkat:

# 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

Saat runtime, objek VINTF menggabungkan manifes vendor dan manifes ODM sebagai manifes perangkat. Lihat Perangkat manifes untuk detailnya.

Contoh: Membuat file XML matriks kompatibilitas perangkat dari variabel

Pada waktu build, jika variabel berikut ditentukan di device/manufacturer/device_name/BoardConfig.mk:

# 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

Kemudian perintah berikut dieksekusi (dalam sistem build, dimodifikasi untuk menghilangkan implementasi detail) untuk menghasilkan file XML matriks kompatibilitas perangkat:

# 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

Saat runtime, objek VINTF menggunakan matriks kompatibilitas vendor sebagai matriks kompatibilitas perangkat. Lihat Perangkat matriks kompatibilitas untuk mengetahui detailnya.

Contoh: Membuat file XML manifes framework dari variabel

Variabel berikut dapat ditentukan dalam 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

Perintah berikut dieksekusi (dalam sistem build, dimodifikasi untuk menghilangkan implementasi untuk menghasilkan file XML manifes framework:

# 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

Saat runtime, objek VINTF menggabungkan manifes sistem, manifes sistem fragmen, manifes produk, dan fragmen manifes produk sebagai manifes framework. Lihat Kerangka kerja manifes untuk detailnya.

Contoh: Membuat file XML matriks kompatibilitas framework dari variabel

Variabel berikut dapat ditentukan dalam device/manufacturer/device_name/BoardConfig.mk untuk menentukan produk FCM dan FCM untuk sistem khusus perangkat:

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

FCM system_ext harus diinstal dengan modul Soong. Produk FCM juga dapat diinstal dengan modul Soong; jangan tentukan DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE jika metode apa pun yang digunakan. Selain itu, beberapa versi FCM produk dan versi FCM system_ext yang telah diinstal dengan modul Soong. Tentukan hal berikut:

  • Tentukan modul di device/manufacturer/device_name/Android.bp. Misalnya (ganti system_ext dengan produk untuk produk FCM):
    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",
        ],
    }
    
  • Instal modul ke device/manufacturer/device_name/device.mk. Misalnya:
    PRODUCT_PACKAGES += system_ext_compatibility_matrix.xml
    

Perintah berikut dieksekusi (dalam sistem build, dimodifikasi untuk menghilangkan implementasi untuk membuat file XML matriks kompatibilitas framework:

# 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

Saat runtime, objek VINTF menggabungkan subset kompatibilitas sistem dan matriks kompatibilitas produk sebagai kompatibilitas framework yang dihasilkan. Lihat Kerangka kerja matriks kompatibilitas untuk mengetahui detailnya.

Contoh: Membuat manifes vendor dari fragmen

Beberapa fragmen manifes vendor dapat dipaketkan pada waktu build. Contoh:

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

Kemudian, assemble_vintf menambahkan IR HAL ke manifes vendor jika BOARD_ENABLE_IR ditentukan, dan menghilangkannya jika BOARD_ENABLE_IR tidak ditetapkan. Perintah berikut (diubah untuk menghilangkan detail implementasi) dijalankan untuk menghasilkan manifes vendor:

# 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

Untuk detailnya, lihat:

assemble_vintf --help

Pengujian

Project platform/system/libvintf menggunakan GTest untuk serialisasi, deserialisasi, dan pemeriksaan kompatibilitas.

Pemberian (hak) lisensi

  • tinyxml2 (eksternal/tinyxml2) untuk melakukan serialisasi/deserialisasi objek ke/dari XML. Lisensi layaknya BSD.
  • libselinux (external/selinux/libselinux) untuk mendapatkan policydb . Lisensi domain publik.
  • libz (eksternal/zlib) untuk dekompresi /proc/config.gz. Lisensi layaknya BSD.
  • Project libvintf menggunakan lisensi Apache 2.0 (dengan file MODULE_LICENSE_APACHE2 dan PEMBERITAHUAN).