使用 QEMU 進行跨平臺開發

使用 QEMU 進行跨平臺開發

在一臺計算機上進行多平臺開發

Roderick W. Smith, 顧問和作家
Roderick W. Smith, 顧問和作家

簡介: Linux 的一個優勢是其跨平臺特性:它可以在 x86、x86-64、SPARC、PowerPC 及其他多箇中央處理器(CPU)上運行。但這種硬件的多重選擇就給軟件開發人員帶來了挑戰。確保軟件能在所有平臺上編譯運行通常會很困難。使用 QEMU 安裝包能減輕這項負擔。

QEMU 是一種支持多種 CPU 的機器模擬器,因此可以在 x86 計算機上運行 PowerPC 軟件,在 SPARC 計算機上運行 x86-64 軟件,或者其他任意組合。這項功能對於需要測試軟件字節順序兼容性和檢查 CPU 相關特性的程序員來說特別有用。QEMU 還允許完整運行不同的操作系統,因此可以在不關閉 Linux 的情況下測試程序在 FreeBSD、Solaris 甚至 Microsoft® Windows® 下的編譯能力。

虛擬化的一個優勢就是擴展了計算硬件的功能,可允許一臺計算機(主機)通過運行多個客戶 操作系統實現多個角色。然而當今很多流行的虛擬化工具在體系結構上還有所限制 — 只允許在同一架構下運行多個操作系統,如在單一的 x86-64 計算機上運行多 x86-64 操作系統。這種功能 QEMU 也能實現,但它還能以跨平臺方式運行操作系統。這項功能能夠在不增加計算機的條件下測試程序的平臺相關特性!

要使用 QEMU 進行跨平臺開發,首先必須安裝好 QEMU,然後安裝客戶操作系統。可能需要跳過一些額外步驟進行跨平臺開發。當模擬器安裝運行後,您可以訪問一些能幫助管理跨平臺開發的 QEMU 特性,例如允許文件在模擬器和主機之間傳輸或共享。

安裝 QEMU

通過安裝包的方式安裝 QEMU 會很容易,但如果您打算將該程序用於跨平臺軟件開發,應該再深入研究一些。例如,應該懂得 QEMU 安裝選項,以及必要支持文件如固件的安裝。還應懂得系統模擬與用戶空間模擬的區別,因爲二者都需安裝各自的附加軟件。

獲取 QEMU 安裝包和支持軟件

對於大多數 Linux 軟件包,您都能以下列兩種方式安裝 QEMU:使用安裝包方式或從源代碼編譯軟件。使用如下命令 apt-get install qemu(在 Debian 或 Ubuntu 上)、yum install qemu(在 Red Hat 或 Fedora 上) 或 emerge qemu(在 Gentoo 上)在通用的發行包上安裝(可從發行包說明文檔中獲得詳細信息)。

隨發行包提供的 QEMU 安裝包運行良好,但似乎落後於最新的版本,而且可能未提供一些重要文件,如用於非 x86 系統的固件。因此,可以從源代碼安裝軟件,這可以從 QEMU 網站獲得(參見 參考資料 部分的鏈接)。在根目錄輸入 ./configure--help 將出現一個配置選項列表,可以根據需要定製 QEMU。然後,使用常見的 makemake install 命令編譯並安裝軟件。

撰寫此文時,QEMU 的穩定版本是 0.11.1,但 0.12 候選版本也已經可用。我使用 0.11.1 版本作爲本文參考。

如果您正使用 QEMU 在 x86 或 x86-64 計算機上進行同樣模擬,您也許會對 KQEMU 感興趣。這是一個 Linux 內核模塊,它能提供加速的 CPU 虛擬化,與 Xen 或 Kernel-based Virtual Machine (KVM) 提供的一樣。KQEMU 卻不是標準 Linux 內核的一部分;必須從 QEMU 網站下載或從單獨的安裝包安裝。要注意 QEMU 與 KQEMU 版本匹配;KQEMU 1.3 用於 QEMU 0.9.1 及更早版本,KQEMU 1.4 用於QEMU 的更新的版本。

QEMU 主站點包含若干現成的 QEMU 磁盤鏡像文件。其中包含不同平臺如 FreeBSD 和 FreeDOS 的基本的 Linux 安裝程序。可以下載這些文件測試基本安裝。當系統運行後,既可以擴展原有系統,又可以重新安裝一個新的系統。

