微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > FPGA和CPLD > 在 Zynq MPSoC上运行 Doom 游戏

在 Zynq MPSoC上运行 Doom 游戏

时间:08-02 来源:互联网 点击:
  • XEN 深入探讨

    正如“Zynq MPSoC 获得 Xen 管理程序支持”(赛灵思中国通讯,第 93 期)中所介绍, Type 1 管理程序在本机硬件上运行,Type 2 管理程序不是软件的最底层,而是托管在 OS 上。Xen 属于 Type 1 管理程序(图 4)。

    以前,我们提到了虚拟处理器(也称虚拟机)。在 Xen 中,这些被称为域。特权最高的域被称为 Dom0;无特权的客户域是 DomU 域。

    Dom0 是 Xen 管理程序在引导时创建的初始域。它是特权域,并驱动平台上的设备。Xen 将 CPU、存储器、中断和定时器虚拟化,为虚拟机提供一个或多个虚拟 CPU、系统存储器的一部分、一个虚拟中断控制器和一个虚拟定时器。除非配置为其他方式,否则 Dom0 可直接访问所有设备并驱动它们。Dom0还运行一组名为半虚拟化 (PV) 后端的驱动,为无特权虚拟机提供对磁盘、网络等设备的访问权。Xen 提供用于发现和初始通信设置的所有工具。作为 DomU 的 OS 通过运行相应的 PV 前端驱动程序来获得对一组通用虚拟设备的访问权。根据 DomU 的数量,单个后端可服务多个前端。有一对适用于所有最常见设备类型(磁盘、网络、控制台、帧缓冲器、鼠标、键盘等)的 PV 驱动程序。PV 驱动程序通常位于 OS 内核(即 Linux)中。几个 PV 后端也可以在用户空间中运行,通常在 QEMU 中。前端在存储器的共享页上使用简单的环协议连接后端。从 Dom0 与管理程序交互要求程序使用定义的管理程序调用(类似于系统调用)。Xen 提供一个名为 Xen Tools (也可写成 xen-tools)的、带有库的参考工具箱。xen-tools 包含一个名为 xl 的程序,该程序可与其他程序一起检查状态和创建客户机。

    xl 中的“create”命令要用到描述客户机的配置文件,如果配置文件规定客户机需要一个由 VNC 会话支持的虚拟帧缓冲器 (VFB),那么 xl 会在 Dom0 用户空间中自动启动虚拟化代码(本演示中,为每个客户机启动一个)。

    doom VM 的配置文件如下所示:

    # 客户机名称 name = “guest1”
    # 要引导的内核镜像 kernel = “/boot/Image”
    # 内核命令行选项
    extra = “console=hvc0 rdinit=/doom.sh”
    # 最初存储器分配 (MB) memory = 56
    # VCPUS 数量 vcpus = 1
    vfb = [ ‘type=vnc, vnclisten=0.0.0.0’ ]

    XEN 中的设备

    为客户机提供设备有三种常用方法:仿真、半虚拟化和直通(图 5)。

    对于设备仿真,当客户机向仿真设备的存储器写入时,写入操作会触发陷阱。陷阱通常就是页面错误。陷阱使处理器能够切换到管理程序,以仿真设备。仿真是灵活的,但速度慢,因为要处理所有陷阱,而且要有人为所有需要仿真的设备编写模型。而且,很难找到方法来加速仿真,因为几乎没有硬件加速;完全是软件方法。

    利用设备半虚拟化,可在管理程序与客户机之间就如何进行通信达成协议。通常有一个共享的存储器区域(以及协议),这看起来像一个设备,而且管理程序在该区域处理请求。例如,为了在 Linux 上支持半虚拟化帧缓冲器,Linux 前端驱动会把从用户空间获得的帧缓冲器写入共享存储器区域;然后使用管理程序调用向管理程序发信号,以通过后端驱动来输出帧。客户机只能通过半虚拟化驱动程序与主机 (Dom0)和其他客户机 (DomU) 对话。这种方案的优势是:用户可以在很多客户机之间共享设备;运行快速;客户机可以运行大部分都没修改的内核。要求的变动在标准接口下面,因此对于应用程序以及内核其余部分来说,前端驱动程序看起来就像正常的网络接口、磁盘或其他设备。支持客户机通信的两个常用协议是 Xen Bus 和 VirtIO。

    在直通模式下,主机将设备“交给”一个客户机。这意味着每次只有一个客户机可以使用该设备。


    图 5 — 方案、半虚拟化和直通方案的对比



    设备性能与安全


    一般来说,与通过直通方式提供的设备相比,仿真的设备性能比较低;半虚拟化方案则趋向于具备足够

    性能。半虚拟化方案和仿真方案的优势在于管理程序可以让设备访问多个实体,而不会将这些实体相互暴露。

    原理简介

    Doom-on-Zynq Ultra- Scale+ 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 客户端。

    此信息和演示能够为管理程序的进一步研究和实验提供很好的基础。当你能够在 QEMU 上用仿真来运行演示之后,就可使用 PetaLinux 工具在 Zynq UltraScale+ MPSoC 芯片上运行。

    如需更多出色的开发人员资源,敬请访问赛灵思的软件开发人员专区。

  • Copyright © 2017-2020 微波EDA网 版权所有

    网站地图

    Top