当前位置: 首页 > news >正文

VINTF中manifest.xml和compatibility_matrix.xml的作用

核心概念:VINTF (Vendor Interface)

首先,要理解这两个文件,必须明白它们存在的背景——VINTF

  • 目标:解决 Android 生态的碎片化问题,确保框架(Framework) 和供应商(Vendor) 实现(如 SoC、内核、驱动程序等)能够协同工作,并保证设备在升级系统后仍能保持一致性(Compatibility)
  • 角色:它是一个标准化的接口。框架层通过这个接口声明它“需要什么”,供应商实现则通过这个接口声明它“提供了什么”。VINTF 就是匹配这两者的“中间人”
  • 类比:就像一个硬件和软件之间的“契约” 或 “菜谱”。框架(厨师)说要做一道菜(系统功能),需要哪些食材(HAL 服务、内核版本等)。供应商(食材供应商)则提供一份清单,说明自己有哪些食材。VINTF 确保厨师拿到的食材能做出想要的菜

而 manifest.xml 和 compatibility_matrix.xml 正是构成这份“契约”的两份关键文件

一. manifest.xml (清单文件)

作用:声明“我提供了什么”

manifest.xml 文件是一个自我描述的文件,由某个实体(通常是系统的一个分区)生成,用于列出该实体所提供的所有接口、功能和服务

谁拥有这个文件?

  • 设备制造商 (OEM)/供应商:在 vendor 分区或 odm 分区中有一个 vendor manifest.xml(或 odm manifest.xml)。它列出了供应商实现所提供的所有 HAL(硬件抽象层)服务、版本、SeLinux 策略等
  • 系统框架:在 system 分区中有一个 system manifest.xml(通常由 framework compatibility matrix 编译生成)。它列出了系统框架所提供的功能,例如 Java 接口、原生服务等

