加入收藏 | 设为首页 | 交流中心 | 我要投稿 | RSS
您当前的位置:首页 > 技术中心 > 亿家争鸣

INTEL为啥要收购ALTERA,它在布一个很大局---Xilinx run DOOM.

时间:2016-08-11 11:42:23  来源:  作者:

赛灵思和 DornerWorks 的系统软件团队在赛灵思的 Zynq® Ultrascale+TM MPSoC 上启动 Xen Project 管理程序时,我们发现可通过运行 1993年的流行电子游戏 Doom 来演示和测试系统。这款射击游戏使团队可以探讨 Xen 工程设计话题,以求将知识和经验传授给以后的管理程序使用者。K34快充网络

我们团队使用适用于 QEMU (开源 Quick Emulator)的 Zynq UltraScale+MPSoC 仿真模型为软件进行Doom 演示做好准备,当芯片到达时,只需数小时就能启动运行,不再需要等上数天。K34快充网络

如何针对 Zynq UltraScale+ MPSoC通过 QEMU Xen 上运行 Doom呢,在详细介绍具体步骤之前,我们先来了解什么是管理程序,以及它们如何与 Zynq UltraScale+ MPSoC 上的K34快充网络

处理器协同工作。K34快充网络

管理程序及其工作原理K34快充网络

管理程序是一种可虚拟化处理器的计算机程序。运行在虚拟化处理器上的应用程序和操作系统似乎完全拥有系统,但事实上管理程序负责管理K34快充网络

 K34快充网络

 K34快充网络

虚拟处理器对物理机资源(例如存储器和处理内核)的访问。管理程序之所以流行,是因为能实现设计分区以及系统上运行的独立软件元素之间的隔离。K34快充网络

为了支持虚拟化,物理处理器必须提供一个供管理程序运行的特殊“模式”。因此,介绍处理器模式有助于理解管理程序如何完成处理器魔法。K34快充网络

所有处理器都有一些指令,这些指令可操作寄存器中存储的值,并可读写存储器。处理器的模式是指令和寄存器的集合,以及利用指令访问寄存器和存储器时要遵守的规则。为了便于解释,我们以通用处理器为例来介绍,并使用与结构无关的术语。在这个实例中,处理器具有特定的寄存器、指令和模式。寄存器包括 RegisterARegisterBRegisterCUserProgramCounterRegister-Super SuperProgramCounter。指令包括以下内容。K34快充网络

ADD Register3 Register1 Register2 Register1Register2 相加,并把结果存入 Register3,即 Register3 = Register1 + Register2K34快充网络

MOVTO Register2 Register1 Register1 中地址所指向的存储器内容移动到 Register2K34快充网络

MOVFROM Register2 Register1 Register1的内容移动到 Register2 中地址所指向的存储器。K34快充网络

ENTERSUPER 进入处理器的 SUPER 模式。K34快充网络

EXITSUPER 退出 SUPER 模式并进入 USER模式。K34快充网络

USER 模式下,处理器的指令的功能受到限制。本例中,指令可对除 RegisterSuper SuperProgramCounter以外的所有寄存器进行读和写操作,处理器可执行除 EXITSUPER 以外的所有指令。K34快充网络

此外,在 USER 模式下,所有指令只能读和写一部分存储器,例如从地址 0x0000_0100 K34快充网络

0x0FFF_FFFF。在 USER 模式下,如果程序尝试执行不应该执行的指令,或者访问无权访问的寄存器或存储器位置,那么处理器将暂停出错指令 (offending instruction)K34快充网络

SUPER 模式下,处理器的指令可以读/ 写上述所有寄存器,包括 RegisterSuper SuperProgram-Counter。以上所列的所有指令,包括 EXITSUPER,都可以执行,另外,附加的指令 ENTERHYPER 也可执行(后面详细介绍该指令)。此外,在 SUPERK34快充网络

模式下,指令可以访问系统中的全部存储器(从0x0000_0000 0x7FFF_ FFFF)。K34快充网络

