如何使用qemu在amd64主机上启动虚拟机来宾armv8

时间:2020-08-26 12:56:52

标签: arm cross-platform virtualization qemu

当我要使 guest 系统成为时,如何在Ubuntu 18.04 x86_64主机系统上使用 qemu 运行虚拟机> ARMv8 (Raspberry Pi 3,对Cortex A53处理器更感兴趣)吗?

背景:

我想在提到的主机系统上使用ARMv8编译用于真实计算机的项目。当前,这是通过直接在主机系统中进行交叉编译来完成的。由于许多不同的原因,我想设置一个虚拟机,该虚拟机编译ARMv8的本机二进制文件(虚拟地)。这些二进制文件稍后需要在真正的ARMv8机器上运行。

除了Qemu和要安装在主机系统上的正确的qemu-system-aarch64之外,还有一个所需的操作系统映像。理想情况下,与在实际ARMv8设备上运行的设备相同。 https://ubuntu.com/download/raspberry-pi提供了Ubuntu IoT核心版18.04 64位,我将其保存到名为ubuntu18045arm64rpi3.img.xz的本地文件夹中。

提取后,我得到了提取的图像'ubuntu18045arm64rpi3.img'

要使用给定的映像和所需的架构启动虚拟机,请输入以下内容:

<div id="sort">
  <a id="sort-best" class="choose-cat" data-order="3,1,2">best</a> |
  <a id="sort-default" class="choose-cat" data-order="1,2,3">default</a>
</div>
<div id="container">
  <article data-custom-sort="1">
    One
  </article>
  <article data-custom-sort="2">
    Two
  </article>
  <article data-custom-sort="3">
    Three
  </article>


</div>

这给了我一个这样的窗口: qemu monitor

现在我的主要问题是:

  1. 我希望虚拟机启动,可以在其中从给定映像安装操作系统。我做错了什么或如何实现此目标?

  2. 稍后,我想在来宾ARMv8计算机上安装编译器(如果尚未安装),然后在此处编译我的项目。之后,我计划将已编译的二进制文件传输到真正的ARMv8机器上,并希望它们能够轻松运行。用当前的方法有可能吗?

1 个答案:

答案 0 :(得分:1)

您不能仅将磁盘映像传递给aarch64 QEMU并使其启动。您需要传递内核以进行引导,或者传递BIOS(可能是UEFI)映像(然后可以从磁盘映像读取内核)。

此博客文章提供了一个在QEMU上运行Debian的示例;使Ubuntu启动可能与此类似。 https://translatedcode.wordpress.com/2017/07/24/installing-debian-on-qemus-64-bit-arm-virt-board/

您的链接指向树莓派特定的磁盘映像-因为您不要求QEMU为树莓派板建模,所以我建议您不要使用它。您想要Ubuntu提供的任何东西作为其最普通/最通用的aarch64映像。如果要进行“通过UEFI引导”路由,则需要用于SBSA / UEFI系统的磁盘映像。

关于编译二进制文件的可移植性的第二个问题,实际上与任何两个Linux系统相同。如果两个系统具有相同的OS /发行版(因此它们具有相同的库版本等),并且安装了相同的运行时库集,并且您没有告诉编译器使用目标CPU所没有的CPU功能进行编译。没有,那么它应该可以工作。

顺便说一下,在此仿真设置中进行的编译将比当前的交叉编译设置或直接在真实的AArch64硬件上直接编译二进制文件要慢得多。