如果您已利用安卓虚拟化框架(AVF)开始进行工作,那么您可能知道该框架提供了一组应用程序接口,以确保您可以配置和启用受保护的虚拟机(VM)。许多应用程序开发人员均具有想要在管理程序帮助下从主安卓程序移出、然后移至隔离及受保护虚拟机中的用例,而安卓虚拟化框架则使其成为可能。
您可能还使用过受保护的内核型虚拟机(pKVM),该虚拟机属于安卓虚拟化框架的参考管理程序。该虚拟机非常适合计算用例,但在高通创新中心(QUIC),我们已经在高通科技公司的芯片组上,用Gunyah 管理程序软件取代了受保护的内核型虚拟机 – 本公司自己拥有、具有更高通用性的管理程序。通过Gunyah,我们可以在汽车、移动宽带、物联网和可穿戴设备等各种用例中使用一个管理程序。
我们已经上传了Gunyah,以供安卓社区的一般使用。在本篇博文中,我们将说明Gunyah程序如何运行,该程序如何适应安卓虚拟化框架,以及您如何将该程序用于受保护的用例,例如在安卓14程序虚拟机上进行的隔离编译。
安卓虚拟化框架中的受保护内存
安卓虚拟化框架在管理程序中需要什么?除其他事项外,管理程序必须支持:
- 动态虚拟机分配 – 首先,管理程序必须能够启动虚拟机。请注意,安卓虚拟化框架并未要求客户机建立在linux基础上。
- 内存映射输入/输出存取 – 管理程序必须能够处理来自虚拟中央处理器的内存映射输入/输出(MMIO)存取,以支持虚拟输入/输出(即:网络和磁盘设备驱动程序的虚拟化标准)。
- 关机 – 管理程序必须允许重新启动虚拟机。
- 针对具体架构的必要设备 – 该类设备必须包括中断控制器和计时器。
- 受保护的虚拟机 – 管理程序必须强制执行内存隔离,以确保虚拟机处于您所认为的状态;其中包括身份验证和防回滚(安卓验证启动)。受保护的虚拟机证明其由可信的启动链加载。
虚拟机使用了大量内存,而您不希望安卓系统能够访问该类内存。下图显示了需要将哪些内存与主机隔离才能启动受保护虚拟机的问题。
主机内存 | 主机内存 | 客机2阶段 | 客机专用内存 |
启动虚拟机前查看主机内存 | 启动虚拟机后查看主机内存 | 客机/主机共享内存 |
不同的分散区域被映射到客机内存中,并且不再被主机访问。
独立编译是安卓虚拟化框架在随安卓14系统提供的商业设备上支持的第一个用例。安卓虚拟化框架虚拟机可确保获得安卓操作系统的保护。在未来,更多的安全计算任务能够在一台或多台虚拟机上运行。
在安卓虚拟化框架中使用Gunyah
高通科技公司一直在使用Gunyah代替内核型虚拟机,而 Gunyah是由高通创新中心作为小型微内核开发的1型管理程序。
从一开始,我们就以不同于其他管理程序的方式设计Gunyah。其主要优点包括:
- 去特权虚拟机,包括主虚拟机;
- 内存以及输入/输出隔离
- 中断指定
- 基于EL2的调度以及由管理程序辅助的设备模拟
- 针对汽车(汽车工业软件可靠性联合会)、移动设备和物联网优化的性能
- 不需要将Linux作为主机虚拟机即可全面运行
如下面框图所示,Gunyah包含一个资源管理器(RM),可用于所有虚拟中央处理器的访问以及虚拟机的内存管理。
安卓系统针对所有虚拟化任务对资源管理或管理程序本身进行处理。资源管理是其自有的EL1虚拟机,与所有其他虚拟机隔离运行,并针对Gunyah提供的EL2实施强大的功能性资源管理策略。
与其他管理程序不同,Gunyah中的设备隔离利用了骁龙硬件。针对架构对该硬件中的系统内存管理单元(SMMUs)和输入/输出内存管理单元(IOMMUs)实施了标准化,但骁龙硬件在使用它们的少数处理器中脱颖而出。
为了适应安卓虚拟化框架,我们对Gunyah进行了修改,包括安卓系统提供的设备模拟以及针对受保护虚拟机计算的盗用时间。
启动虚拟机时的工作流程
下图显示了Gunyah启动受保护虚拟机时的操作顺序:
安卓启动加载程序(ABL)在针对安卓虚拟框架启动受保护的虚拟机之前加载并行虚拟机固件(pvmfw.bin)。除此之外,为了建立信任链,启动加载程序会验证固件并将启动证书链附加到固件上。当Gunyah发送运行受保护虚拟机的请求时,首先利用启动证书链(BCC)加载并行虚拟机固件。
然后执行转移至受保护的虚拟机。在安卓14程序的隔离编译用例中,Microdroid虚拟机在系统更新过程中对二进制文件进行编译和签名。该虚拟机将二进制文件保存到存储空间中;在针对系统更新重新启动后,Microdroid再次启用,并在主机将编译好的二进制文件安装到设备上之前对其进行验证。通过该过程,可以在减少停机时间的情况下完成系统更新,因为编译和签名可以在安卓系统仍然可用的情况下进行。
为了支持安卓虚拟化框架中的Gunyah而添加新程序
以下框图说明了具有Gunyah的安卓虚拟化框架架构:
我们针对安卓用户空间中的虚拟机监视器crosvm(类似于虚拟操作系统模拟器-内核型虚拟机)提交了十多项更改。该类更改包括添加一个新的管理程序箱,以便针对Gunyah使用本公司的Linux驱动程序,该驱动程序提取了与Gunyah的所有通信。
轮到你了:请试用Gunyah
总之,Gunyah是一种多功能管理程序,可以在安卓虚拟化框架上启动多台在安卓14系统中所支持的受保护虚拟机。我们已经提供了Gunyah的开源,增加了对于crosvm虚拟机监视器的支持,我们正在努力增加对Linux支持,以启动和管理虚拟机。
我们想要通过Gunyah支持更多的用例,所以 请下载Gunyah并向我们提供您的开发成果以及审核意见。。您可以在Gunyah开源树中了解有关如何启动辅助虚拟机的步骤;您可以可以在该虚拟机上运行任何计算任务。您可以在此处查找到最新(截至到本博文发布时)的内核补丁。
对于未来,我们的开发工作将集中在几个方向上,包括通过guestmemfd为客户机管理内存,以及根据需求动态发展虚拟机。我们欢迎社区的投入,并期待能够通过合作取得成果。如要了解更多具体内容,请参阅我们在Linux管道开发人员大会上提交的报告“向安卓虚拟化框架添加第三方管理程序”,并链接到我们的幻灯片和视频。
如果您对这个名称很好奇,“gunyah”是一个小型临时避难所的术语,传统上是由澳大利亚土著居民使用。这一名称反映了安卓虚拟化框架第三方管理程序的暂时性和多功能性,这也是对澳大利亚高通公司开发同事的致敬。
骁龙与高通品牌产品均属于高通科技公司和/或其子公司产品。Gunyah属于高通创新中心的产品。
相关博客:
利用Bazel、Kleaf和设备驱动程序开发包构建外部安卓内核模块 – 你准备好了吗?
用户空间应用程序编程接口兼容性检查器:在Linux内核中检测用户空间破坏情况的自动化工具
相关标签:
在所发布内容中表达的观点仅为原作者的个人观点,并不代表高通公司或其子公司(以下简称为“高通公司”)的观点。所提供的内容仅供参考之用,而并不意味着高通公司或任何其他方的赞同或表述。本网站同样可以提供非高通公司网站和资源的链接或参考。高通公司对于可能通过本网站引用、访问、或链接的任何非高通公司网站或第三方资源并没有做出任何类型的任何声明、保证、或其他承诺。