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