采用带模式的处理器,使我们可以利用设计分区来更简单地解决软件工程设计问题。以上实例中,只有一种方法进入 SUPER 模式:执行 ENTERSUPER指令。同样,只有一种方法退出 SUPER 模式: 执行 EXITSUPER。此外,在 USER 模式下程序只能访问机器的部分存储器。有了这种方案,我们可编写一个程序让处理器同时运行多个 USER 模式程序。这个“操作系统”(OS) 程序运行在 SUPER模式,并管理在 USER 模式中运行的程序。当 OS 运行时,会查看需要运行的所有 USER模式程序,选择一个运行,然后使用 EXITSUPER这样的指令通知处理器切换到 USER 模式以运行程序。所选的程序会一直运行,直到有事件导致处理K34快充网络

器切回 SUPER 模式。这类事件可以是来自 USER模式程序的 ENTERSUPER 指令,或外部事件,例如定时器,它可以不提醒正在 USER 模式下运行的程序将处理器切换到 SUPER 模式。无论切换如何发生,每当事件发生时,我们都可构建 OS 以根据相应策略相继选择和运行 USER 程序。当切换快速进行时,用户认为 USER 程序同时运行。K34快充网络

YPER 模式的用处是让很多 SUPER 程序运行。SUPER模式下的每个程序都可以是 OS;这些 OS 本身会让很多USER 程序并行运行。K34快充网络

SUPER 处理器模式还能防止 USER 程序干扰运行在 SUPER 模式的程序或其他 USER 模式程序。USER 模式程序的任何错误或违规都可被控制在该程序自身的实例中,不会破坏或干扰为 SUPER 模式操作保留的系统存储器和寄存器。K34快充网络

听起来很好,但能否用另一个模式实现一些功能?K34快充网络

对我们的机器稍加扩展,就可以引入 HYPER 模式。HYPER 模式可以读/写所有初始寄存器(RegisterARegisterBRegisterCUserProgramCounterRegisterSuper SuperProgramCounter)以及两个附加寄存器:RegisterHyper HyperProgramCounterK34快充网络

HYPER 模式下的指令包括初始集以及下面的斜体字。K34快充网络

ADD Register3 Register1 Register2 Register1 Register2 相加并把结果放在 Register3 中,即 Register3 = Register1 + Register2K34快充网络

MOVTO Register2 Register1 Register1 中地址所指向的存储器内容移到 Register2K34快充网络

MOVFROM Register2 Register1 Register1 的内容移到 Register2 中地址所指向的存储器。K34快充网络

MOVTOPHYS Register2 Register1 Register1 中物理地址指向的存储器内容移到 Register2K34快充网络

MOVFROMPHYS Register2 Register1 Register1 的内容移到 Register2 中地址指向的物理存储器。K34快充网络

ENTERSUPER 进入处理器的 SUPER 模式。K34快充网络

EXITSUPER 退出 SUPER 模式并进入 USER 模式。K34快充网络

ENTERHYPER 进入处理器的 HYPER 模式。K34快充网络

EXITHYPER 退出处理器的 HYPER 模式。K34快充网络

SWITCHSUPER RegisterHyper 切换到 SUPER 程序,该程序将使用 RegisterHyper中的值来执行下一个 SUPER 程序。K34快充网络

HYPER 模式中的附加指令和寄存器允许处理器切换哪个程序在 SUPER 模式中运行,就像 SUPER 模式允许处理器切换哪个程序在 USER 模式中运行一样。HYPER 模式的一个特性是能够切换哪个存储器 SUPER 模式能看到;当一个在 HYPER 模式中运行的程序执行 SWITCHSUPER RegisterHyper 时,底层存储器完全断开。这就是说当 HYPER 模式中的程序执行了 EXITHYPER 之后,下个 SUPER 程序运行之时,SUPER 模式看到的实际物理存储器与运行在 SUPER 模式中的另一个程序使用的物理存储器不同。SUPER 模式程序仍使用相同地址访问存储器,但是该地址指向不同的物理位置。图 1 显示了执行 SWITCHSUPER RegisterHyper 前后的处理器存储器视图。K34快充网络

