周末搞这玩意欲仙欲死,没办法只有看看。VINTF是供应商接口对象(VINTF 对象),准确的说,这个是属于兼容性矩阵概念。。。有点想起了以前看过的一个电影,异次元杀阵。。。下面是谷歌官方的图。
本质上其实就是两部分,设备提供什么能力,系统需要什么能力。然后看两者能否兼容匹配上。这两者都是使用xml进行描述。主要是Android8之后,system和vendor分离,为了确保两者的兼容性搞出来的。举例如下:
设备侧是Manifest描述:
device/VENDOR/DEVICE/manifest.xml
<?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>
系统侧是Matrix描述:
/system/libhidl/manifest.xml
<?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>
<vendor-ndk>
<version>27</version>
</vendor-ndk>
<system-sdk>
<version>27</version>
</system-sdk>
</manifest>
详细图如下(来自VINTF: manifest.xml | Cool Fish In Glacier):
Manifest类型 | Makefile Target | 生成文件 | .. | input files (源文件) |
---|---|---|---|---|
System Manifest | make system_manifest.xml | /system/etc/vintf/manifest.xml | DEVICE_FRAMEWORK_MANIFEST_FILE + system/libhidl/vintfdata/manifest.xml | |
Product Manifest | make product_manifest.xml | /product/etc/vintf/manifest.xml | PRODUCT_MANIFEST_FILES | |
Device Manifest | make device_manifest.xml | /vendor/etc/vintf/manifest.xml | DEVICE_MANIFEST_FILE | |
ODM Manifest | make odm_manifest.xml | /odm/etc/vintf/manifest.xml | ODM_MANIFEST_FILES |
我看说的一般是在/vendor/etc/vintf下面增加。一般是device_manifest和device_framework_compatibility_matrix这两个xml文件。
调试:
在设备端查看提供的能力:
/system/bin/lshal --init-vintf
说是下面这个命令可以列出所有接口。空了看看。
vintf list
VINTF: manifest.xml | Cool Fish In Glacier
https://source.android.com/docs/core/architecture/vintf/resources?hl=zh-cn
VINTF简介-CSDN博客
清单 | Android 开源项目 | Android Open Source Project