<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 模擬技術(shù) > 設計應用 > 用ZYNQ MPSoC玩DOOM

用ZYNQ MPSoC玩DOOM

作者: 時(shí)間:2018-08-08 來(lái)源:網(wǎng)絡(luò ) 收藏

本文引用地址:http://dyxdggzs.com/article/201808/385964.htm

首先,需要下載 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 ---> [*]

應自動(dòng)選擇全部所需的庫。

$ make # (這需要幾分鐘時(shí)間,取決于機器。)

現在,我們將所有 PrBoom 相關(guān)文件復制到 targetfs 目錄,確保我們在 buildroot 目錄下的 ./output/target/ 目錄。

$ for i in $(find ./-name ‘*oom*’); do cp ${i}

/doom_demo/targetfs/${i}; done

現在,我們完成了 Buildroot 操作。我們移到上一個(gè)目錄 doom_demo 目錄。

$ make # Build the host and guest rootFS.(這需要幾分鐘時(shí)間,取決于你的機器。)

注意:可能還存在額外配置選項,這主要取決于使用的內核版本。這些額外配置選項未被我們提供的配置預先選擇。使用默認選項即可(需點(diǎn)擊回車(chē)鍵)。

步驟 2:構建基礎設置

接下來(lái),我們?yōu)槠脚_構建系統軟件的剩余部分,包括引導裝載程序、ARM Trusted Firmware (ATF)、Linux 內核和設備樹(shù)。賽靈思的 PetaLinux 工具讓這個(gè)過(guò)程簡(jiǎn)單直觀(guān)。我們創(chuàng )建一個(gè)針對賽靈思 ZCU102 開(kāi)發(fā)板的 PetaLinux 項目。參考 2015.4 UG1144 和 AR#66249 中 QEMU 和 MPSoC PetaLinux 的快速入門(mén)材料。訪(fǎng)問(wèn)china.xilinx.com ,將 ZCU102 BSP (板支持包)下載到

目錄下。

$ cd

$ petalinux-create --type project -s

/ Xilinx-ZCU102-v2015.4-final.bsp -- name doom_demo_zynqMP

這樣將在 /doom_demo_zynqMP 中創(chuàng )建我們的 PetaLinux 項目。

我們轉到 PetaLinux 項目,并構建 PetaLinux。

$ cd /doom_demo_zynqMP

$ petalinux-build

現在,我們需要為本用例手動(dòng)編輯設備樹(shù)。

· 編輯 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 = “cdns,uart-r1p8”, “cdns,uart-r1p12”;’ 現在,手動(dòng)構建 Xen 設備樹(shù)。

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

最后,我們需要將 Peta- Linux 構建的 rootFS 替換為我們此前構建的 rootFS。之所以這樣做,是因為 PetaLinux 不包含 PrBoom,因為我們提供自己的 rootFS。我們還需要將 xen.ub 鏡像替換為賽靈思預先構建的鏡像,因為 Xen 和 Xen 工具版本必須匹配。

$ rm /doom_demo_zynqMP/images/linux/ Image rm /doom_demo_zynqMP/images/ linux/xen.ub

$ cp /doom_demo/Image /doom_ demo_zynqMP/images/linux/Image cp / doom_demo/xen.ub/doom_demo_zynqMP/im- ages/linux/xen.ub

使用 u-boot 引導加載程序引導。

$ 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:5900”

> setenv serverip 192.168.129.1

> tftpb 4000000 xen.dtb; tftpb 0x80000 Image; tftpb 6000000 xen.ub; bootm 6000000 - 4000000

# /boot.sh

# /xen-doom.sh 1

步驟 3:開(kāi)始演示

現在,我們可以打開(kāi)虛擬網(wǎng)絡(luò )計算 (VNC) 查看器,并在運行 QEMU 的機器上連接 localhost:5900 以觀(guān)看 Doom 游戲。(注意:以上命令行只能重定向 5900 端口,因此當開(kāi)始演示時(shí)只能連接到第一個(gè) Doom 實(shí)例。如果想連接多個(gè)實(shí)例,需要為 QEMU 添加更多 hostfwd 變量,并連接到下個(gè)可用的端口[5901 用于下個(gè)實(shí)例,5902 用于第三個(gè)實(shí)例,以此類(lèi)推],然后將這些實(shí)例連接。)

