我有一台双启动 Windows 7 和 Gentoo Linux(均为 64 位)的计算机。我希望能够在启动 Windows 时在 VM 中加载我的 Linux 安装。我安装了 VirtualBox 并按照说明创建了原始磁盘 VMDK。当我启动 VM 时,Linux 开始启动,但在解锁我的根分区时失败并出现以下错误:
truecrypt[441] trap invalid opcode ip:373615538e0 sp:3dd0e0dfb60 error:0 in libpixman-1.so.0[373614d6000+8d000]
当我直接启动 Linux 时,一切都运行正常。
仅在 VirtualBox 启动时,什么原因会导致 libpixman 中出现非法指令?
更新:
作为故障排除步骤,我重新编译了 pixman,没有使用“-march”,并且不再在该库中出现非法指令错误。(但是,启动在同一个位置失败,并在不同的库中出现相同的错误。)
我如何确定 VirtualBox 中不起作用的特定操作码,以便我可以在我的 CFLAGS 中禁用它,而不必禁用所有特定于 CPU 的优化?
我仍然不明白为什么有些用户模式指令在虚拟机中无法运行。这是一个已知的限制吗?我的 CPU 是 Intel Core i7 3720QM,并且启用了硬件虚拟化支持。
答案1
问题在于“-march=native”导致编译的系统二进制文件包含 SSE4 和 AVX 指令,而我使用的 VirtualBox 版本不支持这些指令。在我的编译器标志中明确禁用这些指令并重新编译后,系统便可以在 VirtualBox 下正常启动。