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

如何使用qemu在amd64主机上启动虚拟机来宾armv8,arm,cross-platform,virtualization,qemu,Arm,Cross Platform,Virtualization,Qemu,当我希望来宾系统是ARMv8时,如何在Ubuntu 18.04x86_64主机上运行带有qemu的虚拟机(Raspberry Pi 3,更具体地说是对Cortex A53处理器感兴趣) 背景: 我想在上面提到的主机系统上为一台真正的机器编译一个项目。目前,这是通过主机系统中的交叉编译直接完成的。出于许多不同的原因,我想建立一个虚拟机,为ARMv8编译(实际上)本机二进制文件。这些二进制文件以后需要能够在真正的ARMv8机器上运行 除了要在主机系统上安装的Qemu和正确的Qemu-system-a

当我希望来宾系统是ARMv8时,如何在Ubuntu 18.04x86_64主机上运行带有qemu的虚拟机(Raspberry Pi 3,更具体地说是对Cortex A53处理器感兴趣)

背景:

我想在上面提到的主机系统上为一台真正的机器编译一个项目。目前,这是通过主机系统中的交叉编译直接完成的。出于许多不同的原因,我想建立一个虚拟机,为ARMv8编译(实际上)本机二进制文件。这些二进制文件以后需要能够在真正的ARMv8机器上运行

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

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

要启动具有给定映像和所需体系结构的虚拟机,请键入以下内容:

sudo qemu-system-aarch64 -m 1024 -cpu cortex-a53 -M virt -drive if=none,file=ubuntu18045arm64rpi3.img,id=hd0
这给了我一个这样的窗口:

现在我的主要问题是:

  • 我希望启动一个虚拟机,在那里我可以从给定的映像安装操作系统。我做错了什么或者如何实现这个目标

  • 稍后,我想在来宾ARMv8机器上安装一个编译器(如果还没有的话),并在那里编译我的项目。之后,我计划将编译后的二进制文件传输到真正的ARMv8机器,并期望它们能够顺利运行。目前的做法是否可能做到这一点


  • 您不能只将磁盘映像传递给aarch64 QEMU并引导它。您需要传递一个内核进行引导,或者传递一个BIOS(可能是UEFI)映像(然后可以从磁盘映像中读取内核)

    这篇博文有一个在QEMU上运行Debian的例子;启动Ubuntu可能与此类似。

    您的链接是指向特定于raspberry pi的磁盘映像——因为您并没有要求QEMU为raspberry pi板建模,所以我建议不要使用它。你想要Ubuntu提供的任何东西作为他们最普通/通用的aarch64图像。如果您选择“通过UEFI引导”,那么您需要一个用于SBSA/UEFI系统的磁盘映像

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


    顺便说一句,在这个模拟设置中编译要比当前的交叉编译设置或直接在真正的AArch64硬件上编译二进制文件慢得多。

    谢谢。如何选择正确的内核或BIOS来启动?从磁盘映像中提取内核是一个好的选择吗?