Как я могу установить виртуальную машину Linux на 64 бита на Linux на 32 бита?

Целый ABI отличается, не только двоичный формат (Мужественный по сравнению с ELF) как sepp2k упомянутый.

Например, в то время как и Linux и Darwin/XNU (ядро OS X) использование sc на PowerPC и int 0x80/sysenter/syscall на x86 для syscall записи, нет намного больше вместе оттуда на.

Darwin направляет отрицательные syscall числа на микроядро Маха, и положительные syscall числа в монолитном ядре BSD - — видят xnu/osfmk/mach/syscall_sw.h и xnu/bsd/kern/syscalls.master. syscall числа Linux варьируются архитектурой — видят linux/arch/powerpc/include/asm/unistd.h, linux/arch/x86/include/asm/unistd_32.h, и linux/arch/x86/include/asm/unistd_64.h — но являются все неотрицательными. Так, очевидно, syscall числа, syscall аргументы, и даже какие syscalls существуют, отличаются.

Стандарт C библиотеки времени выполнения отличается также; Darwin главным образом наследовал libc FreeBSD, в то время как Linux обычно использует glibc (но существуют альтернативы, как eglibc и dietlibc и uclibc и Бионические).

Не говоря уже о том, что целый графический стек отличается; игнорируя целые библиотеки Cocoa Objective-C, программы GUI на OS X говорят с WindowServer по портам Маха, в то время как на Linux, программы GUI обычно говорят с X-сервером по сокетам домена UNIX с помощью протокола X11. Конечно, существуют исключения; можно работать X на Darwin, и можно обойти X на Linux, но приложения OS X определенно не говорят X.

Как Вино, если кто-то поместил работу в

  • реализация двоичного загрузчика для Мужественного
  • захват каждого XNU syscall и преобразование его для адаптации Linux syscalls
  • запись замен для библиотек OS X как CoreFoundation по мере необходимости
  • запись замен для сервисов OS X как WindowServer по мере необходимости

затем запущение программы OS X "исходно" на Linux могло быть возможным. Несколько лет назад, Kyle Moffet сделал некоторую работу над первым объектом, создав прототип binfmt_mach-o для Linux, но это никогда не завершалось, и я не знаю ни о каких других подобных проектах.

(В теории это довольно возможно, и подобные усилия много раз делались; в дополнение к Вину сам Linux имеет поддержку рабочих двоичных файлов от другого UNIXes как HP-UX и Tru64, и проект Glendix имеет целью приносить совместимость Плана 9 к Linux.)


Кто-то вставил усилие реализовать Мужественный двоичный загрузчик и переводчика API для Linux!

shinh/maloader - GitHub проявляет подобный Вину подход загрузки двоичного файла и захвата/перевода всех вызовов библиотеки в пространстве пользователя. Это полностью игнорирует syscalls и все графически-связанные библиотеки, но достаточно для получения многой консольной работы программ.

Любимый полагается на maloader, добавляя библиотеки и другие поддерживающие биты во время выполнения.

11
29.06.2011, 07:04
2 ответа

И VMware и VirtualBox могут выполнить 64-разрядную виртуальную машину в 32-разрядной хост-системе, если у Вас есть 64-разрядный процессор. Для VirtualBox Ваш процессор должен иметь аппаратную поддержку виртуализации (или AMD-V или VT-x, показанный как svm и vmx в flags: строка /proc/cpuinfo в соответствии с Linux); большинство x86-64 процессоров за исключением более ранних, и в особенности я думаю все модели Core i5, имею эту поддержку.

Приводя это к сбою, можно использовать технологию виртуальной машины, которая эмулирует x86-64 процессор в программном обеспечении, таком как Qemu. Но это не хорошая идея, если Вам не нужен он: это является медленным, требующим много памяти, и неловким.