manifest.xml 的主要内容:

  • HAL 元素:声明提供的 HAL 服务(如 android.hardware.vibrator@2.2::IVibrator)及其版本
  • 内核元素:声明使用的内核版本 (<version>) 和配置(如内核模块 kmod,必需的内核配置 config
  • SeLinux 策略版本:声明 SeLinux 的版本
  • Framework 功能:(仅限系统 Manifest)声明系统 API 等

示例:一个简化的 vendor manifest.xml

<manifest version="2.0" type="device"><hal format="hidl"><name>android.hardware.vibrator</name><transport>hwbinder</transport><version>2.2</version><interface><name>IVibrator</name><instance>default</instance></interface></hal><hal format="aidl"><name>android.hardware.light</name><version>1</version><interface><name>ILight</name><instance>default</instance></interface></hal><kernel version="5.10.43"><config><key>CONFIG_ARM</key><value>y</value></config></kernel><sepolicy><version>30.0</version></sepolicy>
</manifest>

此文件告诉系统:“我(供应商)提供了一个 Vibrator HAL 2.2 版,一个 Light AIDL 服务,内核版本是 5.10.43,并且 SeLinux 版本是 30.0”

二. compatibility_matrix.xml (兼容性矩阵文件)

作用:声明“我需要什么”

compatibility_matrix.xml 文件是一个要求文件,由一个实体制定,用于指定它需要哪些接口、功能和服务才能正常运行

谁拥有这个文件?

  • 系统框架:在 system 分区中有一个 framework compatibility matrix.xml。它定义了 Android 框架要正常运行,供应商必须提供哪些 HAL、内核功能等。这是最重要的兼容性矩阵
  • 设备制造商 (OEM)/供应商:在 vendor 分区中也可以有一个 device compatibility matrix.xml。它用于声明供应商实现所需的其他可选组件(例如,某些供应商特有的功能需要特定的系统属性支持)

compatibility_matrix.xml 的主要内容:

与 manifest.xml 结构类似,但它表达的是“需求”而非“提供”

  • HAL 需求:要求设备必须提供某个特定版本的 HAL(如 android.hardware.vibrator@2.1+,表示至少需要 2.1 版本)
  • 内核需求:要求内核必须满足的最低版本 (<min-version>) 和必须包含的配置项
  • SeLinux 策略版本需求:要求必须达到的最低 SeLinux 版本
  • Avb 版本需求:要求 Android Verified Boot 的版本

示例:一个简化的 framework compatibility matrix.xml

<compatibility-matrix version="2.0" type="framework"><hal format="hidl" optional="false"><name>android.hardware.vibrator</name><version>2.1</version> <!-- 至少需要 2.1 版本 --><version>2.2</version> <!-- 但也兼容 2.2 版本 --></hal><kernel version="5.4"> <!-- 要求内核版本至少是 5.4 --><config><key>CONFIG_ARM</key><value>y</value> <!-- 要求内核必须配置 CONFIG_ARM=y --></config></kernel><sepolicy><kernel-sepolicy-version>30</kernel-sepolicy-version> <!-- 要求 SePolicy 版本至少为 30 --></sepolicy>
</compatibility-matrix>

此文件告诉供应商:“我(Android 框架)要能运行,你(供应商)必须至少提供一个 Vibrator HAL 2.1 或 2.2 版本,内核不能低于 5.4,并且必须开启 CONFIG_ARM 配置,SeLinux 策略版本不能低于 30”

两者的交互与深刻理解

现在,我们把两者结合起来,看看 VINTF 如何工作:

  1. 构建时:OEM 将供应商的 manifest.xml 和系统的 compatibility_matrix.xml 组合在一起,通过 assemble_vintf 等工具生成最终的设备 compatibility matrix。这个过程会检查需求是否被满足
  2. 运行时:在设备启动时,vintf 守护进程会运行
  3. 收集信息:它从 systemvendorodm 等分区收集所有的 manifest.xml 和 compatibility_matrix.xml 文件
  4. 匹配检查:它将所有这些信息组合成一个运行时数据库
    ○ 
    它会检查框架的需求 (framework compatibility matrix) 是否都被供应商的实现 (vendor manifest满足
    ○ 
    它也会检查供应商的需求 (device compatibility matrix, 如果有) 是否被系统和其他分区满足
  5. 提供信息vintf 对象通过 dump() 方法或 lshal 等工具,将这些信息提供给需要查询的设备信息(如 getprop 中的 vendor.* 属性)或 OTA 更新服务器

OTA 更新的关键作用:

当系统进行 OTA 更新时,更新的系统镜像中会带有一个新版本的 framework compatibility matrix.xml。在安装更新前,设备会:

  1. 检查当前设备上供应商实现的 vendor manifest.xml
  2. 对比新的框架“需求清单”(新的兼容性矩阵)
  3. 如果供应商提供的“供给清单”满足新系统的所有需求,则允许OTA更新
  4. 如果不满足(例如,新系统要求一个 HAL 的 3.0 版本,但供应商只提供了 2.2 版本),则阻止更新,从而避免了更新后设备无法启动或功能异常的问题

总结对比

特性manifest.xmlcompatibility_matrix.xml
核心作用声明供给 (“我有什么”)声明需求 (“我要什么”)
文件类型自我描述 (Self-description)要求规范 (Requirement Specification)
常见位置vendor/etc/vintf/, system/etc/vintf/system/etc/vintf/, vendor/etc/vintf/
主要作者供应商 (HAL 实现者)谷歌 Android 团队 (定义框架需求)
内容示例<hal><name>vibrator</name><version>2.2</version></hal><hal><name>vibrator</name><version>2.1</version></hal>
关系供应商的“投标书”框架的“招标书”

一句话概括:

VINTF 通过对比供应商 manifest.xml(我提供了什么)和框架 compatibility_matrix.xml(我需要什么),确保软硬件双方遵守共同的接口规范,从而实现了 Android 系统的兼容性可扩展性可升级性

http://www.dtcms.com/a/389087.html

相关文章:

  • AI时代云原生数据库一体机的思考
  • 配置manifest.xml和compatibility_matrix.xml
  • Prometheus高可用监控架构性能优化实践指南
  • 低代码平台与云原生开发理念是否契合?
  • 红队测试手册:使用 promptfoo 深入探索大语言模型安全
  • el-date-picker设置默认值
  • 结语:Electron 开发的完整路径
  • 数据结构系列之线性表
  • Vue2 生命周期钩子详解:beforeCreate、created、mounted、beforeDestroy 用法顺序与坑点指南
  • electron nodejs安装electron 以及解压打包
  • 每日一题:链表排序(归并排序实现)
  • 团体程序设计天梯赛-练习集 L1-032 Left-pad
  • AI的出现,能否代替IT从业者
  • 一个基于Java+Vue开发的灵活用工系统:技术实现与架构解析
  • 原神望陇村遗迹 解谜
  • 半导体制造常提到的Fan-in晶圆级封装是什么?
  • MySQL 专题(五):日志体系(Redo Log、Undo Log、Binlog)原理与应用
  • 锂电池取代铅酸电池作为及其老化率计算常用算法
  • FreeRtos面试问题合集
  • Codeforces Round 1051 Div.2 补题
  • tokenizer截断丢失信息,如何处理?
  • Mybatis学习笔记03-XML映射配置
  • 时空预测论文分享:模仿式生成 动态局部化 解耦混淆因子表征 零样本/少样本迁移
  • 更新!Windows 11 25H2 四合一版【版本号:26200.5074】
  • CentOS 7.9 离线部署 KVM + WebVirtMgr,通过WebVirtMgr创建虚拟机教程
  • Python实现在模型上进行点云(下)采样
  • Vue 原理三大子系统:编译时、响应式与运行时
  • 黑马SpringCloud02
  • Windows安装Kafka(kafka_2.12-3.9.1),配置Kafka,以及遇到的问题解决方案
  • Kafka 硬件与操作系统选型与调优实战