一旦 Doom 啟動(dòng),你就可以使用鍵盤(pán)和鼠標控制游戲。應記住,可能需要點(diǎn)擊 ESC 鍵來(lái)開(kāi)始游戲。還應記住,你已經(jīng)很長(cháng)時(shí)間沒(méi)玩 Doom 游戲了,因此你可能走不了多遠。別氣餒。使用自己構建的系統絕對”可行”。

XEN 深入探討

正如”Zynq MPSoC 獲得 Xen 管理程序支持”(賽靈思中國通訊,第 93 期)中所介紹, Type 1 管理程序在本機硬件上運行,Type 2 管理程序不是軟件的最底層,而是托管在 OS 上。Xen 屬于 Type 1 管理程序(圖 4)。

圖 4:作為 Type 1 管理程序,Xen 在本機硬件上運行,虛擬機在 Xen 之上運行 (來(lái)源:”帶虛擬化擴展的 Xen ARM” 白皮書(shū))。

以前,我們提到了虛擬處理器(也稱(chēng)虛擬機)。在 Xen 中,這些被稱(chēng)為域。特權最高的域被稱(chēng)為 Dom0;無(wú)特權的客戶(hù)域是 DomU 域。

Dom0 是 Xen 管理程序在引導時(shí)創(chuàng )建的初始域。它是特權域,并驅動(dòng)平臺上的設備。Xen 將 CPU、存儲器、中斷和定時(shí)器虛擬化,為虛擬機提供一個(gè)或多個(gè)虛擬 CPU、系統存儲器的一部分、一個(gè)虛擬中斷控制器和一個(gè)虛擬定時(shí)器。除非配置為其他方式,否則 Dom0 可直接訪(fǎng)問(wèn)所有設備并驅動(dòng)它們。Dom0 還運行一組名為半虛擬化 (PV) 后端的驅動(dòng),為無(wú)特權虛擬機提供對磁盤(pán)、網(wǎng)絡(luò )等設備的訪(fǎng)問(wèn)權。Xen 提供用于發(fā)現和初始通信設置的所有工具。作為 DomU 的 OS 通過(guò)運行相應的 PV 前端驅動(dòng)程序來(lái)獲得對一組通用虛擬設備的訪(fǎng)問(wèn)權。根據 DomU 的數量,單個(gè)后端可服務(wù)多個(gè)前端。有一對適用于所有最常見(jiàn)設備類(lèi)型(磁盤(pán)、網(wǎng)絡(luò )、控制臺、幀緩沖器、鼠標、鍵盤(pán)等)的 PV 驅動(dòng)程序。PV 驅動(dòng)程序通常位于 OS 內核(即 Linux)中。幾個(gè) PV 后端也可以在用戶(hù)空間中運行,通常在 QEMU 中。前端在存儲器的共享頁(yè)上使用簡(jiǎn)單的環(huán)協(xié)議連接后端。從 Dom0 與管理程序交互要求程序使用定義的管理程序調用(類(lèi)似于系統調用)。Xen 提供一個(gè)名為 Xen Tools (也可寫(xiě)成 xen-tools)的、帶有庫的參考工具箱。xen-tools 包含一個(gè)名為 xl 的程序,該程序可與其他程序一起檢查狀態(tài)和創(chuàng )建客戶(hù)機。

利用設備半虛擬化,可在管理程序與客戶(hù)機之間就如何進(jìn)行通信達成協(xié)議。常見(jiàn)的通信協(xié)議為 Xen Bus 和 VirtIO。

xl 中的”create”命令要用到描述客戶(hù)機的配置文件,如果配置文件規定客戶(hù)機需要一個(gè)由 VNC 會(huì )話(huà)支持的虛擬幀緩沖器 (VFB),那么 xl 會(huì )在 Dom0 用戶(hù)空間中自動(dòng)啟動(dòng)虛擬化代碼(本演示中,為每個(gè)客戶(hù)機啟動(dòng)一個(gè))。

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

# 客戶(hù)機名稱(chēng)

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 中的設備