HYPER 模式很有用,是因为它允许很多个 SUPER 程序运行。SUPER 模式中每个程序都可以是 OS;这些 OS 本身可以让很多 USER 程序并列运行.这意味着,我们可以在相同硬件上运行多个 OS,例如 Windows Linux;在一个处理器上运行 20 Linux 实例;或者之间的任意组合。由于每个虚拟 OS 实例无法看到另一个 OS 实例,因此如果一个崩溃,不会使另一个实例也崩溃。HYPER 模式的特性还有其他应用:我们可以在多个 OS 之间对系统资源分区;监测 HYPER 模式下每个 OS 的执行,以在崩溃时重启;以及在虚拟 OS 运行时密切关注系统状态。K34快充网络

随着处理器从 USER 切换到 SUPER 模式,再从 2015年第四季度第二期K34快充网络

9K34快充网络

SUPER 切换到 HYPER 模式,机器会赋予执行代码更多特权。本例中,USER 模式程序只有权使用四个寄存器(RegisterARegisterBRegisterC UserProgramCounter)和四个指令:(ADDMOVTOMOVFROMENTER- SUPER)。此外,USER 程序只能读写 0x0000_0100 0x0FFF_ FFFF 的存储器。一旦进入 SUPER 模式,处理器允许指令与 RegisterSuper SuperProgramCounter 对话,并允许执行 EXITSUPER ENTERHYPER。此外,SUPER 程序可以访问从 0x0000_0000 0x7FFF_FFFF 的存储器。K34快充网络

最后,一旦处理器进入 HYPER 模式,其指令就可以操作 RegisterHyper HyperProgramCounter,而且程序可执行 SWITCH-SUPER EXITHYPERK34快充网络

HYPER 模式还允许处理器读写所有虚拟存储K34快充网络

1 HYPER 模式下执行 SWITCHSUPER RegisterHyper 的前后区别K34快充网络

处理器地址K34快充网络

模式K34快充网络

处理器地址K34快充网络

模式K34快充网络

存储器SUPERK34快充网络

模式看到K34快充网络

存储器SUPERK34快充网络

模式看到K34快充网络

物理存储器K34快充网络

物理存储器K34快充网络

之前K34快充网络

之后K34快充网络

XCELL 软件刊: 封面专题K34快充网络

10K34快充网络

0x0000_000K34快充网络

00x0000_00FF0x0000_01000x0FFF_0FFFADDMOVTOMOVFROMENTERSUPERRegisterARegisterBRegisterCUserProgramCounter0x1000_00000xK34快充网络

7FFF_FFFF0x8000_00000xFFFF_FFFF................USERUSERSUPERHYPEREXITSUPERENTERHYPERRegisterSuperSuperProgramCounterK34快充网络

SUPERMOVTROPHYSMOVFROMPHYSEXITHYPERSWITHCHSUPERRegisterSuprSuperProgramCounterHYPERK34快充网络

2 各种模式如环形所示K34快充网络

器,0x0000_0000 0xFFFF_FFFF,以及读写实际物理存储器。这些特权等级通常被直观地用环形来描述(图 2)。主环,即 HYPER 环为特权等级较低的环赋予权限,最终可控制整个系统。K34快充网络

理论结合实践K34快充网络

ARM® 创建处理器设计,供 ARM 合作伙伴构建芯片用。ARM 处理器包含一个或多个内核。每个内核实现一个 ARM 架构。例如,Zynq UltraScale+ MPSoC 包含一个 ARM CortexTM-A53 处理器及四个 ARMv8-A 物理内核(图 3)。K34快充网络

当查看 ARM 处理器的文档和代码时,这种区别很重要;为了全面理解具有一个 ARM 内核的“芯片”,可参考有关架构(如 ARMv8-A)和处理器(如 Cortex-A53)的文档。K34快充网络

ARMv8 架构中有四个例外等级(来源:ARM 架构参考手册D1-1404):K34快充网络

