QEMU относится к программам, эмулирующим аппаратную среду. Ее основные функции аналогичны VMWare, VirtualBox, Bochs или Virtual PC. Хотя некоторые возможности отличаются. Например, поддерживается два вида эмуляции:
— Full system emulation – создается полноценная виртуальная машина, имеющая «свой» процессор и различную периферию;
— User mode emulation – режим, поддерживаемый только в Linux, позволяет запускать на родном процессоре программы, откомпилированные под другую платформу.
Во втором варианте QEMU берет на себя всю заботу по переводу инструкций процессора и конвертацию системных вызовов. В этом режиме возможна эмуляция не только x86, но и процессоров других архитектур: ARM, SPARC, PowerPC, MIPS и m68k.
Работает QEMU на Linux, FreeBSD, Mac OS X, FreeDOS и Windows (www.h7.dion.ne.jp/~qemu-win). В качестве основной платформы можно использовать компьютеры на базе x86, x86_64 и PowerPC. Хотя ограничено поддерживаются и некоторые другие (DEC Alpha, SPARC32, ARM, S390).
На сайте проекта
$ sudo apt-get update
$ sudo apt-cache search qemu

Если подключен репозитарий Universe, в ответ получаем список приложений, в котором присутствует как сам эмулятор, так и некоторые утилиты для работы с ним. Смотрим, что за версию предлагают:
$ sudo apt-cache show qemu | grep -i version
Version: 0.9.1-1ubuntu1
Она соответствует последней доступной на сайте. Ставим:
$ sudo apt-get install qemu kqemu-common kqemu-source
Также QEMU появится при установке пакета kvm. Список зависимостей можно просмотреть командой:
$ sudo apt-cache depends qemu
Теперь собираем модуль kqemu QEMU Accelerator Module, позволяющий выполнять часть кода напрямую на реальном процессоре, минуя виртуальный, ускоряя таким образом работу гостевой системы. Запуск виртуальной ОС без этого модуля замедляется примерно в 5 раз.
$ sudo module-assistant prepare $ sudo module-assistant auto-install kqemu Или вручную: $ cd /usr/src/kqemu* $ sudo ./configure $ sudo make $ sudo ./install.sh Пробуем загрузить модуль: $ sudo modprobe kqemu $ lsmod | grep kqemu kqemu 124196 0 Чтобы впредь не загружать его вручную, добавляем строку "kqemu" в /etc/modules. В некоторых дистрибутивах, использующих UDEV, к команде для запуска модуля, возможно, понадобится добавить параметр "major=0": $ sudo modprobe kqemu major=0
Запустить LiveCD дистрибутив очень просто. Для этого достаточно вставить диск в привод и ввести команду:
$ qemu -m 512 -cdrom /dev/cdrom
Для виртуальной машины я выделил 512 Мб, по умолчанию 128 Мб, чего обычно не хватает. Через некоторое время появится новое окно, в котором будет запущена ОС. Принцип взаимодействия напоминает VMWare, чтобы управлять виртуальной системой, щелкаем мышкой внутри окна, выйти можно, нажав <Ctrl+Alt>.
Если есть ISO образ, то можно подключить и его:
$ qemu -m 512 -cdrom PuppyRus-1.20U-Lite-M.iso