為客戶(hù)機提供設備有三種常用方法:仿真、半虛擬化和直通 (圖 5)。對于設備仿真,當客戶(hù)機向仿真設備的存儲器寫(xiě)入時(shí),寫(xiě)入操作會(huì )觸發(fā)陷阱。陷阱通常就是頁(yè)面錯誤。陷阱使處理器能夠切換到管理程序,以仿真設備。仿真是靈活的,但速度慢,因為要處理所有陷阱,而且要有人為所有需要仿真的設備編寫(xiě)模型。而且,很難找到方法來(lái)加速仿真,因為幾乎沒(méi)有硬件加速;完全是軟件方法。

圖 5:方案、半虛擬化和直通方案的對比

利用設備半虛擬化,可在管理程序與客戶(hù)機之間就如何進(jìn)行通信達成協(xié)議。通常有一個(gè)共享的存儲器區域(以及協(xié)議),這看起來(lái)像一個(gè)設備,而且管理程序在該區域處理請求。例如,為了在 Linux 上支持半虛擬化幀緩沖器,Linux 前端驅動(dòng)會(huì )把從用戶(hù)空間獲得的幀緩沖器寫(xiě)入共享存儲器區域;然后使用管理程序調用向管理程序發(fā)信號,以通過(guò)后端驅動(dòng)來(lái)輸出幀??蛻?hù)機只能通過(guò)半虛擬化驅動(dòng)程序與主機 (Dom0)和其他客戶(hù)機 (DomU) 對話(huà)。這種方案的優(yōu)勢是:用戶(hù)可以在很多客戶(hù)機之間共享設備;運行快速;客戶(hù)機可以運行大部分都沒(méi)修改的內核。要求的變動(dòng)在標準接口下面,因此對于應用程序以及內核其余部分來(lái)說(shuō),前端驅動(dòng)程序看起來(lái)就像正常的網(wǎng)絡(luò )接口、磁盤(pán)或其他設備。支持客戶(hù)機通信的兩個(gè)常用協(xié)議是 Xen Bus 和 VirtIO。

在直通模式下,主機將設備”交給”一個(gè)客戶(hù)機。這意味著(zhù)每次只有一個(gè)客戶(hù)機可以使用該設備。

設備性能與安全

一般來(lái)說(shuō),與通過(guò)直通方式提供的設備相比,仿真的設備性能比較低;半虛擬化方案則趨向于具備足夠性能。半虛擬化方案和仿真方案的優(yōu)勢在于管理程序可以讓設備訪(fǎng)問(wèn)多個(gè)實(shí)體,而不會(huì )將這些實(shí)體相互暴露。

原理簡(jiǎn)介

Doom-on-Zynq UltraScale+ MPSoC 的處理上下文環(huán)境就像洋蔥一樣有很多層(圖 6)。Cortex-A53 中是四個(gè) ARMv8 內核。在每個(gè)內核上,管理程序運行在 EL2 中,客戶(hù)機(Dom0 或 DomU)運行在 EL0/EL1 中。每個(gè) DomU 客戶(hù)機都運行 Linux;Doom (PrBoom) 運行在用戶(hù)空間中。Doom 使用簡(jiǎn)單直接媒體層 (SDL),通過(guò) SVC 指令(最終)與幀緩沖器前端驅動(dòng)對話(huà)。幀緩沖器前端將緩沖器寫(xiě)入 Dom0 建立的共享存儲器區域。前端驅動(dòng)通過(guò)協(xié)議(例如 Xen Bus 或 VirtIO)使用 HVC 指令(最終)與 Dom0 上運行的虛擬化代碼通信。在 Dom0 上運行的虛擬化代碼提供一個(gè)用于顯示的后端,然后該后端由虛擬化代碼的 VNC 服務(wù)器進(jìn)行編碼,并通過(guò)網(wǎng)絡(luò )送到 VNC 客戶(hù)端。

圖6:X86 架構上從 PetaLinux 工具啟動(dòng) QEMU

此信息和演示能夠為管理程序的進(jìn)一步研究和實(shí)驗提供很好的基礎。當你能夠在 QEMU 上用仿真來(lái)運行演示之后,就可使用 PetaLinux 工具在 Zynq UltraScale+ MPSoC 芯片上運行。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: 嵌入式

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>