1. 例外等级 0 (EL0),无需特权即可执行;K34快充网络

2. 例外等级 1 (EL1),执行 OS 以及任何执行特权指令的内容;K34快充网络

3. 例外等级 2 (EL2),允许硬件被虚拟化;以及K34快充网络

4. 例外等级 3 (EL3),允许在安全与非安全处理器状态之间切换。K34快充网络

以下程序通常在这些模式下运行,如ARM 架构参考手册 (D1–1404)中所述:EL0,应用程序;EL1OS 内核以及通常所描述的相关特权函数;EL2,管理程序;EL3,安全监控器。我们的理论实例直接对应 ARMv8 执行模式 EL0 EL2USER 对应 EL0SUPER 对应 EL1HYPER 对应 EL2ARM 添加第四个特权等级,即 EL3;利用这个特2015年第四季度第二期K34快充网络

11K34快充网络

权等级,我们可在安全与非安全环境之间切换 EL0 EL1。尽管 EL3 的使用是一个很重要的论题,能够为架构增加大量的功能,但是在本实例中我们将其忽略,并着重介绍 EL0-EL2(利用管理程序的虚拟化)。如果对计算机如何保护金融交易感兴趣,可以参阅ARMv8 EL3 文档(免费提供,需注册)。这是非常好的参考文档,从中可以获得极为详细的介绍。K34快充网络

进入和退出例外模式K34快充网络

在真实系统中,模式之间的切换比我们的实例更复杂一些。ARM 总结了 ARMv8-A 架构的行为并在参考手册中给出。手册中介绍,只有在接到例外或从例外返回时,才能改变执行所处的例外等级。K34快充网络

3Zynq UltraScale+ MPSoCK34快充网络

浮点单元K34快充网络

供应商浮点单元K34快充网络

存储器保护单元K34快充网络

几何结构K34快充网络

像素K34快充网络

存储器管理单元K34快充网络

多通道 DMAK34快充网络

电压临时监控器K34快充网络

TrustZoneK34快充网络

高速连接K34快充网络

存储与信号处理K34快充网络

General-purpose I/OK34快充网络

通用 I/OK34快充网络

高性能 HDIO 高密度 HDIK34快充网络

系统管理K34快充网络

电源管理K34快充网络

功能安全K34快充网络

配置 AESK34快充网络

解密, 身份验证K34快充网络

安全引导K34快充网络

定时器 WDT,K34快充网络

复位时钟与调试K34快充网络

视频编解码器 H.265/H.K34快充网络

系统监控器K34快充网络

管理单元K34快充网络

走线K34快充网络

MacrocellK34快充网络

处理系统K34快充网络

存储器K34快充网络

平台管理单元K34快充网络

配置与安全单元K34快充网络

系统功能K34快充网络

图形处理单元 ARMK34快充网络

Mali-400 MP2K34快充网络

高速连接K34快充网络

通用连接在接到例外时,例外等级只能升高或保持不变;在从例外返回时,例外等级只能降低或保持不变。只有三个指令能生成针对下个例外等级的例外:SVC (Supervisor Call),生成针对 EL1 的例外;HVC (Hypervisor Call),生成针对 EL2 的例外;SMC (Secure Monitor Call),生成针对 EL3 的例外。这些指令取值范围为 0-65,555,允许每个例外等级有 216 个系统调用。这些指令针对下个例外等级,而且是唯一可供运行在较低例外等级的程序从运行在较高例外等级的程序请求某些内容的机制。在我们的理论实例中,SVC SWITCHSUPERHVC SWITCHHYPERK34快充网络

在前一个部分,我们介绍了能够让运行在 USER 模式(EL0)的程序进入 SUPER 模式 (EL1) K34快充网络

XCELL 软件刊: 封面专题K34快充网络

12K34快充网络

PetaLinux 工具包含一组命令,以供用户在赛灵思K34快充网络

FPGASoC 上轻松创建和扩展 Linux 系统。K34快充网络

