如何在 x86 上通过 Linux KVM API 实例化基于 ARM 的 VM?

Zte*_*tex 2 virtualization kvm qemu hypervisor linux-kernel

假设我有一台 x86 机器。通过 Linux KVM API 可以轻松创建 x86 VM。

请参阅:vm_init()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");
Run Code Online (Sandbox Code Playgroud)

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

然而,我的问题是,如果我希望该虚拟机是 ARM 架构怎么办?

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

Mar*_*lli 8

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

x86 机器上的作用qemu-system-arm是模拟软件和用户空间中的所有指令,无需主机内核/CPU 的任何帮助。qemu-system-arm仅当您使用的是支持 KVM 的 ARM 计算机时,您才能使用 KVM 。有关详细信息,请参阅KVM 处理器支持