Bir VINTF nesnesi, aygıt bildiriminden ve çerçeve bildirim dosyalarından (XML) verileri toplar. Her iki bildirim de aynı formatı paylaşıyor ancak tüm öğeler her ikisine de uygulanmıyor (şemayla ilgili ayrıntılar için bkz. Bildirim dosyası şeması ).
Cihaz bildirimi
Cihaz bildirimi (cihaz tarafından sağlanır), satıcı bildiriminden ve ODM bildiriminden oluşur.
- Satıcı bildirimi, bir SoC için ortak olan HAL'leri, SELinux ilkesi sürümlerini vb. belirtir.
device/ VENDOR / DEVICE /manifest.xml
adresindeki Android kaynak ağacına yerleştirilmesi önerilir, ancak birden fazla parça dosyası kullanılabilir. Ayrıntılar için bkz. Parçaları bildirme ve Parçalardan DM oluşturma . - ODM bildirimi, ODM bölümündeki ürüne özel HAL'leri listeler. VINTF nesnesi ODM bildirimini şu sırayla yükler:
-
SKU
tanımlanmışsa (buradaSKU
ro.boot.product.hardware.sku
özelliğinin değeridir),/odm/etc/vintf/manifest_ SKU .xml
-
/odm/etc/vintf/manifest.xml
-
SKU
tanımlanmışsa,/odm/etc/manifest_ SKU .xml
-
/odm/etc/manifest.xml
-
- Satıcı manifestosu, satıcı bölümündeki ürüne özel HAL'leri listeler. VINTF nesnesi satıcı bildirimini şu sırayla yükler:
-
SKU
tanımlanmışsa (buradaSKU
ro.boot.product.vendor.sku
özelliğinin değeridir),/vendor/etc/vintf/manifest_ SKU .xml
-
/vendor/etc/vintf/manifest.xml
-
- VINTF nesnesi cihaz bildirimini şu sırayla yükler:
- Satıcı manifestosu mevcutsa aşağıdakileri birleştirin:
- Satıcı manifestosu
- İsteğe bağlı satıcı bildirimi parçaları
- İsteğe bağlı ODM bildirimi
- İsteğe bağlı ODM bildirim parçaları
- Aksi takdirde, ODM bildirimi mevcutsa, ODM bildirimini isteğe bağlı ODM bildirimi parçalarıyla birleştirin.
-
/vendor/manifest.xml
(eski, parça yok)
Dikkat:
- Eski cihazlarda eski satıcı bildirimi ve ODM bildirimi kullanılır. ODM bildirimi, eski satıcı bildirimini tamamen geçersiz kılabilir.
- Android 9 ile başlatılan cihazlarda ODM bildirimi, satıcı bildirimi ile birleştirilir.
- Bir manifest listesi birleştirildiğinde, listede daha sonra görünen manifestler, daha sonraki manifestteki etiketlerin
override="true"
özniteliğine sahip olması koşuluyla, listede daha önce görünen manifestlerdeki etiketleri geçersiz kılabilir. Örneğin, ODM bildirimi satıcı bildirimindeki bazı<hal>
etiketlerini geçersiz kılabilir. Öznitelikoverride
için aşağıdaki belgelere bakın.
- Satıcı manifestosu mevcutsa aşağıdakileri birleştirin:
Bu kurulum, aynı karta sahip birden fazla ürünün aynı satıcı görüntüsünü (ortak HAL'ler sağlayan) paylaşmasına, ancak farklı ODM görüntülerine (ürüne özel HAL'leri belirten) sahip olmasına olanak tanır.
Aşağıda örnek bir satıcı manifestosu yer almaktadır.
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <manifest version="2.0" type="device" target-level="1"> <hal> <name>android.hardware.camera</name> <transport>hwbinder</transport> <version>3.4</version> <interface> <name>ICameraProvider</name> <instance>legacy/0</instance> <instance>proprietary/0</instance> </interface> </hal> <hal> <name>android.hardware.nfc</name> <transport>hwbinder</transport> <version>1.0</version> <version>2.0</version> <interface> <name>INfc</name> <instance>nfc_nci</instance> </interface> </hal> <hal> <name>android.hardware.nfc</name> <transport>hwbinder</transport> <fqname>@2.0::INfc/default</fqname> </hal> <hal> <name>android.hardware.drm</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>ICryptoFactory</name> <instance>default</instance> </interface> <interface> <name>IDrmFactory</name> <instance>default</instance> </interface> <fqname>@1.1::ICryptoFactory/clearkey</fqname> <fqname>@1.1::IDrmFactory/clearkey</fqname> </hal> <hal format="aidl"> <name>android.hardware.light</name> <version>1</version> <fqname>ILights/default</fqname> </hal> <hal format="aidl"> <name>android.hardware.power</name> <version>2</version> <interface> <name>IPower</name> <instance>default</instance> </interface> </hal> <hal format="native"> <name>EGL</name> <version>1.1</version> </hal> <hal format="native"> <name>GLES</name> <version>1.1</version> <version>2.0</version> <version>3.0</version> </hal> <sepolicy> <version>25.0</version> </sepolicy> </manifest>
Örnek bir ODM bildirimini burada bulabilirsiniz.
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <manifest version="1.0" type="device"> <!-- camera 3.4 in vendor manifest is ignored --> <hal override="true"> <name>android.hardware.camera</name> <transport>hwbinder</transport> <version>3.5</version> <interface> <name>ICameraProvider</name> <instance>legacy/0</instance> </interface> </hal> <!-- NFC is declared to be disabled --> <hal override="true"> <name>android.hardware.nfc</name> <transport>hwbinder</transport> </hal> <hal> <name>android.hardware.power</name> <transport>hwbinder</transport> <version>1.1</version> <interface> <name>IPower</name> <instance>default</instance> </interface> </hal> </manifest>
İşte OTA paketindeki örnek bir cihaz bildirimi.
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <manifest version="1.0" type="device" target-level="1"> <!-- hals ommited --> <kernel version="4.4.176"> <config> <key>CONFIG_ANDROID</key> <value>y</value> </config> <config> <key>CONFIG_ARM64</key> <value>y</value> </config> <!-- other configs ommited --> </kernel> </manifest>
Daha fazla ayrıntı için bkz. Cihaz Bildirimi Geliştirme .
Çerçeve bildirimi
Çerçeve bildirim dosyası, sistem bildirimi, ürün bildirimi ve system_ext bildiriminden oluşur.
- Sistem bildirimi (Google tarafından sağlanır) manuel olarak oluşturulur ve
/system/libhidl/manifest.xml
adresindeki Android kaynak ağacında bulunur. - Ürün bildirimi (aygıt tarafından sağlanır), ürün bölümünde kurulu modüller tarafından hizmet verilen HAL'leri listeler.
- System_ext bildirimi (cihaz tarafından sağlanır) aşağıdakileri listeler:
- system_ext bölümüne kurulu modüller tarafından hizmet verilen HAL'ler;
- VNDK versiyonları;
- Sistem SDK'sı sürümü.
Cihaz bildirimine benzer şekilde birden fazla parça dosyası kullanılabilir. Ayrıntılar için bkz. Bildirim parçaları .
İşte örnek bir çerçeve bildirimi.
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <manifest version="1.0" type="framework"> <hal> <name>android.hidl.allocator</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>IAllocator</name> <instance>ashmem</instance> </interface> </hal> <hal> <name>android.hidl.memory</name> <transport arch="32+64">passthrough</transport> <version>1.0</version> <interface> <name>IMapper</name> <instance>ashmem</instance> </interface> </hal> <hal> <name>android.hidl.manager</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>IServiceManager</name> <instance>default</instance> </interface> </hal> <hal> <name>android.frameworks.sensorservice</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>ISensorManager</name> <instance>default</instance> </interface> </hal> <hal max-level="5"> <name>android.frameworks.schedulerservice</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>ISchedulingPolicyService</name> <instance>default</instance> </interface> </hal> <vendor-ndk> <version>27</version> </vendor-ndk> <system-sdk> <version>27</version> </system-sdk> </manifest>
Bildiri parçaları
Android 10 ve üzeri sürümlerde, bir bildirim girişini yapı sistemindeki bir HAL modülüyle ilişkilendirebilirsiniz. Bu, HAL modülünün yapı sistemine koşullu olarak dahil edilmesini kolaylaştırır.
Örnek
Android.bp
veya Android.mk
dosyanızda herhangi bir modüle vintf_fragments
ekleyin. Örneğin, HAL uygulamanızla ( my.package.foo@1.0-service-bar
) modülü değiştirebilirsiniz.
... { ... vintf_fragments: ["manifest_foo.xml"], ... }
LOCAL_MODULE := ... LOCAL_VINTF_FRAGMENTS := manifest_foo.xml
manifest_foo.xml
adlı dosyada bu modülün bildirimini oluşturun. Oluşturma sırasında bu bildirim cihaza eklenir. Buraya bir giriş eklemek, cihazın ana bildirimine bir giriş eklemekle aynıdır. Bu, istemcilerin arayüzü kullanmasına olanak tanır ve VTS'nin cihazda hangi HAL uygulamalarının bulunduğunu belirlemesine olanak tanır. Normal bir bildirimin yaptığı her şeyi bu bildirim de yapar.
Aşağıdaki örnek, vendor
veya odm
bölümüne yüklenen android.hardware.foo@1.0::IFoo/default
uygular. system
, product
veya system_ext
bölümüne yüklüyse, device
türü yerine framework
türünü kullanın.
<manifest version="1.0" type="device"> <hal format="hidl"> <name>android.hardware.foo</name> <transport>hwbinder</transport> <fqname>@1.0::IFoo/default</fqname> </hal> </manifest>
Bir HAL modülü satıcının APEX'inde paketlenmişse, ilişkili VINTF parçalarını aynı APEX içinde VINTF parçalarında açıklandığı gibi "önceden oluşturulmuş_etc" ile paketleyin.
Bildirim dosyası ş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 etiketlerin bulunması gerekir.
-
?xml
- İsteğe bağlı. Yalnızca XML ayrıştırıcısına bilgi sağlar.
-
manifest.version
- Gerekli. Bu bildirimin meta sürümü. Manifestte beklenen unsurları açıklar. XML sürümüyle ilgisi yok.
-
manifest.type
- Gerekli. Bu bildirimin türü. Cihaz bildirim dosyası için değer
device
ve çerçeve bildirim dosyası içinframework
sahiptir. -
manifest.target-level
- Cihaz bildirimi için gereklidir. Bu cihaz bildiriminin uyumlu olmasının hedeflendiği çerçeve uyumluluk matrisi (FCM) sürümünü belirtir. Buna aynı zamanda cihazın nakliye FCM sürümü de denir.
-
manifest.hal
- İsteğe bağlı, tekrarlanabilir.
format
özelliğine bağlı olarak tek bir HAL (HIDL veya GL gibi yerel). -
manifest.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 manifest meta sürümü 2.0 ve üzeri sürümlerde geçerlidir. -
native
: Yerel HAL'ler.
-
-
manifest.hal.max-level
- İsteğe bağlı. Yalnızca çerçeve bildirimlerinde geçerlidir. Ayarlanırsa, maksimum düzeyi çerçeve bildirimindeki Hedef FCM Sürümünden daha düşük olan HAL'ler devre dışı bırakılır.
-
manifest.hal.override
- İsteğe bağlı. Değer aşağıdakilerden biri olabilir:
-
true
: Aynı<name>
ve ana sürüme sahip diğer<hal>
öğelerini geçersiz kılın. Bu<hal>
öğesinde<version>
veya<fqname>
yoksa,<hal>
öğesi bu HAL'ın devre dışı bırakıldığını bildirir. -
false
: Aynı<name>
ve ana sürüme sahip diğer<hal>
öğelerini geçersiz kılmayın.
-
-
manifest.hal.name
- Gerekli. HAL'in tam nitelikli paket adı. Birden fazla HAL girişi aynı adı kullanabilir. Örnekler:
-
android.hardware.camera
(HIDL veya AIDL HAL) -
GLES
(yerel HAL, yalnızca isim gerektirir)
-
-
manifest.hal.transport
-
manifest.hal.format == "hidl"
olduğunda gereklidir. Aksi takdirde mevcut OLMAMALIDIR. Bu paketteki bir arayüz hizmet yöneticisinden sorgulandığında hangi aktarımın kullanıldığını belirtir. Değer aşağıdakilerden biri olabilir:-
hwbinder
: Bağlayıcı mod -
passthrough
: Geçiş modu
-
-
manifest.hal.format == "aidl"
olduğunda isteğe bağlıdır. Aksi takdirde mevcut OLMAMALIDIR. Bir arayüz uzaktan sunulduğunda hangi aktarımın kullanıldığını belirtir. Değer şöyle olmalıdır:-
inet
: İnternet soketi
manifest.hal.transport.ip
vemanifest.hal.transport.port
kullanılmalıdır. -
-
manifest.hal.transport.arch
-
passthrough
için gereklidir vehwbinder
için mevcut olmamalıdır. Sağlanan geçiş hizmetinin bitliğini açıklar. Değer aşağıdakilerden biri olabilir:-
32
: 32 bit modu -
64
: 64 bit modu -
32+64
: İkisi de
-
-
manifest.hal.transport.ip
-
inet
için gereklidir ve aksi takdirde mevcut OLMAMALIDIR. Uzak arayüzün sunulduğu IP adresini açıklar. -
manifest.hal.transport.port
-
inet
için gereklidir ve aksi takdirde mevcut OLMAMALIDIR. Uzak arayüzün sunulduğu bağlantı noktasını açıklar. -
manifest.hal.version
- İsteğe bağlı, tekrarlanabilir. Bir bildirimdeki
hal
etiketlerinin bir sürümü.
HIDL ve yerel HAL'ler için formatMAJOR . MINOR
. Örnekler içinhardware/interfaces
,vendor/${VENDOR}/interfaces
,frameworks/hardware/interfaces
veyasystem/hardware/interfaces
bakın.
HIDL ve yerel HAL'ler, farklı ana sürümleri temsil ettikleri sürece birden fazla sürüm alanı kullanabilir ve ana sürüm başına yalnızca bir alt sürüm sağlanır. Örneğin 3.1 ve 3.2 bir arada var olamaz ama 1.0 ve 3.4 bir arada bulunabilir. Bu,override="true"
olmadığı sürece aynı ada sahip tümhal
öğeleri için geçerlidir.<version>
değerleri<fqname>
ile ilişkili değildir çünkü<fqname>
bir sürüm taşır.
AIDL HAL'ler için, Android 11 ve önceki sürümleri çalıştıran cihazlarda<version>
bulunmamalıdır.<version>
Android 12 ve sonraki sürümleri çalıştıran cihazlarda tek bir tam sayı olmalıdır. Her(package, interface, instance)
tuple için en fazla bir<version>
bulunmalıdır. Mevcut değilse, varsayılan olarak1
ayarlayın.<version>
değeri aynı<hal>
içindeki tüm<fqname>
ile ilişkilendirilir çünkü<fqname>
bir sürüm taşımaz. -
manifest.hal.interface
- Gerekli, kopyalar olmadan tekrarlanabilir. Pakette örnek adı olan bir arayüz belirtin. Bir
<hal>
içinde birden fazla<interface>
öğesi olabilir; isimlerin farklı olması gerekir. -
manifest.hal.interface.name
- Gerekli. Arayüzün adı.
-
manifest.hal.interface.instance
- Gerekli, tekrarlanabilir. Arayüzün örnek adı. Bir arayüz için birden fazla örneğe sahip olabilir ancak yinelenen
<instance>
öğeleri olamaz. -
manifest.hal.fqname
- İsteğe bağlı, tekrarlanabilir. HAL için
manifest.hal.name
adıyla bir örnek belirtmenin alternatif bir yolu.- HIDL HAL'ler için format
@ MAJOR . MINOR :: INTERFACE / INSTANCE
. - AIDL HAL'ler için format
INTERFACE / INSTANCE
şeklindedir.
- HIDL HAL'ler için format
-
manifest.sepolicy
- Gerekli. Sepolicy ile ilgili tüm girişleri içerir.
-
manifest.sepolicy.version
- Cihaz bildirimi için gereklidir. SELinux sürümünü bildirir.
SDK_INT . PLAT_INT
. -
manifest.vendor-ndk
- Gereklidir, tekrarlanabilir; çerçeve manifestosu için gereklidir. Cihaz bildiriminde bulunmamalıdır. Birden fazla
<vendor-ndk>
girişi farklı<version>
s'ye sahip olmalıdır. Çerçeve tarafından sağlanan bir dizi VNDK anlık görüntüsünü açıklar. -
manifest.vendor-ndk.version
- Gerekli. Bu, VNDK anlık görüntüsünün sürümünü temsil eden pozitif bir tamsayıdır.
-
manifest.vendor-ndk.library
- İsteğe bağlı, kopyalar olmadan tekrarlanabilir. Bu VNDK satıcı anlık görüntüsü için çerçeve tarafından sağlanan bir dizi VNDK kitaplığını açıklar. Değer,
lib
ön eki ve.so
sonekini içeren bir kitaplığın dosya adıdır; örneğinlibjpeg.so
. Hiçbir yol bileşenine izin verilmez. -
manifest.system-sdk.version
- İsteğe bağlı, kopyalar olmadan tekrarlanabilir; yalnızca çerçeve bildirimi tarafından kullanılır. Çerçeve tarafından satıcı uygulamalarına sağlanan bir dizi sistem SDK sürümünü açıklar.
-
manifest.kernel
- İsteğe bağlı. Çekirdek hakkındaki statik bilgileri açıklar.
-
manifest.kernel.target-level
- İsteğe bağlı. Çekirdek dalını açıklar. Eğer mevcut değilse değeri varsayılan olarak
manifest.target-level
olur.manifest.target-level
değerinden büyük veya ona eşit olmalıdır. Ayrıntılar için çekirdek eşleşme kurallarına bakın.