使用 QEMU 快速搭建 Linux 環境

以 QEMU 加速嵌入式系統開發裡提到分別利用 buildroot 產生 x86, ARM 與 ARM64 的模擬環境,不過當時所舉的例子是用 Linux 當 Host,雖然效率比較好,但可用性沒那麼高。最近有一個工作上的用途,是搭建一個評估環境供客戶使用,此時當然不可能叫客戶新裝一個 Linux,所以利用 QEMU 就是最好的選擇了。

本篇文章會說明如何用 Windows QEMU 搭建出一個可獨立執行 i386 的 Guest,雖然不另外說明 ARM64 的流程,也會提供 ARM64 在 Windows 上所要執行d 命令。本篇是基於 以 QEMU 加速嵌入式系統開發 的內容加以延申,有些細節就不再贅述。

編譯 Buildroot 與 Kernel

這邊就直接給出編譯所需的命令,另外需要搭配結尾附件的檔案,來套用已設定好的 Busybox 與 Kernel 設定,而且也會將另外編譯的 vim + runtime 加入。請將檔案(qemu_i386env.tar.gz)下載後,放入自己的家目錄。編譯環境是以 Ubuntu 20.04 64bit,做為操作的環境。

當成功完成編譯後,會有2個檔案是我們需要的,一個是 arch/i386/boot/bzImage 與 rootfs.img,將這兩個檔案複製出來,放到 windows 上去。

安裝 Enigma Virtualbox

接著,安裝之前文章QT 學習筆記 – 程式佈署與enigma virtual box打包裡提到的 Enigma 程式,這可以把QEMU的執行檔和 library 打包成一個檔案,這樣用起來會感覺「整潔」一點。當然,不打包也是可以用,這邊我們是以打包的方式來進行,這樣看起來會比較清爽。安裝的流程,請參考該篇文章,就不再複述。

安裝 QEMU Windows

接著就是要安裝 QEMU for Windows 的部份了,直接上 QEMU Donwnload 的網頁,選擇 Windows 64bit 的部份。

QEMU Download

在裡面選個新一點的即可,這邊以 qemu-w64-setup-20210810.exe 為示例,下載後安裝在 D:\QEMU 資料夾。基本只是一個解壓縮的過程,資料夾裡就可以看到各式支援的模擬器程式了。

QEMU Systems

把這些所有的.exe執行檔,先移到另一個資料夾,假定放在 D:\QEMU_Exes

刪除無用的 QEMU 檔案

由於將 QEMU 打包後,在執行時會做一個解壓縮。而原本的 QEMU 檔案內,有許多無用或佔空間的檔案,可以把它們移除,可以加速執行的速度。當然不移除也可以,建議在熟悉這些流程後再刪除就可。可以刪除的檔案/目錄為

  1. D:\QEMU\share\icons
  2. D:\QEMU\share\edk2-arm*: 由於本文是 x86 系統, ARM 的檔案可刪除。若要搭建 ARM 環境,則不要刪
  3. D:\QEMU\share\ed2k-aarch*: 由於本文是 x86 系統, ARM64 的檔案可刪除。若要搭建 ARM 環境,則不要刪

當然還有些檔也是沒用的,不過我們就刪除一些比較大、數量多的檔即可。

將 QEMU 使用 Enigma 打包成單一執行檔

接著,啟動 Enigma Virtualbox,將紅色的部份填入以下內容

Enigma設定

接著設定以下步驟

  1. 按下 「Files」–> 「Add」–> 「Add Folder Recursively」–> 選擇 D:\QEMU
  2. 勾選「Files」–> 「Files Options」–> 「Compress Files」
  3. 勾選「Options」–> 「Share virtual system to child process」

最後按下 Process ,就會進行打包,產生 D:\qemu-system-x86_64.exe 單獨可執行檔。

執行檔案

最後將附件的 「standalone_x86_64_qemu.zip」在桌面解壓縮,將上面步驟產生的 bzImage、rootfs.img與qemu-system_x84_64.exe都放入同一個資料夾。

接著先執行 init_1000M.bat 來解壓縮一個空白的1G可讀寫檔案系統,然後執行 run.bat 就可以將系統執行起來。

透過 qemu_i386env.tar.gz 所覆蓋的檔案,系統內已啟用了 telnet server, sshd 與 vim。要連入 telnet 則連到 127.0.0.1:20023,ssh 則是 127.0.0.1:20022、WEB 127.0.0.1:20080。當然這些port number 都可以在 run.bat 裡面修改。

裡面也放置了 Python 2.7 ,所是有一點比較強大的程式能力。

另外,若需要更快的執行速度,可以啟用 Intel  的 HAXM 功能,請參考 QEMU 虛擬機器設定

放置新檔案

此系統會掛在一開始解壓縮的 1G user.img 為 /root 目錄,所以有什麼需要放置的東西,放在 /root 下即可。而開機會自動執行 /root/start-up.sh,所以也可以用來新增自己的啟動指令。

ARM64 QEMU 執行批次檔

若是要執行 ARM64 的 image,指令也是類似,但有些獨有的參數,有些已經在 以 QEMU 加速嵌入式系統開發內提過,但有新增2個。一個是 DRM 和 USB HID,這是為了讓 Windows QEMU ARM64 Host 可以進入 Graphic mode 和有鍵盤可輸入,所以在編譯 kernel 時,記得這項也要加進去。

結語

要建置在 Windows 上執行的環境是有點煩索的,前後也寫了三篇文章,才總結出這個比較精簡的流程。如果要知道細結的設定,可以去看之前的文章,可以進一步的做客制化。

一個獨立的 x86 或 ARM 的系統,很適合做學習評估,相比自己用 QEMU 灌 Ubuntu ,空間上也小了很多。

附件

獨立 QEMU i386 預先配置檔 (qemu_i386env.tar.gz)

執行環境與初始檔案(standalone_x86_64_qemu.zip)

Leave a Reply