MAC OS X上的VMXON - 拒绝工作

时间:2014-08-09 10:26:37

标签: macos virtualization hypervisor

我正在尝试在OS X 10.9.4上运行虚拟机管理程序,但VMXON拒绝运行。 我的系统规格:Intel core i5 2.4,8gb ram

我做了以下事情: 1)检查CPU是否支持使用cpuid的VMX。 2)打开CR0和CR4寄存器中所有需要的位。检查需要使用0x486,0x488和RDMSR打开哪些位。 3)使用以下命令为VMX区域分配内存:

if ((vmxon_region = IOBufferMemoryDescriptor::inTaskWithOptions(kernel_task, kIOMemoryPhysicallyContiguous , 0x400, PAGE_SIZE)) == NULL) {
    IOLog("LOG : Failed to allocate memory. Aborting \n");
    return kIOReturnAborted;
}

4)使用以下命令将VMX REV ID复制到区域的前4个字节:

(vmx_rev_id包含取自rdmsr的0x480低部分的vmx版本ID。 在我的情况下(Core i5),值为12HEX)

    if ((vmxon_region->writeBytes(0, &vmx_rev_id, sizeof(int))) < sizeof(int)) {
        IOLog("LOG : Failed to write to the vmx region. Aborting. \n");
        return kIOReturnAborted;
    }

为了安全起见,我把剩下的字节归零(不知道是否真的有必要)。

我做的最后一件事是用:

启动vmxon
uint64_t physicalAddr = vmxon_region->getPhysicalAddress();

asm volatile("vmxon %0; "::"g"(&physicalAddr));
asm volatile("jbe vmxon_fail\n");
vmxon_success = 1;
asm volatile("jmp vmxon_finish\n"
             "vmxon_fail:\n"
             "pushfq\n"
             );
asm volatile ("popq %0\n"
              :
              :"m"(rflags_value)
              :"memory"
              );
vmxon_success = 0;
asm volatile("vmxon_finish:\n");

此代码后rflags_value的值为:515

表示进位标志已打开(因此,地址可能无效 - 不知道为什么)。

有什么建议吗?几乎尝试了一切= [

0 个答案:

没有答案