隨 QEMU 安裝包發放的有用於 x86、x86-64、PowerPC、SPARC 32 和 SPARC 64 平臺的固件,以及用於模擬視頻卡、 Preboot Execution Environment (PXE) 啓動和其他選項的單獨的固件文件。查看主安裝包的 pc-bios 子目錄,或已安裝系統的 /usr/share/qemu 獲取相關文件。

有時候隨 QEMU 提供的固件並不合適。例如,用於 x86 和 x86-64 系統的固件是傳統的基本輸入輸出系統(BIOS)。如果您想測試或開發那些依賴較新的 Extensible Firmware Interface (EFI) 或更高級固件的軟件,可能需要到別處尋找。QEMU 網站提供 EFI 鏡像,因此這種特殊條件能夠滿足。其他情況可能更困難。如果想要運行特定類型的固件,可能需要用相關的關鍵詞上網搜索。

系統與用戶空間模擬

QEMU 提供兩種模擬模式。第一種,系統模擬,安裝完全的虛擬機。運行在該系統的軟件看到的計算機與主機系統完全不同 — 例如,可以在實際的 x86-64 openSUSE 計算機上運行 PowerPC Debian 系統。用戶模式模擬沒有這麼完整。這種方式下,QEMU 模擬庫會用於每個二進制文件,他們將主計算機看成自己的,因此 PowerPC 二進制文件能看到主機 x86-64 openSUSE 系統的 /etc 目錄和其他配置文件。用戶模式模擬能簡化對本地資源、網絡等的訪問。

每個模擬方式都有其安裝要求。對於系統模擬,安裝客戶操作系統就像安裝一臺單獨的計算機(下載並使用預先配置的磁盤鏡像是一個替代方法)。對於用戶空間模擬,不需要安裝整個系統,但要考慮安裝使用軟件所需的支持庫。也許還需要配置跨編譯器以生成想要測試的二進制文件。

由於本文重點是使用 QEMU 開發測試跨平臺軟件,可能會包含少量的硬件交互,我重點介紹系統模擬。如果用戶空間模擬更滿足您的需要,您可以深入研究。


安裝客戶操作系統

在使用 QEMU 系統模擬模式之前,必須安裝一個客戶操作系統。根據上文所述,可以使用預先安裝的磁盤鏡像或準備一個磁盤鏡像進行全新安裝。後一種情況,必須首先準備一個 磁盤鏡像用於安裝,但安裝過程本身就和在普通計算機上安裝一樣。任何情況下,都必須瞭解重要的 QEMU 啓動選項,它們會影響安裝及系統使用。

準備磁盤鏡像

通常,當使用 QEMU 時,用磁盤文件代替硬盤。作爲替代方案,可以留出硬盤分區或網絡空間用於部分或全部存儲;儘管如此,磁盤文件還是很方便靈活,因此我推薦使用磁盤文件。 QEMU 支持幾種不同的文件格式用於模擬磁盤,最有用的是原始磁盤鏡像,VMware 3/4 格式和 QEMU 的原有的 Copy-On-Write 版本 1(QCOW)和 2(QCOW2)格式。

qemu-img 命令生成磁盤鏡像。該命令有很多選項,但基本使用相當簡單:傳遞給它 create 參數、-f fmt 參數來設置格式、文件名和鏡像大小。原始鏡像(-f raw)對於與其他模擬器交換數據非常有用;然而,QCOW2(-f qcow2)支持壓縮,能夠利用相對小的空間生成看上去很大的磁盤。

例如,以下命令將生成 200GB 的磁盤鏡像文件。一開始,該文件佔用主機很小的磁盤空間(只有 256KB);隨着使用,大小逐漸增長:

qemu-img create -f qcow2 linuxppc.qcow2 200G

 

除了生成硬盤鏡像,還需要生成包含安裝中介的鏡像文件。既可以指定 QEMU 作爲真實光驅,也可以指定包含光盤鏡像的文件,例如從網上下載的或從物理光盤生成的。

QEMU 啓動選項