事件。大多数运行在 USER 模式的程序生成的事件是请求存储器。当运行在 EL0 中的用户空间程序从运行在 EL1 中的 OS 请求存储器时,这个用户空间程序的 C 代码可能调用函数 malloc(),再由该函数调用 mmap() sbrk(),以从 OS 请求一个指向可用存储器的指针。在 ARMv8-A 架构中的 Linux 上,这个过程在幕后转化为 SVC 系统调用。该系统调用会把处理器转换为 EL1,从而将控制权送回 OS,后者会解读调用内容并提供正确的响应——本例中是指向所请求存储器区域的指针,或者是一个错误,用以指出没有可用存储器。K34快充网络

演示创建和工具K34快充网络

现在我们来介绍我们团队在 Zynq UltraScale+ QEMU Model 上运行 Doom 时所采用的步骤。这些步骤展示了如何获得和构建运行演示所需的每个组件,如何运行以及以什么顺序运行每个组件,以及如何与演示交互。成功完成该演示之后,你会获得一个环境,用来在上面进行实验,以了解 Xen 管理程序在仿真的 Zynq UltraScale+ MPSoC 上的运行情况。还需要将此迁移植 Zynq UltraScale+ MPSoC 芯片,这可作为练习由用户来完成。K34快充网络

为了让过程更简单,赛灵思提供基础的根文件系统,这样用户就无需花时间和精力自己构建。此演示所需的所有下载内容在以下网址中均有提供:www.wiki.xil- inx.com/Doom+on+Xen+Demo.K34快充网络

该演示首先通过更新由赛灵思提供的预编译根文件系统 (rootFS),可包含所需的组件。然后,利用赛灵思的 PetaLinux 工具运行演示。rootFS 包含运行于 Linux 系统上的大部分程序——具体来说就是用来启动系统的一组脚本,以及用来实现系统的应用程序与函数库集。我们用来扩展演示中的基础 rootFS所使用的两个工具分别是 Buildroot PetaLinux。我们使用 Buildroot 为赛灵思提供的基础 rootFS 构建 Doom 二进制文件,同时使用 PetaLinux 创建 rootFS 的剩余部分并引导演示。K34快充网络

BuildrootK34快充网络

Buildroot 是一个简单的构建系统,用于为 Linux 系统创建 rootFS。它使用 make menuconfig 接口,这是一个用来配置 Linux 内核本身的常用方法。Buildroot 包含对 PrBoom 的默认支持,这对于本演示很有帮助。(PrBoom 是我们所使用的 Doom 游戏的 GNU 通用公共许可证 [GPL] 版本。这里我们会穿插使用 PrBoom Doom 这两个术语。 )Buildroot Xen 构建不提供本地支持(尽管它可创建用于构建 Xen 所需的所有库和工具链),因此赛灵思提供 XenXen 工具和为用户预编译的 Xen 库以及其他一些所需的库,以让过程简单直观。K34快充网络

PetaLinuxK34快充网络

PetaLinux 工具包含一个命令集,以便让用户在赛灵思 FPGA SoC 上轻松创建和扩展 Linux 系统。该演示使用 petalinux-build petalinux-boot 命令。petalinux-build 命令用于创建全部所需的组件。petalinux-boot 命令(外加几个变量)用于启动在 QEMU 仿真器上运行的所有组件。介绍 PetaLinux 工具中的所有命令超出了本文的范围,但是通过此演示系统应该很容易发掘这两个命令和其他命令的功能。参考PetaLinux 工具文档 — 参考指南 UG1144 (v2015.4) 了解更多信息。2015年第四季度第二期K34快充网络

13K34快充网络

项目先决条件K34快充网络

该项目需要一个运行 Linux 的工作站或虚拟机,具有满足 UG1144 (v2015.4) 中所列的 PetaLinux 工具安装要求的环境,而且环境中需要安装赛灵思 PetaLinux Tools v2015.4 版本。K34快充网络

步骤 1:构建 ROOTFSK34快充网络

