在 Zynq MPSoC 上运行 DOOM 游戏
上轻松创建和扩展 Linux 系统。该演示使用 petalinux-build 和 petalinux-boot 命令。petalinux-build 命令用于创建全部所需的组件。petalinux-boot 命令(外加几个变量)用于启动在 QEMU 仿真器上运行的所有组件。介绍 PetaLinux 工具中的所有命令超出了本文的范围,但是通过此演示系统应该很容易发掘这两个命令和其他命令的功能。参考PetaLinux 工具文档 — 参考指南 UG1144 (v2015.4) 了解更多信息。
项目先决条件
该项目需要一个运行 Linux 的工作站或虚拟机,具有满足 UG1144 (v2015.4) 中所列的 PetaLinux 工具安装要求的环境,而且环境中需要安装赛灵思 PetaLinux Tools v2015.4 版本。
一旦 Doom 启动,你就可以使用键盘和鼠标控制游戏。应记住,可能需要点击 ESC 键来开始游戏。开始游戏咯!
步骤 1:构建 ROOTFS
首先,我们需要构建 rootFS。从赛灵思下载 doom_demo.tar.gz,打开下载目录中的一个 terminal;你可在以下网址中找到全部所需文件: www.wiki.xilinx.com/Doom+on+Xen+Demo。我们将该目录称为 。
解压文档。
$ cd
$ tar -xzf doom_demo.tar.gz && cd doom_demo
我们会看到一个文件夹,我们将把它存到根文件系统(一个用于 Dom0,另一个用于 DomU)。现在,我们需要构建 PrBoom,并复制到 rootFS。
首先,需要下载 Linux 内核,这样我们随后就可以构建 rootFS。我们使用 v4.3 标签。
$ git clone -b v4.3 https://github.com/tor- valds/linux.git
下载 Buildroot 源文件,并更改到 Buildroot 目录。
$ git clone https://git.buildroot.net/buildroot && cd buildroot
现在我们需要配置 Buildroot,以构建可以使用的套件。
$ make menuconfig
我们选择以下选项:
Target options ---> Target Architecture ---> AArch64 (little endian)
Target packages —> Games ---> prboom ---> [*]
Target packages —> Games ---> shareware Doom WAD file ---> [*]
应自动选择全部所需的库。
$ make # (这需要几分钟时间,取决于机器。)
现在,我们将所有 PrBoom 相关文件复制到 targetfs 目录,确保我们在 buildroot 目录下的 ./output/target/ 目录。
$ for i in $(find ./-name ‘*oom*’); do cp ${i}
/doom_demo/targetfs/${i}; done
现在,我们完成了 Buildroot 操作。我们移到上一个目录 doom_demo 目录。
$ make # Build the host and guest rootFS.(这需要几分钟时间,取决于你的机器。)
注意:可能还存在额外配置选项,这主要取决于使用的内核版本。这些额外配置选项未被我们提供的配置预先选择。使用默认选项即可(需点击回车键)。
步骤 2:构建基础设置
接下来,我们为平台构建嵌入式系统软件的剩余部分,包括引导装载程序、ARM Trusted Firmware (ATF)、Linux 内核和设备树。赛灵思的 PetaLinux 工具让这个过程简单直观。我们创建一个针对赛灵思 ZCU102 开发板的 PetaLinux 项目。参考 2015.4 UG1144 和 AR#66249 中 QEMU 和 MPSoC PetaLinux 的快速入门材料。访问china.xilinx.com ,将 ZCU102 BSP (板支持包)下载到目录下。
$ cd
$ petalinux-create --type project -s
/ Xilinx-ZCU102-v2015.4-final.bsp -- name doom_demo_zynqMP
这样将在 /doom_demo_zynqMP 中创建我们的 PetaLinux 项目。
我们转到 PetaLinux 项目,并构建 PetaLinux。
$ cd /doom_demo_zynqMP
$ petalinux-build
现在,我们需要为本用例手动编辑设备树。
编辑 xen-overlay.dtsi 文件 (subsystems/linux/ configs/device-tree/xen-overlay.dtsi)。
将 dom0 下的 'reg = <0x0 0x80000 0x3100000>;' 替换为 'reg = <0x0 0x80000 0x4100000>;'
将 dom0 下的 'xen,xen-bootargs = "console=dtuart dtuart=serial0 dom0_mem=512M bootscrub=0 maxcpus=1 time r_ slop=0";' 替换为 'xen,xen-bootargs = "console=dtuart dtuart=serial0 dom0_mem=512M bootscrub=0 maxcpus=4 timer_ slop=0";'
将 dom0 下的 'xen,dom0-bootargs = "console=hvc0 earlycon=xen earlyprintk=xen maxcpus=1";' 替换为 'xen,dom0-bootargs = "rdinit=/bin/sh console=hvc0 earlycon=xen earlyprintk=xen maxcpus=4";'
编辑 zynqmp.dtsi 文件 (subsystems/linux/configs/ device-tree/zynqmp.dtsi)。
将 dom0 下的 'compatible = "cdns,uart-r1p12";' 替换为 'compatible
- 基于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)