周末搞这玩意欲仙欲死,没办法只有看看。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