首先,我们需要构建 rootFS。从赛灵思下载 doom_demo.tar.gz,打开下载目录中的一个 terminal;你可在以下网址中找到全部所需文件: www.wiki.xilinx.com/Doom+on+Xen+Demo。我们将该目录称为 <down_dir>K34快充网络

解压文档。K34快充网络

$ cd <down_dir>K34快充网络

$ tar -xzf doom_demo.tar.gz && cd doom_demoK34快充网络

我们会看到一个文件夹,我们将把它存到根文件系统(一个用于 Dom0,另一个用于 DomU)。现在,我们需要构建 PrBoom,并复制到 rootFSK34快充网络

首先,需要下载 Linux 内核,这样我们随后就可以构建 rootFS。我们使用 v4.3 标签。K34快充网络

$ git clone -b v4.3 https://github.com/tor- valds/linux.gitK34快充网络

下载 Buildroot 源文件,并更改到 Buildroot 目录。K34快充网络

$ git clone https://git.buildroot.net/buildrootK34快充网络

&& cd buildrootK34快充网络

现在我们需要配置 Buildroot,以构建可以使用的套件。K34快充网络

$ make menuconfigK34快充网络

我们选择以下选项:K34快充网络

Target options ---> Target Architecture ---> AArch64 (little endian)K34快充网络

Target packages ---> Games ---> prboom ---> [*]K34快充网络

Target packages ---> Games ---> shareware Doom WAD file ---> [*]K34快充网络

应自动选择全部所需的库。K34快充网络

$ make # (这需要几分钟时间,取决于机器。)K34快充网络

现在,我们将所有 PrBoom 相关文件复制到 targetfs 目录,确保我们在 buildroot 目录下的 ./output/target/ 目录。K34快充网络

$ for i in $(find ./-name *oom*); do cp ${i}K34快充网络

<down_dir>/doom_demo/targetfs/${i}; doneK34快充网络

现在,我们完成了 Buildroot 操作。我们移到上一个目录 doom_demo 目录。K34快充网络

$ make # Build the host and guest rootFS.(这需要几分钟时间,取决于你的机器。)K34快充网络

注意:可能还存在额外配置选项,这主要取决于使用的内核版本。这些额外配置选项未被我们提供的配置预先选择。使用默认选项即可(需点击回车键)。K34快充网络

步骤 2:构建基础设置K34快充网络

接下来,我们为平台构建嵌入式系统软件的剩余部分,包括引导装载程序、ARM Trusted Firmware (ATF)Linux 内核和设备树。赛灵思的 PetaLinux 工具让这个过程简单直观。我们创建一个针对赛灵思 ZCU102 开发板的 PetaLinux 项目。参考 2015.4 UG1144 AR#66249 QEMU MPSoC PetaLinux 的快速入门材料。访问china.xilinx.com ,将 ZCU102 BSP (板支持包)下载到 <petalinux_bsp_dir> 目录下。K34快充网络

$ cd <down_dir>K34快充网络

$ petalinux-create --type project -s <petali- nux_bsp_dir>/ Xilinx-ZCU102-v2015.4-final.bspK34快充网络

--name doom_demo_zynqMPK34快充网络

XCELL 软件刊: 封面专题K34快充网络

14K34快充网络

这样将在 <down_ dir>/doom_demo_zynqMP 中创建我们的 PetaLinux 项目。K34快充网络

我们转到 PetaLinux 项目,并构建 PetaLinuxK34快充网络

$ cd <down_dir>/doom_demo_zynqMPK34快充网络

$ petalinux-buildK34快充网络

现在,我们需要为本用例手动编辑设备树。K34快充网络

编辑 xen-overlay.dtsi 文件 (subsystems/linux/ configs/device-tree/xen-overlay.dtsi)K34快充网络

dom0 下的K34快充网络

reg = <0x0 0x80000 0x3100000>;K34快充网络

替换为K34快充网络

reg = <0x0 0x80000 0x4100000>;K34快充网络

dom0 下的K34快充网络

