4

У меня есть компьютер с двойной загрузкой Windows 7 и Gentoo Linux (оба 64-разрядные). Я хочу иметь возможность загрузить мою установку Linux в виртуальную машину, пока я загружаюсь в Windows. Я установил VirtualBox и следовал инструкциям по созданию сырого диска VMDK. Когда я запускаю виртуальную машину, Linux начинает загружаться, но затем завершается неудачно со следующей ошибкой при разблокировке моего корневого раздела:

truecrypt[441] trap invalid opcode ip:373615538e0 sp:3dd0e0dfb60 error:0 in libpixman-1.so.0[373614d6000+8d000]

Все работает нормально, когда я загружаюсь в Linux напрямую.

Что может привести к тому, что недопустимая инструкция будет вызвана в libpixman только при загрузке в VirtualBox?

Обновить:

В качестве шага устранения неполадок я перекомпилировал pixman без «-march» и больше не получаю ошибку недопустимой инструкции в этой библиотеке. (Однако загрузка не удалась в одном месте с одной и той же ошибкой в другой библиотеке.)

Как я могу определить конкретный код операции, который не работает в VirtualBox, чтобы я мог отключить его в своих CFLAGS без необходимости отключения всех оптимизаций для конкретного процессора?

Я все еще не понимаю, почему существует какая-либо инструкция в пользовательском режиме, которая не работает в виртуальной машине. Это известное ограничение? Мой процессор - Intel Core i7 3720QM, и у меня включена поддержка аппаратной виртуализации.

1 ответ1

0

Выяснилось, что проблема заключалась в том, что "-march = native" приводил к скомпилированным системным двоичным файлам, содержащим инструкции SSE4 и AVX, которые не поддерживаются версией VirtualBox, которую я использовал. Явное отключение этих флагов в моих компиляторах и перекомпиляция позволили системе загрузиться должным образом под VirtualBox.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .