【问题标题】:How to instantiate an ARM-based VM through Linux KVM API on x86?如何通过 x86 上的 Linux KVM API 实例化基于 ARM 的 VM?
【发布时间】:2021-11-29 14:47:48
【问题描述】:

假设我有一台 x86 机器。通过 Linux KVM API 创建 x86 VM 很容易。

见:vm_init() in kvm-host

if ((v->kvm_fd = open("/dev/kvm", O_RDWR)) < 0)
        return throw_err("Failed to open /dev/kvm");

    if ((v->vm_fd = ioctl(v->kvm_fd, KVM_CREATE_VM, 0)) < 0)
        return throw_err("Failed to create vm");

    if (ioctl(v->vm_fd, KVM_SET_TSS_ADDR, 0xffffd000) < 0)
        return throw_err("Failed to set TSS addr");
...
if ((v->vcpu_fd = ioctl(v->vm_fd, KVM_CREATE_VCPU, 0)) < 0)
        return throw_err("Failed to create vcpu");

在这个项目中,很容易在 x86 机器上创建 x86 VM。

但是,我的问题是,如果我希望该 VM 成为 ARM 架构怎么办?

我相信这是适用的,因为我们有 qemu-system-arm,而我试图实现的正是它所做的。

【问题讨论】:

    标签: linux-kernel virtualization qemu kvm hypervisor


    【解决方案1】:

    你所要求的是不可能的。 KVM 不能为与内核构建和运行的架构不同的架构运行虚拟机。如果要使用 KVM 运行 ARM VM,则必须在 ARM 处理器上执行此操作。 KVM 只是利用底层 CPU 的硬件能力进行虚拟化,这意味着指令由宿主 CPU 有效运行,因此您无法在 x86 机器上运行 ARM 代码。

    qemu-system-arm 在 x86 机器上所做的是模拟软件和用户空间中的所有指令,而无需主机内核/CPU 的任何帮助。只有在支持 KVM 的 ARM 机器上,您才能将 KVM 与 qemu-system-arm 一起使用。欲了解更多信息,请参阅KVM Processor Support

    【讨论】:

    • 感谢您的回答。这确实更有意义。
    【解决方案2】:

    您可以使用注册为适当解释器的 qemu-arm-system 构建一个虚拟机,其文件系统中只有 arm 可执行文件。这有点矫枉过正,因为你可以只用 chroot 做同样的事情,而且由于 qemu 的介入,系统控制水平大致相同。

    这个github link 有它的秘诀;但你可以通过四处搜索找到一堆。设置好之后,如果你愿意,你可以很容易地将它封装在一个虚拟机中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-09
      • 2019-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多