xen,xen-bootargs = console=dtuart dtuart=serial0 dom0_mem=512M bootscrub=0 maxcpus=1 time r_ slop=0;K34快充网络

替换为K34快充网络

xen,xen-bootargs = console=dtuart dtuart=serial0 dom0_mem=512M bootscrub=0 maxcpus=4 timer_ slop=0;K34快充网络

dom0 下的K34快充网络

xen,dom0-bootargs = console=hvc0 earlycon=xen earlyprintk=xen maxcpus=1;K34快充网络

替换为K34快充网络

xen,dom0-bootargs = rdinit=/bin/sh console=hvc0 earlycon=xen earlyprintk=xen maxcpus=4;K34快充网络

编辑 zynqmp.dtsi 文件 (subsystems/linux/configs/ device-tree/zynqmp.dtsi)K34快充网络

dom0 下的K34快充网络

compatible = cdns,uart-r1p12;’替换为K34快充网络

compatible = cdns,uart-r1p8, cdns,uart-r1p12;现在,手动构建 Xen 设备树。K34快充网络

$ dtc -I dts -O dtb -i ./subsystems/linux/con- figs/device-tree/ -o ./images/linux/xen.dtb ./ subsystems/linux/configs/device-tree/xen.dtsK34快充网络

最后,我们需要将 Peta- Linux 构建的 rootFS 替换为我们此前构建的 rootFS。之所以这样做,是因为 PetaLinux 不包含 PrBoom,因为我们提供自己的 rootFS。我们还需要将 xen.ub 镜像替换为赛灵思预先构建的镜像,因为 Xen Xen 工具版本必须匹配。K34快充网络

$ rm <down_dir>/doom_demo_zynqMP/images/linux/ Image && rm <down_dir>/doom_demo_zynqMP/images/ linux/xen.ubK34快充网络

$ cp <down_dir>/doom_demo/Image <down_dir>/doom_ demo_zynqMP/images/linux/Image && cp <down_dir>/ doom_demo/xen.ub <down_dir>/doom_demo_zynqMP/im- ages/linux/xen.ubK34快充网络

使用 u-boot 引导加载程序引导。K34快充网络

$ petalinux-boot --qemu --u-boot --qemuargs=- net nic -net nic -net nic -net nic -net us- er,net=192.168.129.0,dhcpstart=192.16 8.129.50,host=192.168.129.1,hostfwd=t cp:127.0.0.1:5900-192.168.129.50:5900K34快充网络

> setenv serverip 192.168.129.1K34快充网络

> tftpb 4000000 xen.dtb; tftpb 0x80000 Image; tftpb 6000000 xen.ub; bootm 6000000 - 4000000K34快充网络

# /boot.shK34快充网络

# /xen-doom.sh 1K34快充网络

步骤 3:开始演示K34快充网络

现在,我们可以打开虚拟网络计算 (VNC) 查看器,并在运行 QEMU 的机器上连接 localhost:5900 以观看 Doom 游戏。(注意:以上命令行只能重定向 5900 端口,因此当开始演示时只能连接到第一个 Doom 实例。如果想连接多个实例,需要为 QEMU 添加更多 hostfwd 变量,并连接到下个可用的端口[5901 用于下个实例,5902 用于第三个实例,以此类推],然后将这些实例连接。)2015年第四季度第二期K34快充网络

15K34快充网络

一旦 Doom 启动,你就可以使用键盘和鼠标控制游戏。应记住,可能需要点击 ESC 键来开始游戏。还应记住,你已经很长时间没玩 Doom 游戏了,因此你可能走不了多远。别气馁。使用自己构建的系统绝对“可行”。K34快充网络

XEN 深入探讨K34快充网络

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

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

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 K34快充网络

4 作为 Type 1 管理程序,Xen 在本机硬件上运行,虚拟机在 Xen 之上运行K34快充网络

(来源:“带虚拟化扩展的 Xen ARM白皮书)。K34快充网络

硬件K34快充网络

PV 前端K34快充网络

PV 后端K34快充网络

