Android Safety 系列专题【篇七:Android AVF机制】

张开发
2026/4/11 17:42:19 15 分钟阅读

分享文章

Android Safety 系列专题【篇七:Android AVF机制】
如上邮件google要求所有A15以上的设备都必须支持AVF并且AOSP在A15的分区表中新增了pvmfw并且在XTS中引入了对AVF的一些列兼容性测试。因此本篇就是关于这一政策引起的几个问题进行解读。一、AVF概念理解1、什么是AVFAVFAndroid Virtualization FrameworkAndroid虚拟化框架Android 13引入的系统级框架允许在Android设备上创建和运行隔离的虚拟机Virtual Machine虚拟机通过软件模拟的完整计算机系统拥有独立的操作系统和资源Hypervisor虚拟机管理器负责创建、管理和调度虚拟机的软件层Protected VM受保护虚拟机内存被硬件隔离宿主系统无法访问用于安全敏感场景MicrodroidAVF提供的轻量级Android虚拟机镜像专为虚拟化场景优化AVF全称Android Virtualization Framework翻译过来就是Android虚拟化框架。那么google为什么要推行AVF呢在引进AVF之前在引进AVF之后AVF就是如上接受保护的Protected VM因为AVF具有隔离环境的作用因此当即使android是root的至少VM也是安全的。Protected VM依赖多层硬件机制实现隔离相比传统式Non-protected VM有如下优势内存隔离软件隔离Stage-2页表硬件隔离 加密Host可访问性⚠️ 可以访问✅ 无法访问安全级别功能隔离级别安全隔离级别性能开销较低较高用途兼容性测试、功能隔离密钥管理、支付处理硬件要求KVM即可需要TEE/内存加密支持2、AVF技术架构AVF技术还是非常复杂的设计到上下底层这里就提供一张AI画的图整个架构设计到如下模块系统Feature声明android.software.virtualization.frameworkandroid.hardware.virtualization.vcpuandroid.hardware.virtualization.protected_vmHAL接口 (AIDL)│ │ ┌─────────────────────────────────────────────────┐ │ │ │ │ │ hardware/interfaces/virtualization/ │ │ │ │ │ │ ├── IVirtualizationService.aidl │ │ │ │ │ │ ├── IVirtualMachine.aidl │ │ │ │ │ │ ├── IGlobalVmCallback.aidl │ │ │ │ │ │ └── types.aidl (Capability枚举) │ │ │ │ │ └─────────────────────────────────────────────────┘ │ │框架API│ │ ┌─────────────────────────────────────────────────┐ │ │ │ │ │ android.os.VirtualizationManager │ │ │ │ │ │ • createVirtualMachine() │ │ │ │ │ │ • getVirtualMachine() │ │ │ │ │ │ • getSupportedCapabilities() │ │ │ │ │ │ │ │ │ │ │ │ android.system.virtualmachine.VirtualMachine │ │ │ │ │ │ • start() / stop() │ │ │ │ │ │ • connect() │ │ │ │ │ └─────────────────────────────────────────────────┘ │ │Microdroid镜像│ │ ┌─────────────────────────────────────────────────┐ │ │ │ │ │ /apex/com.android.virt/bin/microdroid │ │ │ │ │ │ ├── microdroid.img (系统镜像) │ │ │ │ │ │ ├── microdroid_kernel (内核镜像) │ │ │ │ │ │ └── microdroid_initrd.img (initrd) │ │ │ │ │ └─────────────────────────────────────────────────┘ │ │内核配置CONFIG_KVMyCONFIG_KVM_ARM_HOSTyCONFIG_VIRTUALIZATIONyCONFIG_VHOST_VSOCKy设备节点│ │ ┌─────────────────────────────────────────────────┐ │ │ │ │ │ /dev/kvm (KVM方案) │ │ │ │ │ │ /dev/gunyah (Gunyah方案) │ │ │ │ │ │ /dev/vhost-vsock (VM通信) │ │ │ │ │ └─────────────────────────────────────────────────┘ │ │3、AVF技术总结定义Android Virtualization Framework Android官方虚拟化框架让Android能创建和管理隔离虚拟机的系统级解决方案。核心价值硬件级安全隔离 → 即使Android被攻破敏感数据仍安全 独立执行环境 → 敏感操作在隔离VM中完成 统一API → 开发者无需关心底层Hypervisor差异 。技术栈 应用API → Framework → HAL → Kernel → Hypervisor → Hardware必要条件 CPU支持虚拟化扩展ARMv8-A EL2 内核启用KVM/Gunyah 实现IVirtualizationService HAL 系统Feature声明二、XTS案例1、MicrodroidTestApp.VTS问题链接https://jira.tinno.com/browse/PAAM-1344失败日志arm64-v8a MicrodroidTestApp.VTS com.android.microdroid.test.MicrodroidCapabilitiesTest#avfIsRequired failDevice doesnt support AVF用例分析根据关键日志Device doesnt support AVF搜索如下代码如上代码逻辑如果ro.board.api_level小于202404就不需要测试这一条跳过下一步测试此条PASS如果大于202404且没有配置FEATURE_VIRTUALIZATION_FRAMEWORK就直接报Device doesnt support AVF。因此此问题原因是我们没有配置如下feature在packages/modules/Virtualization/build/apex/product_packages.mk文件中有如下配置permissions feature nameandroid.software.virtualization_framework / /permissions2、MicrodroidTestApp.CTS问题链接https://jira.tinno.com/browse/PAAM-1817失败日志arm64-v8a MicrodroidTestApp.CTS com.android.microdroid.test.MicrodroidCapabilitiesTest#supportForProtectedOrNonProtectedVms failA device that has FEATURE_VIRTUALIZATION_FRAMEWORK must support at least one of protected or non-protected VMs测试用例根据报告日志可以看出来这里的getVirtualMachineManager().getCapabilities()获取出来的结果是0表示都不支持如上流程逻辑链表示当前基线根本就不支持AVF。因此最后此题需要提case到高通因为这个芯片可能就不支持我们是升级项目因此最后向google申请豁免。解决方案最后意外之喜正好遇上高通基线升级升级patch有如下修改声明android.software.virtualization_framework特征能力配置hypervisor支持protected VM能力3、Google pvmfw.img报错日志解决方案如上两个问题最后解决方式在测试之前fastboot flash pvmfw pvmfw.img替换pvmfw镜像由此证明此项还和pvmfw分区有关系

更多文章