當開始安裝或使用 QEMU 時,必須以合適的選項啓動程序,以能夠使用模擬器。QEMU 文檔提供了一些模糊的選項的信息,但還是能夠理解一二的。尤其是,必須指定硬盤鏡像以及安裝中介或鏡像。還有選項是選擇不同的固件文件,設置各種硬件特 性,等等。可以從簡單的開始,然後逐漸進行復雜的配置。

完整的 QEMU 安裝包含若干二進制文件,其中每個都模擬不同的 CPU 架構。二進制文件名採用 qemu-system-arch 的格式,其中 arch 是架構代碼,ppc 表示 PowerPC 以及 x86_64 表示 x86-64。一個例外是 x86 系統,它通過 qemu 二進制文件模擬。採用 qemu-arch 格式名稱的二進制文件提供各自架構的用戶模式模擬。

爲指定硬盤,使用 -hda-hdb-hdc-hdd 來引用 Parallel ATA (PATA) 硬盤,-cdrom 指定 CD 或 DVD 鏡像文件或設備。這些選項都採用文件名作爲參數。光驅佔用了 -hdc 的位置,因此不能同時使用這兩個選項。

另一個重要的 QEMU 啓動選項是 -boot,它指定了啓動設備。使用 -boot c 從第一個硬盤啓動,-boot d 從 CD-ROM 設備啓動。

默認情況下,QEMU 提供給用戶操作系統僅 128MB RAM。可以在 -m 選項中增加可使用的內存,它的值以兆字節爲單位。

這些選項都設置好後,使用 QEMU 安裝 Debian 的 PowerPC 系統會像這樣:

qemu-system-ppc -hda linuxppc.qcow2 -cdrom debian-ppc.iso -boot d -m 512

 

本例假設 debian-ppc.iso 文件包含 Debian PowerPC 安裝盤的拷貝,並且可使用默認固件啓動。我使用的是 QEMU 0.11.1 和 Debian 5.02a;然而,QEMU 會很苛刻,因此要找到一個解決問題的措施。但系統安裝後,可以使用幾乎一致的命令來啓動系統 — 只要將 -boot d 改成 -boot c

警告、陷阱和解決措施

一個常見的障礙是,尤其是如果您正試圖啓動一個不熟悉的架構,安裝盤可能無法啓動。此問題的一個解決方法是通過 -bios 選項指定一個不同的固件文件,它以固件文件名作爲選項。讀取 /usr/local/share/qemu(或 /usr/share 中的相似的文件夾,如果是用發行包安裝)中的固件文件。還可以通過網絡搜索找到其他固件選項。

一個相似的解決方法是使用 -M 選項指定一個架構子類型。輸入 qemu-system-arch -M ? 來了解有哪些值可用於您的架構。

另一種替代方法是使用 -kernel 選項;將用於主機磁盤上的用戶平臺的 Linux 內核文件名傳遞給它,QEMU 將會加載並運行,這將會忽略任何平臺相關啓動加載器或固件特性可能帶來的問題。

由於 QEMU 模擬目標平臺的 CPU,它可能會行動遲緩,因此應做好準備花費比一般安裝用戶操作系統更長的時間。如果可能,應當堅持最小安裝需求並避免 X Window System。

當 QEMU 準備好運行,它會以文字模式窗口中的圖形模式在本機系統下運行。 圖 1 顯示了有三個 QEMU 會話的桌面, Windows XP 運行在 x86 模擬器下,FreeBSD 運行在 x86-64 模擬器下,Debian Linux 運行在 PowerPC 模擬器下。


圖 1. QEMU 允許在多個模擬平臺上運行多個操作系統
帶有三個 QEMU 會話的桌面的圖像,Windows XP 運行在 x86 模擬器下,FreeBSD 運行在 x86-64 模擬器下,Debian Linux 運行在 PowerPC 模擬器下


高效使用 QEMU

安裝完客戶操作系統後,就可以開始用於軟件開發或測試。您需要能夠在客戶和主機之間傳輸文件。有三種方法實現這項任務,但使用模擬網絡是最靈活的方法。還應考慮 QEMU 模擬與軟件開發相關的功能和限制,以發揮模擬器的最大優勢。

管理文件傳輸

