Ключевые слова:qemu, emulator, virtual, linux, (найти похожие документы)
From: Вадим МАРКОВ
Newsgroups: Журнал "Мой компьютер" N46 (373)
Date: Mon, 25 Jun 2006 14:31:37 +0000 (UTC)
Subject: Заметка про использование qemu под Linux
Оригинал: http://www.mycomp.com.ua/text/9877
Какие ассоциации возникают при упоминании термина <<эмулятор РС>>?
Скорее всего, вспоминается Connectix/Microsoft Virtual PC, VMWare,
реже Bochs. Программа, о которой мы расскажем, пока малоизвестна, но
вполне может составить конкуренцию указанным продуктам. При некоторой
<<несолидности>> номера версии -- 0.7.1, программой уже поддерживается
эмуляция вполне современного компьютера с поддержкой сети, инструкций
x86-64, MMX, SSE, SSE2. Также поддерживается несколько платформ для
эмуляции -- i386, x86-64, PowerPC, SPARC. В разработке еще несколько.
И это еще не все. В общем, программа интересная. Убедил? Тогда,
линуксоиды, вперед!
Прежде всего, программу надо скачать. Идем на сайт www.qemu.org в
раздел Download, там скачиваем сам QEMU и дополнительно ускорительный
модуль КQEMU. Нам еще дополнительно понадобится пакет скриптов
bochstools. Он лежит на сайте со странным названием
http://www.bablokb.de и доступен по ссылке с главной страницы. Там же
дается вполне внятный пример использования и инструкция по установке.
Ну все, теперь все скачано, пора ставить.
Как обычно, надо распаковать qemu-x.x.x.tar.gz в каталог для сборки, в
получившийся каталог положить kqemu-x.x.x.tar.gz и тоже распаковать.
Установка самая обычная, ./configure && make && make install. Можно
выпендриться и добавить к ./configure опцию --enable-adlib, что
позволит эмулировать соответствующую звуковуху -- SoundBlaster 16.
Следует отметить, что конфигурационный скрипт выдает весьма полезное
описание того, что мы понастраивали. В списке должно быть сказано yes
напротив Adlib, kqemu и двух опций SDL.
Для работы kqemu нужно устройство /dev/kqemu. Здесь может возникнуть
осложнение. Это устройство (точнее, файл устройства) создается
автоматически, скриптом инсталляции. Но работать оно будет лишь в том
случае, если не используются devfs или udev. Решение проблемы описано
в документации к kqemu. О том, что такое devfs и udev и чем они лучше
статического каталога /dev, хорошо рассказано в книге Алексея
Федорчука <<Введение в POSIX'ивизм>>, глава 9
(http://www.linuxcenter.ru/lib/books/posixbook/ch09.phtml#8).
Теперь можно приступать к испытаниям. Начнем с эмуляции обычной
писишки. Эмулятор поддерживает много разных операционок в качестве
гостевых (в смысле, исполняемых на эмулируемом железе). Предлагаю для
экзотики попробовать DOS 3.3 + Windows 2.01. Где взял, не скажу --
пусть читатель сам Гуглом по помойкам пороется. Нужен загрузочный диск
с DOSом и архив с Виндовсом. Также очень пригодится загрузочный диск с
DOS 6.22.
Но пусть это все уже найдено и сложено аккуратной кучкой в домашнем
каталоге. Далее нужно подготовить образ жесткого диска для работы.
Используем для этого скрипт bxtcreate:
[buba@big buba]$ bxtcreate -t 20M -o hard.img
Этим создается простой неформатированый и неразбитый (пока :-)) образ
на 20 Мб. Размер его несколько больше, чем мы заказывали. Это связано
с тем, что скрипт автоматически подправляет размер для того, чтобы у
образа была корректная геометрия (цилиндры/головки/сектора). Теперь
нужно разбить и отформатировать полученный образ. Для этого и нужен
DOS 6.22, под 3.30 нужные утилиты не работают. Запускаем программу
примерно следующей командой (имена образов надо подставить свои):
[buba@big buba]$ qemu -hda hard.img -boot a -nics 0 -monitor stdio -fda 622C.IMG -no-kqemu
Опция -hda определяет образ одноименного жесткого диска, -boot a
указывает на загрузку с флопа (возможны еще варианты c и d,
соответственно, жесткий диск и сидюк), -nics 0 полностью отключает
сеть, -monitor stdio включает QEMU Monitor, весьма полезную штуку,
-fda определяет образ флопа, -no-kqemu отключает ускоритель. Через
несколько секунд получаем уже изрядно подзабытую командную строку
DOS'а. В ней надо разбить и отформатировать винт командами fdisk и
format c:. По завершению разбивки машина уйдет в перезагрузку. Все,
теперь можно запускать DOS 3.30. Можно закрыть эмулятор и запустить
заново с другим образом дискеты, но мы поступим иначе. В уже
упоминавшемся Мониторе можно заменить дискету или компакт командой
change. В Мониторе работает автодополнение. Пишем:
(qemu) change fda dos330.img
Теперь можно перегрузиться командой
(qemu) system_reset
Теперь получаем уже DOS 3.30. Система спросит о текущей дате и
времени.
Вход в уголок маньяка
Обратите внимание, что время сбито на 3 часа назад. Это связано с тем,
что QEMU по умолчанию считает, что <<железные>> часы (которые питаются
от батарейки на материнской плате) установлены по utc (Гринвичское
время). Такая установка весьма удобна, если на машине нет Виндовса.
При этом системные часы (счетчик, управляемый операционной системой)
учитывают часовой пояс и показывают правильное время. Но такая
настройка часов -- большая редкость (абсолютно несовместима с
Виндами), поэтому обычно <<железные>> часы устанавливаются по местному
времени. Сообщить об этом QEMU можно опцией -localtime в командной
строке. Сейчас это некритично, поэтому и не используем.
Выход из уголка маньяка
Отвечаем утвердительно на вопросы о времени. Теперь надо перенести
систему (пока DOS) на жесткий диск. Для этого сначала выполняем
команду sys c:, а затем copy command.com c:. После этого система
готова к установке Виндов. Ставить будем с дистрибутива,
скопированного на винт. Сделать это поможет скрипт bxtmount:
[root@big root]# bxtmount ~buba/hard.img:1 /mnt/loop/
Естественно, это нужно делать при выключенном эмуляторе -- DOS не
знает про монтирование файловых систем. Если этим пренебречь,
программа может побить с таким трудом созданный образ. Теперь туда
надо в отдельную папку забросить инсталлятор. Следует отметить, что по
умолчанию права записи на эту файловую систему есть только у root'a.
После подготовки можно инсталлировать:
[buba@big buba]$ qemu -hda hard.img -boot c -nics 0 -monitor stdio -fda dos330.img -no-kqemu
Надо запустить инсталлятор, а дальше все очевидно. Через минуту
получим работающий Windows 2.03. На память можно и скриншот
стрельнуть:
(qemu) screendump 1.ppm
Получаем файл 1.ppm в домашнем каталоге (для сохранения доступен
только такой формат).
Можно попытаться запустить BeOS R5 PE. К сожалению, у меня не
получилось запечь LiveCD с осью, как это описывается в Интернете. То
есть, запечь получилось, только он не работал :-). (В процессе
обработки статьи выяснилось, что LiveCD BeOS R5 PE не работает на
данном эмуляторе в принципе.)
Сразу предупреждаю, что поначалу работать будет ОЧЕНЬ медленно. Для
испытаний сделаем образ диска объемом 1200 Мб, заранее разбитый
пополам. На один раздел скопируем каталог с демкой BeOS, а второй
оставим пустым и попытаемся на него эту самую BeOS нормально
поставить. Дело в том, что демо-версия стартует из лежащего на FAT'е
образа файловой системы, но допускается и установка на диск. Об этом
уже писалось в МК (No. 38/261, 2003 г.)
Создаем диск, который заранее разбит по нужной схеме:
[buba@big buba]$ bxtcreate -1 600M -2 600M be.img
Теперь надо нарисовать FAT32 на первом разделе образа. Заметим, что
эта команда работает только под root'ом (умолчально). Это связано с
тем, что скрипт использует опции команды mount, что обычному
пользователю запрещено.
[root@big buba]# bxtmkfs -t fat32 be.img:1
Далее нам нужно скопировать на образ соответствующее содержимое. Это
мы уже делали раньше:
[root@big root]# bxtmount ~buba/be.img:1 /mnt/loop/
Теперь (после отмонтирования образа) можно пробовать запускать:
[buba@big buba]$ qemu -fda /mnt/98/BeOS/Floppy.img -hda be.img -nics 0 -monitor stdio -std-vga -boot a
Да-а-а, грузится небыстро. Но если время уже за полночь, а вам завтра
рано в Универ идти, не стоит закрывать QEMU -- потом придется еще раз
долго и нудно загружаться. Для выхода из этой ситуации можно
использовать команду Монитора savevm. В качестве параметра указывается
имя сейв-файла. Он получается весьма немаленький, около 80 Мб. Между
сеансами использования QEMU крайне нежелательно трогать файлы, которые
использовались эмулятором. В нашем случае это образ дискеты, образ
демки и образ винчестера, на который будем ставить. Два из них
находятся на Windows-разделе. Так что всякое может случиться...
...Прошел день...
Ну, теперь можно и продолжить. Для начала надо запустить эмулятор той
же командой, что и прежде. Да, еще. Хорошо бы запустить его так, чтобы
образы не изменились. Для этого есть опция -S, которую мы и добавим.
Эмулятор запустится, но покажет только черный экран, при этом проц,
который железный, будет бездействовать. Но нам нужно загрузить сейв:
(qemu) loadvm be.save
На первый взгляд ничего не изменилось. Надо разморозить эмуль командой
Монитора cont.
Теперь следует весьма очевидная процедура инсталляции на винт. Помним,
что нужно инсталлировать на второй раздел диска. Кстати, по ходу
инсталляции обнаружилась причина жутких тормозов. Видеокарта эмулятора
поддерживается только в безопасном режиме. В пояснении к жалобе на
неизвестную видеокарту сказано, что в безопасном режиме даже при
бездействии пользователя потребляется 50% процессорного времени. Надо
ставить драйвер VesaAccepted. За подробностями отсылаю к статьям
Сергея Бурачека (No.18/241-20/243, 2003 г.). Поясню лишь, как
обеспечить доступ BeOS к драйверу. Дело в том, что файловая система
BeFS поддерживается лишь для чтения. Далее можно подмонтировать раздел
со свежеустановленной осью. Как? Да очень просто:
[root@big buba]# bxtmount -x "-t befs" be.img:2 /mnt/loop
Поэтому надо сбросить драйвер на первый раздел образа винта (где лежит
каталог BeOS, помните?) Дальнейшие процедуры уже описаны до меня,
ничего сложного. Только надо при следующей загрузке выставить загрузку
с винта и отключить опцию -std-vga, а то драйвер не заведется. Также
возникли проблемы со звуком. После установки драйвера SB16 с
bebits.com определились параметры карточки, и вроде бы все заработало.
Все хорошо, но звука я так и не услышал. Может быть, кто-нибудь из
читателей разберется? Но в принципе, для <<посмотреть>> вполне
пригодно, можно определиться перед тем как ставить (или не
ставить :-)) конкретную ось на реальную машину.
Следует сказать пару слов об ускорительном модуле. Это модуль с
закрытым кодом, он обеспечивает значительное ускорение некоторых
гостевых операционок -- на сайте указаны Win2000 и Linux. Модуль
работает только при эмуляции системы целиком и только в том случае,
если гостевая система и хост одинаковы. Это значит, что kqemu будет
работать при эмуляции i386 на обычной писишке и x86_64 на 64-битной,
Mac пока не поддерживается. Механизм работы заключается в том, что вся
оперативная память гостевой системы (умолчально 128 Мб, можно задать
ключом -m, например -m 256) кладется одним файлом в файловую систему
tmpfs, которая обычно подмонтирована к /dev/shm. Если там ничего нет,
то QEMU откатывается к каталогу /tmp и сообщает об этом. Где-то было
упоминание, что ускоритель позволяет части кода (который выполняется в
третьем кольце защиты гостевой системы) выполняться непосредственно на
процессоре. Это может быть небезопасно, учитывая, что модуль работает
в режиме ядра. Во время подготовки статьи система два раза необъяснимо
уходила в kernel panic во время работы qemu+kqemu, версия kqemu --
0.7.1-1. При работе с новым модулем 0.7.2 такого (пока :-)) не
наблюдалось. Он, кстати, поддерживает Win98.
Но на сегодня хватит. Из неисследованных возможностей остались сетевые
возможности, эмуляция Мака и Спарка, запуск QEMU под Windows.