在 Zynq MPSoC 上运行 DOOM 游戏
态之间切换。
以下程序通常在这些模式下运行,如ARM 架构参考手册 (D1–1404)中所述:EL0,应用程序;EL1,OS 内核以及通常所描述的相关特权函数;EL2,管理程序;EL3,安全监控器。我们的理论实例直接对应 ARMv8 执行模式 EL0 至 EL2:USER 对应 EL0,SUPER 对应 EL1,HYPER 对应 EL2。ARM 添加第四个特权等级,即 EL3;利用这个特权等级,我们可在安全与非安全环境之间切换 EL0 和 EL1。尽管 EL3 的使用是一个很重要的论题,能够为架构增加大量的功能,但是在本实例中我们将其忽略,并着重介绍 EL0-EL2(利用管理程序的虚拟化)。如果对计算机如何保护金融交易感兴趣,可以参阅 ARMv8 EL3 文档(免费提供,需注册)。这是非常好的参考文档,从中可以获得极为详细的介绍。
图 3:Zynq UltraScale+ MPSoC 架构
进入和退出例外模式
在真实系统中,模式之间的切换比我们的实例更复杂一些。ARM 总结了 ARMv8-A 架构的行为并在参考手册中给出。手册中介绍,只有在接到例外或从例外返回时,才能改变执行所处的例外等级。在接到例外时,例外等级只能升高或保持不变;在从例外返回时,例外等级只能降低或保持不变。只有三个指令能生成针对下个例外等级的例外:SVC (Supervisor Call),生成针对 EL1 的例外;HVC (Hypervisor Call),生成针对 EL2 的例外;SMC (Secure Monitor Call),生成针对 EL3 的例外。这些指令取值范围为 0-65,555,允许每个例外等级有 216 个系统调用。这些指令针对下个例外等级,而且是唯一可供运行在较低例外等级的程序从运行在较高例外等级的程序请求某些内容的机制。在我们的理论实例中,SVC 是 SWITCHSUPER,HVC 是 SWITCHHYPER。
PetaLinux 工具包含一组命令,以供用户在赛灵思 FPGA 和 SoC 上轻松创建和扩展 Linux 系统。
在前一个部分,我们介绍了能够让运行在 USER 模式(EL0)的程序进入 SUPER 模式 (EL1) 的事件。大多数运行在 USER 模式的程序生成的事件是请求存储器。当运行在 EL0 中的用户空间程序从运行在 EL1 中的 OS 请求存储器时,这个用户空间程序的 C 代码可能调用函数 malloc(),再由该函数调用 mmap() 或 sbrk(),以从 OS 请求一个指向可用存储器的指针。在 ARMv8-A 架构中的 Linux 上,这个过程在幕后转化为 SVC 系统调用。该系统调用会把处理器转换为 EL1,从而将控制权送回 OS,后者会解读调用内容并提供正确的响应——本例中是指向所请求存储器区域的指针,或者是一个错误,用以指出没有可用存储器。
演示创建和工具
现在我们来介绍我们团队在 Zynq UltraScale+ QEMU Model 上运行 Doom 时所采用的步骤。这些步骤展示了如何获得和构建运行演示所需的每个组件,如何运行以及以什么顺序运行每个组件,以及如何与演示交互。成功完成该演示之后,你会获得一个环境,用来在上面进行实验,以了解 Xen 管理程序在仿真的 Zynq UltraScale+ MPSoC 上的运行情况。还需要将此迁移植 Zynq UltraScale+ MPSoC 芯片,这可作为练习由用户来完成。
想玩 DOOM 吗?
为了让过程更简单,赛灵思提供基础的根文件系统,这样用户就无需花时间和精力自己构建。此演示所需的所有下载内容在以下网址中均有提供: www.wiki.xil- inx.com/Doom+on+Xen+Demo。
该演示首先通过更新由赛灵思提供的预编译根文件系统 (rootFS),可包含所需的组件。然后,利用赛灵思的 PetaLinux 工具运行演示。rootFS 包含运行于 Linux 系统上的大部分程序——具体来说就是用来启动系统的一组脚本,以及用来实现系统的应用程序与函数库集。我们用来扩展演示中的基础 rootFS 所使用的两个工具分别是 Buildroot 和 PetaLinux。我们使用 Buildroot 为赛灵思提供的基础 rootFS 构建 Doom 二进制文件,同时使用 PetaLinux 创建 rootFS 的剩余部分并引导演示。
Buildroot
Buildroot 是一个简单的构建系统,用于为 Linux 系统创建 rootFS。它使用 make menuconfig 接口,这是一个用来配置 Linux 内核本身的常用方法。Buildroot 包含对 PrBoom 的默认支持,这对于本演示很有帮助。(PrBoom 是我们所使用的 Doom 游戏的 GNU 通用公共许可证 [GPL] 版本。这里我们会穿插使用 PrBoom 和 Doom 这两个术语。 )Buildroot 对 Xen 构建不提供本地支持(尽管它可创建用于构建 Xen 所需的所有库和工具链),因此赛灵思提供 Xen、Xen 工具和为用户预编译的 Xen 库以及其他一些所需的库,以让过程简单直观。
PetaLinux
PetaLinux 工具包含一个命令集,以便让用户在赛灵思 FPGA 和 SoC
- 基于Zynq的OLED驱动设计(10-04)
- 用Zynq-7000 EPP实现端到端广播(06-05)
- 采用Zynq SoC实现Power-Fingerprinting网络安全性(06-04)
- Zynq-7000的柔性直流输电桥臂控制器设计(09-12)
- 采用Zynq SoC实现Power-Fingerprinting 网络安全性(09-12)
- 采用 Zynq SoC 测试新型存储器技术芯片 (01-27)