QEMU

Материал из Xgu.ru

Перейти к: навигация, поиск

Эта статья находится в процессе написания.
Если вы считаете, что её стоило бы доработать как можно быстрее, пожалуйста, скажите об этом.


QEMU — система эмуляции (и виртуализации) компьютера (вычислительной системы с процессором, памятью и периферийными устройствами), поддерживающего различные архитектуры.

Поддерживаемые эмулируемые (target) архитектуры:

  • x86,
  • x86_64,
  • ARM,
  • SPARC,
  • PowerPC,
  • MIPS,
  • m68k (Coldfire),
  • SH-4.

В процессе разработки находятся:

  • SPARC64,
  • PowerPC64,
  • Alpha,
  • CRIS.

В режиме виртуализации QEMU использует специальный модуль KQEMU, позволяющий исполнять код гостевой операционной системы непосредственно на процессоре хост-системы. В таком режиме поддерживается только архитектура x86. Начиная с версии 0.12.0, QEMU не поддерживает KQEMU.

QEMU обладает ещё одной интересной возможностью — он позволяет исполнять бинарный код, подготовленный для одной архитектуры, на процессоре другой архитектуры (работает только с linux в качестве host-ОС). Например, можно на PowerPC (попробовать) запускать Linux-программы, откомпилированные для x86, или Windows-программы (win32) через Wine.

QEMU использует механизм динамической трансляции, т.е. каждая из инструкций эмулируемой платформы заменяется на заранее подготовленный фрагмент инструкций физического процессора (в котором, возможно, изменяются используемые регистры). Оттранслированные фрагменты хранятся в 16-ти мегабайтном Translation cache.

Содержание

[править] Инсталляция QEMU

Эмулятор qemu можно установить принятым в дистрибутиве способом.

Например, для Debian GNU/Linux:

%# apt-get install qemu

Элементарные операции доступны сразу же после установки.

Например, запустить в эмуляторе LiveCD:

%$ qemu -cdrom knoopix.iso

Ещё можно делать так:

Создаём образ диска
 %$ qemu-img create Arch.img 1024M 
Инсталлируем систему
 %$ qemu -cdrom archlinux-200x.xx-x.iso -boot d Arch.img

Обратите внимание, что программа может запускаться от имени обыкновенного пользователя, не суперпользователя.

Чтобы QEMU отпустил захваченную мышь, нужно нажать Ctrl-Alt.

[править] kqemu

kqemu — модуль ядра Linux, который позволяет напрямую передавать инструкции эмулируемой системы процессору хост-системы, что существенно повышает производительность.

Чтобы использование kqemu было возможно, необходимо:

  • доступен и загружен модуль ядра kqemu;
  • qemu исполняется от имени суперпользователя;
  • qemu исполняется не в паравиртуальном домене Xen.

Модуль kqemu не работает в паравиртуальных доменах Xen, включая домен 0.

При условии выполнения всех этих требований, kqemu при запуске qemu включается автоматически.

Инсталляция в Debian:

%# apt-cache search kqemu
%# apt-get install kqemu-modules-2.6-686
%# modprobe kqemu

[править] Сеть в QEMU

тихо-тихо идёт
пинг изнутри
qemu

Один из способов соединить эмулируемую машину и общую сеть — использовать виртуальный мост Linux. Для этого в хост-системе необходимо создать мост, который соединить с физическим сетевым интерфейсом. К полученному мосту можно подключать эмулятор.

Например, в хост-системе создан мост и к нему подключен интерфейс:

%# brctl show
...
br0             8000.001a4d80ce78       no              peth0
...

Тогда, если использовать такой скрипт и способ запуска qemu, эмулятор будет подключен к этому мосту, и его единственный сетевой интерфейс будет смотреть в общую сеть (туда, куда смотрит интерфейс peth0).

Файл /etc/qemu-ifup

#!/bin/sh
bridge=br0

echo "Executing /etc/qemu-ifup"
echo "Bringing up $1 for bridged mode..."
sudo /sbin/ifconfig $1 0.0.0.0 promisc up
echo "Adding $1 to $bridge..."
sudo /usr/sbin/brctl addif $bridge $1
sleep 2

Файл должен быть исполняемым:

%$ chmod +x qemu-ifup

Запуск:

%# qemu -hda haiku.img -boot c -net nic,vlan=0 -net tap,vlan=0,ifname=tap0,script=/etc/qemu-ifup -m 256 -localtime

Запускать нужно от root'а, потому что иначе могут возникнуть проблемы с доступом к устройству /dev/net/tun.

Здесь ключевое слово vlan обозначает виртуальный коммутатор внутри процесса QEMU, который не имеет прямого отношения к VLANам в привычном понимании этого слова.

Здесь вместо haiku.img должен быть указано имя файла, содержащего исполняемый образ.

[править] USB в QEMU

Knoppix внутри QEMU. Проброшено USB-устройство

Поддержка USB в QEMU включается при помощи ключа -usb.

Вы можете пробросить устроуйство внутрь машины QEMU при помощи ключа -usbdevice.

Например, вы хотите пробросить GPS-навигатор Garmin, который подключается через USB к хост-системе:

В хост-системе выполняете:

%# lsusb
Bus 001 Device 004: ID 091e:0003 Garmin International GPSmap (various models)

При вызове qemu указываете идентификатор устройства:

%# qemu -usb -usbdevice host:091e:0003

Важно чтобы в хост-системе не был загружен драйвер того устройства, которое пробрасывается внутрь эмулятора. Его можно выгрузить вручную, но лучше занести его в blacklist, чтобы после перезагрузки он не был загружен опять.

[править] С чем можно поиграться в QEMU

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

Многие из этих проектов можно посмотреть и поиграться с ними с помощью QEMU.

  • LiveCD — любой LiveCD скачивается и запускается в QEMU. Не требует никаких дополнительных операций по подготовке. Очень удобно для проверки диска, для изучения его возможностей.
  • OLPC — вы много слышали об OLPC и хотели бы на него посмотреть. Проще всего это сделать при помощи QEMU. Образы здесь [1]. Используйте образ ext3, не JFFS!
  • OpenMoko — Образы для эмуляции здесь [2].


[править] Дополнительная информация

Сеть в QEMU:

Эмуляция различных архитектур:

[править] Материалы по эмуляторам на Xgu.ru

Эмуляторы сетей:

  • WANEM — эмулятор WAN
  • IMUNES (An Integrated Multiprotocol Network Emulator / Simulator)
Источник — «http://xgu.ru/wiki/QEMU»