我正在使用基于Linux的VMM学习英特尔VMX 我找到了' vmlaunch'指令失败,vm指令错误为7 我检查了英特尔的SDM,这意味着“无效控制字段的虚拟机进入”# 我仔细检查了VM_entry_control,VM_exit_control,VM_exec_control,但找不到任何错误。 我正在使用EPTP执行VM(VM处于实模式)。 以下是控制字段和VMX功能。 主机CPU信息如下 Linux内核是3.10和4.4.0。
processor : 1 vendor_id : GenuineIntel cpu family : 6 model : 63 model name : Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz stepping : 2 microcode : 0x37 cpu MHz : 2391.223 cache size : 15360 KB fpu : yes fpu_exception : yes cpuid level : 13 wp : yes
<pre>
0x0000001F = control_VMX_pin_based
0xA50061F2 = control_VMX_cpu_based
0x00000082 = control_VMX_proc2_based
0x00000000 = control_exception_bitmap
0x00000000 = control_pagefault_errorcode_mask
0xFFFFFFFF = control_pagefault_errorcode_match
0x00000002 = control_CR3_target_count
0x00036FFB = control_VM_exit_controls
0x000011FB = control_VM_entry_controls
0x00000000 = control_VM_entry_interruption_information
0x00000000 = control_VM_entry_exception_errorcode
0x00000000 = control_VM_entry_instruction_length
0x0000000000000020 = control_CR0_mask
0x0000000000002000 = control_CR4_mask
0x0000000000000020 = control_CR0_shadow
0x0000000000002000 = control_CR4_shadow
0x0000000000000000 = control_CR3_target0
0x0000000124FCE000 = control_CR3_target1
0x0000000000000000 = control_CR3_target2
0x0000000000000000 = control_CR3_target3
主机VMX功能如下,
VMX-Capability Model-Specific Registers 00D8100000000001 = IA32_VMX_BASIC_MSR 0000003F00000016 = IA32_VMX_PINBASED_CTLS_MSR FFF9FFFE0401E172 = IA32_VMX_PROCBASED_CTLS_MSR 0033FFFF00036DFF = IA32_VMX_EXIT_CTLS_MSR 0000B3FF000011FF = IA32_VMX_ENTRY_CTLS_MSR 00000000000401E0 = IA32_VMX_MISC_MSR 0000000080000021 = IA32_VMX_CR0_FIXED0_MSR 00000000FFFFFFFF = IA32_VMX_CR0_FIXED1_MSR 0000000000002000 = IA32_VMX_CR4_FIXED0_MSR 00000000000427FF = IA32_VMX_CR4_FIXED1_MSR 000000000000005A = IA32_VMX_VMCS_ENUM_MSR 000000EE00000000 = IA32_VMX_PROCBASED_CTLS2 00000F0106114041 = IA32_VMX_EPT_VPID_CAP 0000003F00000016 = IA32_VMX_TRUE_PINBASED_CTLS FFF9FFFE04006172 = IA32_VMX_TRUE_PROCBASED_CTLS 0033FFFF00036DFB = IA32_VMX_TRUE_EXIT_CTLS 0000B3FF000011FB = IA32_VMX_TRUE_ENTRY_CTLS
答案 0 :(得分:1)
我在您提供的字段中没有看到任何错误,但是对未列出的字段进行了更多检查。例如,使用MSR位图为1,但不显示MSR位图地址的值。
您应该完成第26.2.1节中的所有检查。
我建议您查看与无限制客人相关的任何检查。建议您在退出和输入控件中设置控件以保存和恢复EFER。
答案 1 :(得分:1)
通过检查VMCS字段,我发现无效控件来自EPTP 在那个CPU中,它不支持“脏/访问”。 EPTP中的位为1(位6) 将该位设置为0后,没有“无效”控制字段&#39;错误。