VINTF
供应商接口对象
VINTF对象设计为设备和框架组件提供以下内容:
从Android 8.0开始,运行时API会查询设备上的内容并将该信息发送到无线下载 (OTA) 更新服务器以及其他相关方(例如 CTS DeviceInfo)。有些信息会在运行时进行检索,而有些信息则是静态定义的信息。
- 设备清单描述了设备可以为框架提供的静态组件。
- 框架兼容性矩阵描述了 Android 框架期待从给定设备中获取的内容。此矩阵是一个静态实体,在开发下一个版本的 Android 框架期间会手动确定此矩阵的组成。
- 框架清单描述了框架可以为设备提供的高级服务。
- 设备兼容性矩阵描述了供应商映像需要框架提供的服务,在设备开发期间会手动确定此矩阵的组成。
这两对清单和矩阵必须在OTA时进行协调,以确保可以获取功能兼容的更新。一般来说,清单描述了提供的内容,兼容性矩阵描述了需要的内容。
清单
VINTF对象会在运行时汇总设备清单和框架清单文件(XML)中的数据以及设备本身的数据。这两个清单采用同一种格式,不过并非所有元素都适用于两者。
设备清单(由设备提供)包含供应商清单和ODM清单:供应商清单会指定SoC通用的HAL、VNDK版本等信息,如:/vendor/etc/vintf/manifest.xml。ODM清单列出了产品专用的HAL,如:/odm/etc/vintf/manifest.xml。
VINTF对象会按以下顺序加载设备清单:
1、 如果存在供应商清单,合并:vendor/odm/fragment
2、 如果存在odm清单,合并:ODM 清单与可选的 ODM 清单
3、 /vendor/manifest.xml
此设置可让采用相同开发板的多个产品共用同一个供应商映像(用于提供通用 HAL),但具有不同的 ODM 映像(用于指定产品专用的 HAL)。
框架清单:
框架清单文件(由Google提供)是手动生成的,位于/system/libhidl/manifest.xml 中。
清单 Fragment:
在Android 10及更高版本中,还可以在构建系统中将清单条目与HAL模块相关联,这有助于在构建系统中有条件地包含HAL模块。
例如,可以在Android.bp或Android.mk文件中,将vintf_fragments添加到任意模块,为此模块添加清单。
vintf_fragments: ["manifest_foo.xml"],
框架兼容性矩阵:
框架兼容性矩阵说明了框架对运行它的设备的要求。矩阵文件与Android框架映像(位于 system.img中)相关联。FCM的要求应通过设备清单来满足(在启动和 OTA 时会强制执行相应要求)。
设备兼容性矩阵:
设备兼容性矩阵说明了设备期望框架满足的一组要求(在启动和 OTA 时会强制执行相应要求)。
匹配规则:
两对兼容性矩阵和清单旨在 OTA 更新时进行协调,以验证框架和供应商实现是否可以相互协同工作。当框架兼容性矩阵与设备清单之间以及框架清单与设备兼容性矩阵之间匹配时,便成功通过此验证。
框架兼容性矩阵版本匹配
如需使设备清单与框架兼容性矩阵相匹配,manifest.target-level 指定的 Shipping FCM 版本必须与 compatibility-matrix.level 指定的 FCM 版本完全相同。否则,这二者将不匹配。
HAL匹配
多个<hal>元素具有 AND 关系。
同一个<hal>中的多个<version>元素具有OR关系。如果指定了两个或两个以上版本,则只需要实现其中一个版本。
同一个<hal>中的多个<instance>和<regex-instance>元素具有AND关系。