【问题标题】:How to start a virtual machine guest armv8 on amd64 host with qemu如何使用 qemu 在 amd64 主机上启动虚拟机 guest armv8
【发布时间】:2020-08-26 12:56:52
【问题描述】:

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

背景:

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

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

解压后得到了解压出来的图片'ubuntu18045arm64rpi3.img'

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

sudo qemu-system-aarch64 -m 1024 -cpu cortex-a53 -M virt -drive if=none,file=ubuntu18045arm64rpi3.img,id=hd0

这给了我一个像这样的窗口:

现在我的主要问题是:

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

  2. 稍后,我想在来宾 ARMv8 机器上安装一个编译器(如果还没有的话)并在那里编译我的项目。之后,我计划将编译后的二进制文件传输到真正的 ARMv8 机器上,并希望它们能够毫无困难地运行。目前的方法可以做到吗?

【问题讨论】:

    标签: arm cross-platform virtualization qemu


    【解决方案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 系统相同。如果两个系统具有相同的操作系统/发行版版本(因此它们具有相同的库版本等),并且安装了相同的运行时库集,并且您没有告诉编译器进行编译以使用目标 CPU 没有的 CPU 功能'没有,那么它应该可以工作。

    顺便说一句,在此模拟设置中进行编译将大大慢于您当前的交叉编译设置或直接在真正的 AArch64 硬件上编译二进制文件。

    【讨论】:

    • 谢谢。如何选择正确的内核或 BIOS 来启动?从磁盘映像中提取内核是一个不错的选择吗?
    猜你喜欢
    • 2021-07-20
    • 2016-02-11
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 2013-03-28
    • 2021-09-03
    • 2020-07-17
    • 1970-01-01
    相关资源
    最近更新 更多