QEMU
Материал из Xgu.ru
|
Эта статья находится в процессе написания. |
QEMU — система эмуляции (и виртуализации) компьютера (вычислительной системы с процессором, памятью и периферийными устройствами), поддерживающего различные архитектуры.
Поддерживаемые эмулируемые (target) архитектуры:
- x86,
- x86_64,
- ARM,
- SPARC,
- PowerPC,
- MIPS,
- m68k (Coldfire),
- SH-4.
В процессе разработки находятся:
- SPARC64,
- PowerPC64,
- Alpha,
- CRIS.
В режиме виртуализации QEMU использует специальный модуль KQEMU, позволяющий исполнять код гостевой операционной системы непосредственно на процессоре хост-системы. В таком режиме поддерживается только архитектура x86.
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 отпустил захваченную мышь, нужно нажать 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
Один из способов соединить эмулируемую машину и общую сеть — использовать виртуальный мост 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
Поддержка 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 - установка и первые впечатления - заметка в блоге "Записки дебианщика" (рус.)
- Документация пользователя эмулятора процессора QEMU (рус.)
- Hardware virtualization with QEMU (англ.)
Сеть в QEMU:
- QEMU and TUN/TAP networking (англ.)
- QEMU - Debian - Linux - TUN/TAP - network bridge (англ.)
- qemu bridged to Ethernet (англ.)
- Setting up your own internal network w/ qemu. (англ.)
- How to use Network in QEMU (англ.)
- QEMU Networking (англ.)
Эмуляция различных архитектур:
- HPPAQEMU — HPPA Host and Target Support for QEMU (PA-RISC)
- Debian on an emulated ARM machine (англ.)
[править] Материалы по эмуляторам на Xgu.ru
Эмуляторы сетей:
