Sumber daya tambahan

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

Lokasi kode yang dapat ditanyakan

Kode untuk objek antarmuka vendor yang dapat dikueri masuk ke system/libvintf (lihat API yang dapat dikueri).

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

LSHAL

LSHAL adalah alat sisi perangkat yang mencantumkan semua HAL terdaftar ke hwservicemanager dan semua implementasi passthrough yang tersedia (misalnya android.hardware.foo@1.0-impl.so ) pada perangkat. Itu juga dapat menghasilkan file manifes perangkat berdasarkan daftar:

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

Perhatikan hal berikut:

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

ASSEMBLE_VINTF

assemble_vintf adalah alat sisi host yang:

  1. Memverifikasi matriks kompatibilitas atau file manifes valid.
  2. Menyuntikkan variabel ke matriks manifes/kompatibilitas yang tersedia pada waktu pembuatan dan menghasilkan file baru yang harus diinstal ke perangkat.
  3. Memeriksa kompatibilitas antara file yang dihasilkan dan dualnya.
  4. Jika file manifes diberikan, secara opsional menghasilkan matriks kompatibilitas boilerplate yang kompatibel dengan file manifes.

Contoh: Buat matriks kompatibilitas perangkat dari file manifes kerangka kerja

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: Buat matriks kompatibilitas kerangka kerja kerangka 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: Buat file XML manifes perangkat dari variabel

Pada waktu pembuatan, jika variabel berikut didefinisikan 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 dijalankan (dalam sistem build, dimodifikasi untuk menghilangkan detail implementasi) 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 Manifes perangkat untuk detailnya.

Contoh: Buat file XML matriks kompatibilitas perangkat dari variabel

Pada waktu pembuatan, jika variabel berikut didefinisikan 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 dijalankan (dalam sistem build, dimodifikasi untuk menghilangkan detail implementasi) 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 Matriks kompatibilitas perangkat untuk detailnya.

Contoh: Buat file XML manifes kerangka kerja dari variabel

Variabel berikut dapat didefinisikan di 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 dijalankan (dalam sistem pembangunan, dimodifikasi untuk menghilangkan detail implementasi) untuk menghasilkan file XML manifes kerangka kerja:

# 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, fragmen manifes sistem, manifes produk, dan fragmen manifes produk sebagai manifes kerangka kerja. Lihat manifes Framework untuk detailnya.

Contoh: Buat file XML matriks kompatibilitas kerangka kerja dari variabel

Variabel berikut dapat ditentukan di device/manufacturer/device_name/BoardConfig.mk untuk menentukan FCM produk dan FCM 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. FCM produk juga dapat diinstal dengan modul Soong; jangan mendefinisikan DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE jika metode ini digunakan. Selain itu, beberapa versi FCM produk dan versi FCM system_ext dapat diinstal dengan modul Soong. Tentukan berikut ini:

  • 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 dijalankan (dalam sistem pembangunan, dimodifikasi untuk menghilangkan detail implementasi) untuk menghasilkan file XML matriks kompatibilitas kerangka kerja:

# 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 matriks kompatibilitas sistem dan matriks kompatibilitas produk sebagai matriks kompatibilitas kerangka kerja. Lihat matriks kompatibilitas Framework untuk detailnya.

Contoh: Buat manifes vendor dari fragmen

Beberapa fragmen manifes vendor dapat digabungkan pada waktu pembuatan. Sebagai 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 didefinisikan, dan menghilangkannya jika BOARD_ENABLE_IR tidak ditentukan. Perintah berikut (dimodifikasi 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

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

Lisensi

  • tinyxml2 (eksternal/tinyxml2) untuk membuat serial/deserialisasi objek ke/dari XML. Lisensi seperti BSD.
  • libselinux (eksternal/selinux/libselinux) untuk mendapatkan versi policydb. Lisensi domain publik.
  • libz (eksternal/zlib) untuk dekompresi /proc/config.gz . Lisensi seperti BSD.
  • proyek libvintf menggunakan lisensi Apache 2.0 (dengan file MODULE_LICENSE_APACHE2 dan NOTICE yang sesuai).