本篇博文涵蓋了有關(guān)使用 PetaLinux 命令行來對 Versal Adaptive SoC 的 PetaLinux BSP 運(yùn)行 QEMU 的信息,并演示了 QEMU 支持的部分網(wǎng)絡(luò)選項(xiàng)。
QEMU (Quick EMUlator) 是一種開源跨平臺系統(tǒng)仿真器。它是一個可執(zhí)行程序,可在 x86 Linux 或 Windows 操作系統(tǒng)上運(yùn)行。
QEMU 可對整個系統(tǒng)進(jìn)行仿真(通常它被稱為訪客),如AMD ZCU102 或 VCK190 開發(fā)板。
仿真包括處理器、外設(shè)以及開發(fā)板上的其它硬件,支持您在虛擬化硬件上啟動操作系統(tǒng)或其它應(yīng)用。
要在虛擬化硬件中開發(fā)此類應(yīng)用,只需使用物理硬件上所用的相同工具鏈即可。
QEMU 也可通過諸如 CAN、以太網(wǎng)和 USB 等接口來與主機(jī)進(jìn)行交互,支持在訪客機(jī)器中實(shí)時使用來自主機(jī)的現(xiàn)實(shí)世界數(shù)據(jù)。
AMD QEMU 隨 PetaLinux 和 Yocto 工具鏈一起分發(fā),并與 SDK/Vitis 集成。
1使用 PetaLinux 啟動 QEMU
請確保根據(jù) PetaLinux 用戶指南 (UG1144) 中所述,安裝在 Linux 主機(jī)上構(gòu)建 PetaLinux 工程所需的所有 Linux 程序包。請參閱此文檔的“Installation Steps”(安裝步驟)部分,其中提供了所有必需的程序包,因此尤為重要。
此處所示的演示使用的是預(yù)構(gòu)建的鏡像,無須再構(gòu)建 PetaLinux 工程。
基于 VCK190 BSP 創(chuàng)建工程的步驟
$ source/settings.sh
注:對于基于 bash 的 shell,請選擇 settings.sh,對于基于 C 語言的 shell,請選擇 settings.csh。
$ petalinux-create -t project -s xilinx-vck190-v2020.2-final.bsp -n xilinx-qemu-first-run
$ cd xilinx-qemu-first-run
$ petalinux-build(如使用預(yù)構(gòu)建鏡像,則此步驟為可選)
下列步驟詳述了如何使用 PetaLinux BSP 工程隨附的 QEMU 預(yù)構(gòu)建二進(jìn)制文件來啟動 VCK190 平臺。
我們將使用下列命令隨 U-Boot 和 Linux 內(nèi)核一并啟動 QEMU。
使用 QEMU 啟動 U-boot:
$ petalinux-boot --qemu --prebuilt 2
使用 QEMU 啟動內(nèi)核:
$ petalinux-boot --qemu --prebuilt 3
如果要在運(yùn)行 petalinux-build 后啟動構(gòu)建的鏡像,則所用 QEMU 命令行與此處所示不同,應(yīng)遵循下述步驟進(jìn)行操作:
構(gòu)建 PetaLinux BSP 工程后,下一步是使用命令行生成 BOOT.BIN 二進(jìn)制文件:
$ petalinux-package --boot --plm --psmfw --uboot --dtb --forceQEMU
啟動直至完成 U-Boot 啟動為止:
$ petalinux-boot --qemu --ubootQEMU
啟動直至完成 Linux 內(nèi)核啟動為止:
$ petalinux-boot --qemu --kernel
要退出仿真,請按 Ctrl+A,然后按 X
下一節(jié)將側(cè)重于講解 AMD QEMU 所提供的基本網(wǎng)絡(luò)功能及其測試方式。
2QEMU 網(wǎng)絡(luò)選項(xiàng)
QEMU 可對小型子網(wǎng)(或 LAN)進(jìn)行仿真,包括 DHCP 服務(wù)器、網(wǎng)關(guān)和 DNS 服務(wù)器;即訪問互聯(lián)網(wǎng)所需的所有一切均可仿真。
啟動 QEMU 并登錄系統(tǒng)。使用 ifconfig 實(shí)用工具來將網(wǎng)絡(luò)設(shè)置檢出。
結(jié)果如下:
此處 eth0 是 PS GEM 以太網(wǎng)的接口。通過 RX 和 TX 字節(jié)計(jì)數(shù)可見,部分網(wǎng)絡(luò)流量已累計(jì)。這可能是由于啟動期間發(fā)生的 DHCP 采集所導(dǎo)致的。
以下列出了部分 QEMU 網(wǎng)絡(luò)功能,并簡要解釋了其測試功能。
1. 測試網(wǎng)絡(luò):
我們可以正常使用此網(wǎng)絡(luò)連接,與連接到主機(jī)網(wǎng)絡(luò)時幾乎相同。
例如,您可以從 AMD Github 倉庫下載文件。
在 QEMU 上已啟動的 Linux 內(nèi),輸入以下命令:
root@xilinx-vck190-2020_2:~# wget
https://github.com/Xilinx/qemu-devicetrees/archive/master.zip
輸出應(yīng)如下所示:
Connecting to
codeload.github.com (192.30.255.120:443)
master.zip100% |**********************************************************| 133k 000 ETA
這是從 AMD 公共 Github 倉庫檢索得到的 DTS 工程的源代碼 tarball。您可使用 unzip 命令解壓此文件。
注:從 QEMU 去 ping 主機(jī)是無效的。
2. QEMU 中的網(wǎng)絡(luò)文件系統(tǒng) (NFS) 裝載
NFS 支持將任一設(shè)備上的某個目錄與網(wǎng)絡(luò)中其它設(shè)備共享。
預(yù)構(gòu)建的 PetaLinux BSP 具有 rootfs 和 Linux 內(nèi)核,可通過 NFS 選項(xiàng)加載。因此,NFS 無需進(jìn)行重新構(gòu)建或重新配置。以下是在 Linux 主機(jī)上使用 QEMU 設(shè)置 NFS 的簡單步驟:
檢查在主機(jī)上是否已安裝 NFS 服務(wù)器
dpkg -l | grep nfs-kernel-server
如未安裝,請使用以下命令進(jìn)行安裝:
sudo apt-get install nfs-kernel-serverNFS
服務(wù)器安裝完成后,請?zhí)砑右蚕淼谋镜啬夸洝?br />
以下示例顯示了如何在 /etc/exports 文件的導(dǎo)出設(shè)置中添加 /home/test_nfs 目錄:
對于此示例,我們將在 NFS 條目中添加“insecure”選項(xiàng)。
/home/test_nfs *(rw,sync,no_root_squash,insecure)
我們還可以為 NFS 服務(wù)器主機(jī)分配 IP 地址,替代以上命令中的 *。
$ sudo exportfs -ra
使用 petalinux-boot 啟動 QEMU,如下所示:
$ petalinux-boot --qemu --prebuilt 3
QEMU 啟動完成后,登錄訪客機(jī)。使用以下命令將主機(jī) NFS 文件系統(tǒng)裝載到 QEMU 下的 /tmp 目錄中。
$ mount -o port=2049,nolock,proto=tcp:/home/test_nfs/ /tmp
要查找 host_ip,請使用 ifconfig 或類似的 IP 實(shí)用工具。
現(xiàn)在,我們可以在訪客機(jī)的 /tmp 目錄下看到共享的文件。
3. 使用 TFTP 進(jìn)行文件傳輸
QEMU 具有內(nèi)置 TFTP 功能,支持在訪客機(jī)與主機(jī)之間輕松進(jìn)行往來文件傳輸。
如果原先已運(yùn)行 QEMU,請退出,在主機(jī)終端上,創(chuàng)建一個新目錄,并在其中包含一個文件:
$ mkdir -p /home/${USER}/qemu-training-tftp$ echo "hello QEMU world" >> /home/${USER}/qemu-training-tftp/file.txt
此新目錄中的 file.txt 將包含我們的“hello QEMU world”文本行。
QEMU 需要額外參數(shù)以建立到該目錄的 TFTP 訪問:
-tftp /home/${USER}/qemu-training-tftp
如果使用的是 PetaLinux,請使用修改后的命令重新啟動 QEMU:
$ petalinux-boot --qemu --prebuilt 3 --qemu-args "-tftp /home/${USER}/qemu-training-tftp"
這將覆蓋新目錄的默認(rèn) TFTP 目錄設(shè)置。
從訪客機(jī)發(fā)起的任何 TFTP 請求都將指向剛創(chuàng)建的此目錄。
內(nèi)置 TFTP 服務(wù)器 IP 為 10.0.2.2
root@xilinx-vck190-2020_2:~# tftp -g -r file.txt 10.0.2.2
對此文件執(zhí)行 cat 命令,查看內(nèi)容是否正確:
root@xilinx-vck190-2020_2:~# cat file.txt
4. 使用 SCP 進(jìn)行文件傳輸
在主機(jī)與訪客機(jī)之間可使用 scp 命令通過 SSH 來傳輸文件。
scp 語法如下:
$ scp
遠(yuǎn)程路徑采用如下語法:
user@host:/path/to/file
例如,如果將文件從主機(jī)復(fù)制到訪客機(jī),則命令輸出如下所示:
root@xilinx-vck190-2020_2:~#scp <主機(jī)用戶名>@<主機(jī) IP>:/scratch/doc-example/myapp.elf .
Host '<主機(jī) IP>' is not in the trusted hosts file.
(ecdsa-sha2-nistp256 fingerprint sha1!! 18923397cbf75d5f3497:f9)
Do you want to continue connecting? (y/n) y
komlodi@'s password:myapp.elf
100% 18KB 17.7KB/s 00:00
5.通過 SSH 進(jìn)入 QEMU
要通過 SSH 進(jìn)入 QEMU,需要向 QEMU 傳遞其它實(shí)參。
例如,如果在 AMD Versal Adaptive SoC 工程上使用 PetaLinux:
$ petalinux-boot --qemu --prebuilt 3 --qemu-args "-net nic,netdev=eth0 -netdev user,id=eth0,hostfwd=tcp:22 -net nic"
登錄 QEMU 機(jī)器。
在主機(jī)終端內(nèi),運(yùn)行以下所示命令以通過 SSH 訪問 QEMU。
$ ssh -p 1114 root@localhost
-
處理器
+關(guān)注
關(guān)注
68文章
19286瀏覽量
229854 -
usb
+關(guān)注
關(guān)注
60文章
7945瀏覽量
264690 -
Linux
+關(guān)注
關(guān)注
87文章
11304瀏覽量
209524 -
仿真器
+關(guān)注
關(guān)注
14文章
1018瀏覽量
83746 -
qemu
+關(guān)注
關(guān)注
0文章
57瀏覽量
5357
原文標(biāo)題:開發(fā)者分享|使用 QEMU 啟動 Versal VCK190
文章出處:【微信號:gh_2d1c7e2d540e,微信公眾號:XILINX開發(fā)者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論