HW 驱动K34快充网络

PV 前端K34快充网络

PV 前端K34快充网络

XCELL 软件刊: 封面专题K34快充网络

16K34快充网络

速度K34快充网络

设备共享K34快充网络

安全K34快充网络

仿真K34快充网络

K34快充网络

K34快充网络

K34快充网络

半虚拟化K34快充网络

K34快充网络

K34快充网络

K34快充网络

直通K34快充网络

K34快充网络

K34快充网络

是(但必须有 SMMU*K34快充网络

*系统存储器管理单元K34快充网络

程序,该程序可与其他程序一起检查状态和创建客户机。K34快充网络

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

doom VM 的配置文件如下所示:K34快充网络

# 客户机名称 name = guest1K34快充网络

# 要引导的内核镜像 kernel = /boot/ImageK34快充网络

# 内核命令行选项K34快充网络

extra = console=hvc0 rdinit=/doom.shK34快充网络

# 最初存储器分配 (MB) memory = 56K34快充网络

# VCPUS 数量 vcpus = 1K34快充网络

vfb = [ type=vnc, vnclisten=0.0.0.0]K34快充网络

XEN 中的设备K34快充网络

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

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

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

5 方案、半虚拟化和直通方案的对比K34快充网络

利用设备半虚拟化,可在管理程序与客户机之间就如何进行通信达成协议。常见的通信协议为 Xen Bus VirtIO2015年第四季度第二期K34快充网络

17K34快充网络

户机通信的两个常用协议是 Xen Bus VirtIOK34快充网络

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

设备性能与安全K34快充网络

一般来说,与通过直通方式提供的设备相比,仿真的设备性能比较低;半虚拟化方案则趋向于具备足够性能。半虚拟化方案和仿真方案的优势在于管理程序可以让设备访问多个实体,而不会将这些实体相互暴露。K34快充网络

原理简介K34快充网络

Doom-on-Zynq Ultra- Scale+ MPSoC 的处理上下文环境就像洋葱一样有很多层(图 6)。Cortex-A53K34快充网络

Dom0K34快充网络

DomU0DomU1PrBoom(Doom)GICSMMUBufferBufferUARTXen (EL2)EL1EL0SDLlibSDL(1.2)/dev/fb0xen-fbfrontPrBoom(Doom)SDLlibSDL(1.2)/dev/fb0xen-fbfrontK34快充网络

5 方案、半虚拟化和直通方案的对比K34快充网络

ARM Cortex-A53 模型K34快充网络

虚拟化代码K34快充网络

Linux 内核K34快充网络

Linux 内核K34快充网络

Linux 内核K34快充网络

Zynq MPSoCK34快充网络

硬件K34快充网络

虚拟化代码K34快充网络

VNCK34快充网络

服务器K34快充网络

VNC 查看器K34快充网络

VNC 查看器K34快充网络

VNCK34快充网络

服务器K34快充网络

通用K34快充网络

定时器K34快充网络

缓冲器K34快充网络

缓冲器K34快充网络

网络K34快充网络

XCELL 软件刊: 封面专题K34快充网络

18K34快充网络

中是四个 ARMv8 内核。在每个内核上,管理程序运行在EL2 中,客户机(Dom0 DomU)运行在 EL0/EL1 中。每个 DomU 客户机都运行 LinuxDoom (PrBoom) 运行在用户空间中。Doom 使用简单直接媒体层 (SDL),通过 SVC 指令(最终)与帧缓冲器前端驱动对话。帧缓冲器前端将缓冲器写入 Dom0 建立的共享存储器区域。前端驱动通过协议(例如 Xen Bus VirtIO)使用 HVC 指令(最终)与 Dom0 上运行的虚拟化代码通信。在 Dom0 上运行的虚拟化代码提供一个用于显示的后端,然后该后端由虚拟化代码的 VNC 服务器进行编码,并通过网络送到 VNC 客户端。K34快充网络

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

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

来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
推荐资讯
相关文章
    无相关信息
栏目更新
栏目热门