在 Zynq MPSoC 上运行 DOOM 游戏
行选项
extra = "console=hvc0 rdinit=/doom.sh"
# 最初存储器分配 (MB)
memory = 56
# VCPUS 数量
vcpus = 1
vfb = ['type=vnc, vnclisten=0.0.0.0']
XEN 中的设备
为客户机提供设备有三种常用方法:仿真、半虚拟化和直通 (图 5)。对于设备仿真,当客户机向仿真设备的存储器写入时,写入操作会触发陷阱。陷阱通常就是页面错误。陷阱使处理器能够切换到管理程序,以仿真设备。仿真是灵活的,但速度慢,因为要处理所有陷阱,而且要有人为所有需要仿真的设备编写模型。而且,很难找到方法来加速仿真,因为几乎没有硬件加速;完全是软件方法。
图 5:方案、半虚拟化和直通方案的对比
利用设备半虚拟化,可在管理程序与客户机之间就如何进行通信达成协议。通常有一个共享的存储器区域(以及协议),这看起来像一个设备,而且管理程序在该区域处理请求。例如,为了在 Linux 上支持半虚拟化帧缓冲器,Linux 前端驱动会把从用户空间获得的帧缓冲器写入共享存储器区域;然后使用管理程序调用向管理程序发信号,以通过后端驱动来输出帧。客户机只能通过半虚拟化驱动程序与主机 (Dom0)和其他客户机 (DomU) 对话。这种方案的优势是:用户可以在很多客户机之间共享设备;运行快速;客户机可以运行大部分都没修改的内核。要求的变动在标准接口下面,因此对于应用程序以及内核其余部分来说,前端驱动程序看起来就像正常的网络接口、磁盘或其他设备。支持客户机通信的两个常用协议是 Xen Bus 和 VirtIO。
在直通模式下,主机将设备“交给”一个客户机。这意味着每次只有一个客户机可以使用该设备。
设备性能与安全
一般来说,与通过直通方式提供的设备相比,仿真的设备性能比较低;半虚拟化方案则趋向于具备足够性能。半虚拟化方案和仿真方案的优势在于管理程序可以让设备访问多个实体,而不会将这些实体相互暴露。
原理简介
Doom-on-Zynq UltraScale+ MPSoC 的处理上下文环境就像洋葱一样有很多层(图 6)。Cortex-A53 中是四个 ARMv8 内核。在每个内核上,管理程序运行在 EL2 中,客户机(Dom0 或 DomU)运行在 EL0/EL1 中。每个 DomU 客户机都运行 Linux;Doom (PrBoom) 运行在用户空间中。Doom 使用简单直接媒体层 (SDL),通过 SVC 指令(最终)与帧缓冲器前端驱动对话。帧缓冲器前端将缓冲器写入 Dom0 建立的共享存储器区域。前端驱动通过协议(例如 Xen Bus 或 VirtIO)使用 HVC 指令(最终)与 Dom0 上运行的虚拟化代码通信。在 Dom0 上运行的虚拟化代码提供一个用于显示的后端,然后该后端由虚拟化代码的 VNC 服务器进行编码,并通过网络送到 VNC 客户端。
图6:X86 架构上从 PetaLinux 工具启动 QEMU
此信息和演示能够为管理程序的进一步研究和实验提供很好的基础。当你能够在 QEMU 上用仿真来运行演示之后,就可使用 PetaLinux 工具在 Zynq UltraScale+ MPSoC 芯片上运行。
- 基于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)