Если при запуске эмулятора будет выдаваться сообщение о неактивности модуля kqemu:
«Could not open /dev/kqemu — QEMU acceleration layer not activated: Permission denied», потребуется изменение прав на файл устройства /dev/kqemu (по умолчанию 660):
$ sudo chmod 666 /dev/kqemu
Кстати, ранее требовалось создавать этот файл вручную при помощи команды:
$ sudo mknod /dev/kqemu c 250 0
Теперь в этом нет необходимости. В некоторых системах при запуске эмулятор может потребовать перестроить параметры таймера высокого разрешения «Could not configure /dev/rtc to have a 1024 Hz timer…«, тогда выполняем команду:
$ sudo sh -c «echo 1024 > /proc/sys/dev/rtc/max-user-freq»
В Ubuntu 8.04 по умолчанию его значение равно 64, но QEMU никогда не жаловался. Идем дальше.
Для установки гостевой ОС сначала нужно создать виртуальный диск:
$ qemu-img create test-disk 4G
Хотя можно это сделать и при помощи dd:
$ dd of=test-disk bs=1024 seek=4194304 count=0
Правда, есть отличие: утилита dd позволяет создать только raw образ, который представляет собой файл, заполненный нулями. Утилита qemu-img поддерживает несколько форматов, указать на которые можно при помощи параметра ‘–f‘. По умолчанию создаются qcow файлы (qemu Copy On Write), этот формат поддерживает шифрование (AES, 128 бит) и компрессию, но возможны еще raw, cow (User Mode Linux), vmdk (VMWare) или cloop (сжатый loop, обычно используемый на LiveCD).
Многие предпочитают использовать именно raw. Формат raw не поддерживает сжатие, но если образ находится на разделе с файловой системой, поддерживающей дыры (holes), например ext2/3, то сжатие будет обеспечено драйвером ФС. И у этого способа есть еще один несомненный плюс – возможность монтирования в дерево ФС и работы как с обычным дисковым разделом. Использовав параметр info, можно получить информацию о готовом образе.
Утилита qemu-img поддерживает параметр convert, позволяющий преобразовывать образы из одного формата в другой:
$ qemu-img convert –f cow cowimage.cow image.raw
Теперь запустим виртуальную машину уже с жестким диском:
$ qemu -hda test-disk -cdrom ubuntu-8.04-desktop-i386.iso -m 512 -boot d -localtime
Эмулятор поддерживает до 4 виртуальных жестких дисков, которые обозначаются аналогично линуксовым от hda до hdd, и 2 флоппи диска – fda и fdb. Но использовать ‘-hdc’ и ‘-cdrom’ одновременно нельзя. Если используется только один образ диска, параметр hda можно опустить:
$ qemu test-disk
Параметр ‘-boot’ так же, как и в реальной машине, позволяет указать приоритет загрузки. Доступно 4 варианта:
— boot a – загрузка с виртуального флоппи;
— boot c – загрузка с жесткого диска (по умолчанию);
— boot d – загрузка с CD-ROM;
— boot n – сетевая (Etherboot) загрузка.
Параметр ‘–localtime‘ позволяет указать на использование локального времени в виртуальной машине.
Теперь устанавливаем операционную систему на жесткий диск обычным образом и после перезагрузки используем уже:
$ qemu test-disk -m 512 -localtime
Чтобы виртуальная система стартовала сразу в полноэкранном режиме, добавь ключ ‘-full-screen’, переключение производится при помощи комбинации <Ctrl+Alt+F>. В некоторых гостевых ОС, возможно, потребуется отключить ACPI флагом ‘-no-acpi‘.
В зависимости от установок родительской ОС, в процессе запуска может возникнуть сообщение о том, что эмулятор не может получить доменное имя. Самым простым выходом будет добавить опцию ‘-dummy-net‘, активирующую поддельный сетевой стек, но при этом гостевой системой не будут приниматься и отправляться пакеты:
$ qemu -dummy-net -cdrom /dev/cdrom
Консоль управления QEMU
QEMU предоставляет возможность управлять своей работой и получать информацию из специальной консоли. Чтобы ее вызвать нажимаем комбинацию <Ctrl+Alt+2>. Теперь, используя разные команды (полный список которых доступен по help), можно добавить новое устройство, когда ОС уже загружена, сохранить (savevm имя_файла) или загрузить (loadvm) состояние виртуальной машины и многое другое. Например, чтобы добавить CD-ROM, достаточно ввести:
change cdrom /dev/cdrom
Использовав параметр info, мы узнаем о режиме или состоянии того или иного компонента. Например, «info kqemu» выведет режим, в котором находится модуль. Обратно в гостевую ОС можно вернуться, нажав <Ctrl+Alt+1>.
//
длин до сих пор интел не полностью эмулируется — OS/2 падает в ней как пару лет назад. куды они в соседние процессоры лезут ?