QEMU 提供若干網絡選項。默認是用戶模式網絡,它與網絡地址翻譯(NAT)配置類似:用戶操作系統可以使用網絡客戶端連接其他計算機,包括主機操作系統和其他網 絡服務器,但其他系統需要特別配置才能連接客戶操作系統。QEMU 提供自身的動態主機配置協議(DHCP)和域名系統(DNS)服務器用於客戶操作系統本身。對於客戶操作系統,主機就是一個網關係統。

如果您打算使用 Network File System (NFS)、Server Message Block (SMB)/Common Internet File System(CIFS)、Secure Shell (SSH) 或其他客戶端從用戶與主機傳遞文件,默認配置已經足夠。但是,必須在主機端運行合適的服務器。如果想要初始化其他方向的連接,必須使用 -redir 選項將主機系統上的端口重新指向客戶操作系統。例如,以下命令將主機的 2222 端口重新指向客戶的 22 端口:

qemu-system-ppc -hda linuxppc.qcow2 -boot c -m 512 -redir tcp:2222::22

 

執行該命令的結果是可以使用 SSH 通過輸入 ssh localhost -p 2222 從主機端登錄客戶端。也可以從網絡中其他計算機訪問客戶端。因此要設定新的固件規則。當然,需要在客戶操作系統運行 SSH 服務器。您可用同樣的方式重定向 NFS、SMB/CIFS 或其他端口。

軟件開發技巧

現在 QEMU 已安裝並運行客戶操作系統,現在可以開始開發軟件。既可用模擬器下的原有編譯器,也可用主機上的跨編譯器。對於需要在客戶操作系統反覆編譯和測試軟件的大 型開發項目,跨編譯器可能更快,但其安裝配置已超出本文範圍。模擬器下運行的編譯器適合於小型項目,或不經常編譯軟件的項目。

對於軟件,計算機就像是目標平臺的真實例子,可用於最實際的用途。一些特性,如字節順序、CPU 一致性以及其他硬件基本特性就像在一臺真實計算機上一樣運行正常。我使用過真實的 PowerPC Apple iMac 和基於 QEMU 的 PowerPC 系統開發和測試全局惟一標識符(GUID)分區表(GPT) fdisk 程序的 PowerPC 版本,該程序需要知道 CPU 的字節順序,在我看來,基於 QEMU 的系統與真實的 iMac 別無二致,除了 QEMU 系統有些慢。

這說明,如果深入探究,確實有些差異。例如,QEMU 的模擬硬盤會返回 “QEMU HARDDISK” 的模式字符串,與真實的硬盤驅動器不同。總的來說,QEMU 的虛擬硬盤有些過時;硬盤都是 PATA 或 Small Computer System Interface (SCSI) 設備,這根據具體平臺,視頻硬件也過時了。可以在 QEMU 文檔中找到虛擬硬件的詳細信息。請注意各個版本的詳細信息都不同。

在 Linux 下,QEMU 會話佔用很少的 CPU 時間,除了客戶操作系統工作時。但 QEMU 會話會佔用指定給它的 RAM 容量。因此,從實際出發,需要給主機系統大量內存,尤其是打算同時運行多於一個或兩個 QEMU 會話時。


更深入的內容

QEMU 是個有多個選項的大安裝包,其中很多讓一些開發人員很感興趣。例如,可以更改模擬網卡的模式,給客戶機器一個真實網絡中單獨的 Internet Protocol(IP) 地址 ,將各種硬件端口重新定向到客戶操作系統,組合選取各種硬件選項。如果這些特性對您很重要,那麼這些 QEMU 文檔將會非常重要。

 

參考資料

學習

獲得產品和技術

  • 訪問 QEMU 網站 下載 QEMU 和相關工具,閱讀大量文檔,查找其他資源連接。
     
  • 使用可以直接從 developerWorks 下載的 IBM 產品評估試用版軟件,在 Linux 上構建您的下一個項目。
     

討論

  • 加入 My developerWorks 社區。聯繫其他 developerWorks 用戶,訪問開發人員創辦的博客、論壇、羣組和維客。
     

作者簡介

作者照片-Rod Smith

Roderick W. Smith 是一名顧問,還是多本圖書的作者,包括 The Definitive Guide to Samba 3, Linux in a Windows WorldLinux Professional Institute Certification Study Guide。他目前居住在羅德島的文索基特。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章