Debian

使用 QEMU 建構和執行 ARM 系統映像?

  • June 11, 2020

我正在嘗試為基於 Debian 的 ARM(或什至)設置一個可以與 QEMU 一起執行的完整armhf系統armel映像aarch64。不幸的是,我在網上找到的所有範例都是通過傳遞核心來啟動映像的(initrd如果它需要一些模組,則可能是)。

但是,我真的很想啟動系統qemu-system-amd64,只需提供磁碟映像和 CD-ROM 映像(開始安裝)。

-machine我可以理解and沒有預設值-cpu,但我在網上找不到任何關於如何執行以下操作的線索:

#> wget \
  http://cdimage.debian.org/.../armhf/iso-cd/debian-testing-armhf-netinst.iso
...
#> qemu-img create -f qcow2 debian-armhf.qcow 20G
...
#> qemu-system-arm -machine vexpress-a9 -cpu cortex-a9     \
                  -hda debian-armhf.qcow                  \
                  -cdrom debian-testing-amd64-netinst.iso \
                  -boot d
...
#> qemu-system-arm -machine vexpress-a9 -cpu cortex-a9     \
                  -hda debian-armhf.qcow                  \
                  -net nic -net user,hostfwd=tcp::2222-:22
...

所以,我真的很想知道這樣的事情是否可能……如果是的話,怎麼辦?如果沒有,為什麼?

這是一個很好的問題,我不久前選擇深入研究自己,只是對我來說它使用的是 MIPS/MIP64。

有幾個問題使這項工作具有挑戰性。

啟動 Linux 主機時,核心需要了解它正在使用的硬體。對於某些架構(如 amd64),韌體的發現由 BIOS 通過“高級配置和電源介面”(ACPI)處理。在其他情況下,這由可擴展韌體介面 ( EFI ) 甚至 ATAGS 作為非常古老的解決方案來處理。在大多數現代嵌入式系統中,ATAGS 的使用已被一種稱為“設備樹 blob”( DTB ) 的機制所取代。一系列樂於助人的使用者在解釋差異方面做得比我做得更好。

所有這些的目的是幫助向核心提示硬體配置,並且通常與引導載入程序協同工作。在您的情況下,在 ARM 小端 ( armel)、ARM 硬浮點 ( armhf) 和 ARM 64 位 ( aarch64) 之間進行選擇是一個關鍵的第一個決定,因為它會對編譯包、核心等的選擇產生影響,因為一切都需要符合模擬的“指令集架構”(ISA)。

我知道您想要空白磁碟和 CD 映像的簡單性,但這最終是為什麼 Raspberry Pi* 等系統沒有這種形式的“安裝程序”。當您下載 Raspbian 映像時,它包含一組結構化的分區,其中包括引導載入程序 (das uBoot)、相應硬體的設備樹 blob,以及配置了軟體包儲存庫的可用軟體包的基本集。

這涉及到另一個有趣的瑣事……你有沒有看過 ISO 映像在你“安裝”Linux 時做了什麼?

讓我以基於 Anaconda 的安裝程序(Fedora、RHEL、CentOS 等)為例。

當您開始安裝時,它會啟動一個最小的實時系統,該系統會自動開始執行 python 實用程序Anaconda。Anaconda 然後提示使用者回答一系列問題,以特定領域的語言填充配置文件,然後創建一個 chroot 並在該 chroot 內執行一組軟體包安裝。

這……在某種程度上,它就像使用那個 Raspbian 圖像。

那麼這是什麼意思?

好吧,首先我會推荐一些答案,具體取決於您要如何進行?

如果模擬 RPi 就足夠了,我建議: Using QEMU to emulate a Raspberry Pi

如果您想模擬更像是基於“雲”的系統,George Hawkins 維護了一個Gist 並提供了一些很好的說明

如果您真的想從頭開始,Debian 使用者 Aurel32 多年來一直維護著一組可以啟動的基礎鏡像,並且在他們的部落格上寫了一篇關於類似過程的精彩文章

引用自:https://unix.stackexchange.com/questions/470210