Моя рекомендация состоит в том, чтобы просто получить 64-разрядный хост или по крайней мере 64-разрядное ядро. Можно запустить 32-разрядные приложения на x86-64 (иначе amd64) ядро, на самом деле можно выполнить совершенно 32-разрядное пространство пользователя Linux на ядре amd64 Linux.

Ubuntu не обеспечивает 64-разрядное ядро в своем i386 распределении (Debian делает). Можно захватить ядро от amd64 распределения, и приложения должны просто работать, но под аккуратным пакет не является легко устанавливаемым.

Таким образом, самый легкий маршрут к запуску 64-разрядных приложений был бы, делают параллельную установку amd64 Ubuntu. Установите его на отдельном разделе, сохранив Вашу существующую 32-разрядную установку также. В 64-разрядной системе смонтируйте существующие разделы, затем настройте 32-разрядный schroot (см. это руководство)) запускать 32-разрядные программы.

6
27.01.2020, 19:59
  • 1
    я выбрал VMware, инстанцировав сервера человечности 64 бита 11,04 изображений, и это работает. –  719016 29.06.2011, 16:45

Gilles указывает, что я ошибался о VirtualBox и VMware, поддерживающем 64-разрядных гостей на 32-разрядных хостах. VirtualBox доступен в репозиториях Ubuntu в virtualbox-ose пакет.

Документация VirtualBox предоставляет следующую консультацию относительно выполнения 64-разрядных операционных систем:

VirtualBox поддерживает 64-разрядные гостевые операционные системы, даже в 32-разрядных хостовых операционных системах, при условии, что следующим условиям отвечают:

  1. Вам нужен 64-разрядный процессор с аппаратной поддержкой виртуализации (см. раздел, названный “Аппаратные средства по сравнению с виртуализацией программного обеспечения”). [Ваш процессор отвечает этому требованию.]

  2. Необходимо включить аппаратную виртуализацию для конкретного VM, которого Вы хотите 64-разрядную поддержку; виртуализация программного обеспечения не поддерживается для 64-разрядного VMs.

  3. Если Вы хотите использовать 64-разрядную гостевую поддержку в 32-разрядной хостовой операционной системе, необходимо также выбрать 64-разрядную операционную систему для конкретного VM. Начиная с поддержки 64 битов на 32-разрядных хостах подвергается дополнительным издержкам, VirtualBox только включает эту поддержку по явному запросу.

На 64-разрядных хостах (которые обычно идут с аппаратной поддержкой виртуализации), 64-разрядные гостевые операционные системы всегда поддерживаются независимо от настроек, таким образом, можно просто установить 64-разрядную операционную систему в госте.

Предупреждение

На любом хосте необходимо включить APIC ввода-вывода для виртуальных машин, которые Вы намереваетесь использовать в 64-разрядном режиме. Это особенно верно для 64-разрядного Windows VMs. Посмотрите раздел, названный “вкладка "Advanced"”. Кроме того, для 64-разрядных гостей Windows, необходимо удостовериться, что VM использует сетевое устройство Intel, так как нет никакой 64-разрядной поддержки драйвера карты PCNet AMD; посмотрите раздел, названный “Виртуальные сетевые аппаратные средства”. Если Вы используете, "Создают VM" мастер графического интерфейса пользователя VirtualBox (см. раздел, названный, “Создавая Вашу первую виртуальную машину”), VirtualBox будет автоматически использовать корректные настройки для каждого выбранного 64-разрядного типа операционной системы.

Если необходимо использовать виртуализацию программного обеспечения, можно установить qemu пакет из репозиториев Ubuntu. Существует несколько пакетов GUI, доступных для управления им (я предпочитаю aqemu), но можно также использовать его из командной строки.

С другой стороны, рассмотрите выполнение 64-разрядной версии Linux вместо этого. Поддержки Ubuntu x86_64, выполняющие 32-разрядные двоичные файлы без любой виртуализации вообще.

5
27.01.2020, 19:59

Теги

Похожие вопросы