Еще о QEMU

17 Янв
2009

По умолчанию QEMU эмулирует одно ядро, чтобы «добавить» число процессоров используем параметр «-smp» с указанием их количества. Правда в некоторых случаях это приводит наоборот к замедлению эмуляции, да и пытаться создать несколько виртуальных процессоров, на компьютере с имеющем один CPU бесмысленно.


При запуске qemu эмулирует ту же аппаратную среду, в которой он запускается, то есть при запуске на i386, будет подражать i386, на x86_64 — 64 битной системе, на PowerPC то будет запущен еще один PowerPC компьютер и так далее. Если же необходима эмуляция систем отличной архитектуры, то запускаем специальную версию утилиты qemu-system-*

$ qemu-system-
qemu-system-arm       qemu-system-mips64    qemu-system-ppc64     qemu-system-sparc
qemu-system-cris      qemu-system-mips64el  qemu-system-ppcemb    qemu-system-x86_64
qemu-system-m68k      qemu-system-mipsel    qemu-system-sh4
qemu-system-mips      qemu-system-ppc       qemu-system-sh4eb

Помимо стандартных PC и ISA PC (без шины PCI), QEMU может эмулировать и другие аппаратные платформы, не связанные с персональным компьютером, такие как АРМ Versatile или платы на основе MIPS. Вывести полный список поддерживаемых платформ можно при помощи ключа «-M ?»:

$ qemu -M ?
Supported machines are:
pc    Standard PC (default)
isapc    ISA-only PC

По умолчанию используется «pc» изменим ее на ISA-only PC:

$ qemu -M isapc -hda test-disk -m 512

При запуске звуковая система не активируется, на это нужно указать специально добавив «-enable-audio». Получить список поддерживаемых подсистем можно при помощи параметров «audio-help» и список звуковых карт «-soundhw ?».

$ qemu -soundhw ?
Valid sound card names (comma separated):
pcspk    PC speaker
sb16    Creative Sound Blaster 16
es1370    ENSONIQ AudioPCI ES1370
-soundhw all will enable all of the above

Самое простое активировать все:

$ qemu -soundhw all -hda test-disk

Модуль kqemu может работать в двух режимах: for user code и for user and kernel code. Первый  устанавливается по умолчанию и его использование проблем не вызывает. Второй более быстрый, активируется при помощи ключа «-kernel-kqemu», но с некоторыми гостевыми ОС он не дружит. Кроме того, скорость работы зависит от версии ядра гостевой системы и некоторых других параметров. Но если при запуске некоторой ОС возникли проблемы и при работе в «for user code», чтобы не выгружать модуль kqemu можно просто отказаться от его использования при помощи параметра «-no-kqemu».
По умолчанию qemu для поднятия виртуального сетевого tap/tun интерфейса (в ядре должен быть включен параметр CONFIG_TUN) использует скрипт /etc/qemu-ifup, если таковой не обнаруживается, то самостоятельно выбирает параметры. В простейшем случае скрипт /etc/qemu-ifup выглядит так:

#!/bin/sh
sudo /sbin/ifconfig $1 192.168.1.100

Более сложные варианты можно найти в Интернет. Теперь делаем скрипт исполняемым (chmod +x) и запускаем эмулятор:

$ qemu test-disk -net nic,vlan=0 -net tap,vlan=0

Первая часть команды (-net nic,vlan=0) создаст сетевую карту в виртуальной машине, подключив ее к виртуальной сети 0, вторая (-net tap,vlan=0) поднять tap интерфейс на хост компьютере, также подключив его к виртуальной сети 0 . Адрес для tap интерфейса будет взят из /etc/qemu-ifup. Адрес сетевой карты настраивается стандартными средствами гостевой ОС и должен находится в той же подсети, что и tap (например 192.168.0.101).
Таким же образом можно добавить любое количество сетевых карт, параметр –macaddr позволяет задать и МАС-адрес первого сетевого интерфейса, МАС-адреса остальных будут автоматически инкрементрованы.
Если на основной системе установлен Samba сервер, то гостевая система может общаться с основной через него, для этого используется опция –smb с указанием каталога.

$ qemu test-disk –smb /mnt/qemu -net nic,vlan=0 -net tap,vlan=0

Аналогично можно активировать и встроенный ftp сервер, добавив при запуске команду –tftp каталог. При этом все файлы, находящиеся в указанном каталоге могут быть загружены на гостевую систему. Еще одним из способов обмена информацией между основной и гостевой системами, является перенаправление. Формат такой:

-redir [tcp|udp]:host-port:[guest-host]:guest-port

И запустив эмуляцию с такой опцией.

$ qemu test-disk -redir tcp:1234::23

Теперь пробуем подключаться к telnet порту на гостевой системе.

$ telnet localhost 1234

Поддерживает QEMU управление и по протоколу VNC.

Комментировать

Наверх