Android学习14 -- VINF和兼容性矩阵
周末搞这玩意欲仙欲死,没办法只有看看。VINTF是供应商接口对象(VINTF 对象),准确的说,这个是属于兼容性矩阵概念。。。有点想起了以前看过的一个电影,异次元杀阵。。。
1 基础
这个是谷歌官方的图。
本质上其实就是两部分,设备提供什么能力,系统需要什么能力。然后看两者能否兼容匹配上。这两者都是使用xml进行描述。主要是Android8之后,system和vendor分离,为了确保两者的兼容性搞出来的。举例如下:
设备侧是Manifest描述:
device/VENDOR/DEVICE/manifest.xml
CONFIG_ANDROID y CONFIG_ARM64 y
系统侧是Matrix描述:
/system/libhidl/manifest.xml
android.hidl.allocator hwbinder 1.0 IAllocator ashmem 27 27
详细图如下(来自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文件。
2 服务构建
就实践来说,要增加一个AIDL服务,大的有两个步骤。
1 服务编写
首先是在BP文件中增加对应的XML。vintf_fragments: ["android.hardware.xxx-service.xml"],
在代码中增加该xml,内容如下:
android.hardware.xxx 1 Ixxx/default
之后正常编译。
2 运行环境搭建
主要是三个文件。
增加系统需要的能力和设备提供的能力。
adb push compatibility_matrix.device.xml /system/etc/vintf/compatibility_matrix.device.xml adb push compatibility_matrix.xml /vendor/etc/vintf/compatibility_matrix.xml
内容和上面的xml稍微有点区别:
android.hardware.xxx 1 Ixxx default
然后拷贝之前构造服务时候的xml到板子上/vendor/etc/vintf/manifest/中
adb push android.hardware.xxx.xml /vendor/etc/vintf/manifest/android.hardware.xxx.xml
运行服务如果报错的话会说Android servicemanager.cpp: servicemanager: Could not find in the VINTF manifest。
一般就是xml没有拷贝对。
3 验证
在设备端查看提供的能力(HAL):
/system/bin/lshal --init-vintf
在设备端查看提供的能力(AIDL)
service list
4 参考资料
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