Главная » Статьи » Мои статьи

Эмуляция Windows в FreeBSD
Сборка qemu
Qemu устанавливается только из портов, пакет развивается очень быстро и я настоятельно
рекомендую перед установкой обновить порты. Детальный рассказ о том, как обновить порты, пользуясь CVSup можно найти в документации на FreeBSD. Коротко расскажу последовательность действий.
 
cd /usr/ports/emulators/qemu
make

Вам будет задан вопрос, какие компоненты qemu необходимы. Я включаю поддержку kqemu — специального модуля ядра, значительно ускоряющего работу эмулятора.

После сборки делаем

make install

Осталось сконфигурировать систему.

Конфигурирование FreeBSD для использования qemu
Для успешного запуска вам понадобятся два модуля ядра: во-первых, загружаем модуль
kqemu:

kldload kqemu.ko

во-вторых, загружаем модуль асинхронного ввода/вывода:

kldload aio.ko

Без него qemu будет выдавать загадочное сообщение:

Bad system call (core dumped) (или типа того, разные версии ругаются чуть по разному, но одинаково загадочно) и падать.

Загрузка следующих модулей нужна только если вы хотите выдать эмулятору реальный IP-адрес. Для этого, вам понадобится мост.Загружаем модуль:

kldload bridge.ko

Настраиваем мост:

sysctl net.link.ether.bridge_cfg=bge0,tap0
sysctl net.link.ether.bridge.enable=1

Здесь bge0 — мой сетевой интерфейс, у вас скорее всего будет другой.

Файл диска виртуальной машины

Виртуальная машина, конечно, имеет жёсткий диск. На самом деле это просто файл, объём которого и определяет объём диска. Я создаю файл на 12 гигабайт, для моих целей этого более чем достаточно.

qemu-img create win12G 12G

Теперь у нас имеется файл win12G, который будет образом диска виртуальной машины.

Конфигурирование сети для виртуальной машины qemu в режиме NAT
Qemu может сам эмулировать NAT. Запускаем так:

qemu -m 512 \
     -hda /root/qemu/win12G \
     -net nic \
     -net user \
     -localtime

Обратите внимание на опции -net nic и -net user. Благодаря им виртуальная машина сможет сама получить по DHCP (встроен в qemu) все настройки сети.Никаких дополнительных модулей ядра в этом режиме не требуется.

Конфигурирование сети для виртуальной машины qemu с реальным IP-адресом
В этом случае вам как раз понадобится мост (bridge.ko) и устройство tap0. (Как их настроить я уже рассказала.)Чтобы qemu смогло поднять сетевой интерфейс, ему нужен up-скрипт. Назовём его qemu-ifup.Я получаю данные по DHCP, поэтому скрипт не велик:

#!/bin/sh
ifconfig $1 0.0.0.0

Всё, виртуальная машина готова к запуску.

qemu -m 512 \
     -hda /root/qemu/win12G \
     -net nic \
     -net tap,script=/root/qemu/qemu-ifup \
     -localtime

Установка Windows на виртуальную машину
Образ загрузочного диска
Первым делом я создаю образ загрузочного диска Windows. Этого можно и не делать, для установки можно использовать полноценный диск, но как показывает практика, образ не повредит.

dd if=/dev/acd0 of=WXP.iso bs=2048

Установка Windows, шаг первый
Теперь нам надо загрузить виртуальную машину с CD-ROM и установить Windows:

qemu -m 512 \
     -win2k-hack \
     -cdrom /root/qemu/WXP.iso \
     -boot d \
     -hda /root/qemu/win12G \
     -net nic \
     -net tap,script=/root/qemu/qemu-ifup \
     -localtime

Виртуальная машина будет иметь 512Mb оперативной памяти (-m 512), жёсткий диск (-hda /root/qemu/win12G), CD-ROM (-cdrom /root/qemu/WXP.iso, если вы используете реальное физическое устройство для чтения дисков, то укажите не файл, а это устройство; например /dev/acd0), сеть (интерфейс tap, скрипт для инициализации интерфейс /root/qemu/qemu-ifup) и загружаться всё это будет с CD-ROM (-boot d).
   После запуска Windows предложит вам разбить новый диск на разделы и начнёт установку. Тут нет ничего необычного, Windows живёт на виртуальной машине точно так же, как и на реальной.

Установка Windows, шаг второй
На втором шаге установки вам надо загрузиться с диска, но CD-ROM должен быть по прежнему доступен:

qemu -m 512 \
     -win2k-hack \
     -cdrom /root/qemu/WXP.iso \
     -hda win12G \
     -net nic \
     -net tap,script=/root/qemu/qemu-ifup \
     -localtime

Завершаем установку и настройку Winodws.

Использование.

Запуск Windows

Теперь, чтобы запустить Windows, достаточно выполнить команду вида:

qemu -m 512 \
     -hda /root/qemu/win12G \
     -hdb /root/qemu/win8G-d \
     -net nic \
     -net tap,script=/root/qemu/qemu-ifup \
     -localtime

Обратите внимание, здесь я ещё добавила в систему второй диск (D:) на 8 гигабайт.

Несколько простых инструкций
Чтобы работать в Windows, просто щёлкните по окну.
Чтобы qemu «отпустил» мышь, нажмите Ctrl-Alt.
Чтобы перейти в консоль управления виртуальной машиной нажмите Ctrl-Alt-2.
Чтобы вернуться в основное окно — Ctrl-Alt-1
Возможности консоли qemu
Все возможности можно узнать по команде help (и конечно из документации
file:///usr/local/share/doc/qemu/qemu-doc.html). Перечислю основные.
Остановка машины — quit или просто q.
Остановить эмуляцию (остановить процессор машины) — stop.
Запустить процессор снова — cont или c.
Вытащить виртуальный CD-диск — eject.
Сохранить или загрузить состояние виртуальной машины — savevm/loadvm. То есть вы можете запустить Windows, начать там что-то делать, потом зайти в консоль, остановить эмуляцию, сохранить состояние машины и выключить машину (stop, savevm, quit). Потом, вы можете снова запустить эмулятор, восстановить состояние машины и запустить её снова (loadvm, cont). В результате вы получите уже загруженную систему в том состоянии, в каком вы её покинули.

Единственная «неприятность» связана с часами. Системе будет казаться, что часы сделали резкий скачок, что может привести к некоторым недоразумения. Впрочем, не фатальным.Кроме того из консоли вы можете делать много другое: управлять мышью и клавиатурой, смотреть регистры процессора и состояние памяти, эмитировать нажатия кнопок «reset» и «power», добавлять и удалять USB-устройства, делать снимок экрана и многое другое.

Доступны следующие команды:

`help или ? [cmd]'
Вывод справки по всем командам или только по команде cmd.

`commit'
Запись изменений в образ диска (если используется -snapshot).

`info суб-команда'
показывает различную информацию о состоянии системы:

`info network'
показывает состояние сети

`info block'
показывает блочные устройства

`info registers'
показывает регистры процессора

`info history'
показывает историю набранных команд

`q или quit'
Выход из эмулятора.

`eject [-f] устройство'
Извлечение съёмного носителя (используйте для принудительного извлечения -f).

`change устройство файла'
Смена съёмного носителя.

`screendump файла'
Сохранение содержимого экрана в виде PPM-изображения в файл.

`log объект1[,...]'
Включение журналирования указанных объектов в файл `/tmp/qemu.log'.

`savevm файл'
Сохранение состояния виртуальной машины в файл.

`loadvm файл'
Восстановление состояния виртуальной машины из файла.

`stop'
Остановка эмуляции.

`c или cont'
Возобновление эмуляции.

`gdbserver [порт]'
Запуск сеанса gdbserver (по умолчанию порт=1234).

`x/fmt адрес'
Дамп виртуальной памяти, начиная с указанного адреса.

`xp /fmt адрес'
Дамп физической памяти, начиная с указанного адреса.

fmt - это формат, сообщающий команде, как нужно форматировать данные. Его синтаксис:

`/{количество}{формат}{размер}'

количество
это число объектов для дампа.

формат
может быть x (шестнадцатиричный), d (десятичный со знаком), u (десятичный без знака), o

(восьмеричный), c (символьный) или i (инструкции asm).

размер
может быть b (8 бит), h (16 бит), w (32 бит) или g (64 бит). На платформе x86 размеры h
или w могут быть указаны с форматом i для выбора размера инструкций для 16- или 32-битного кода соответственно.

Примеры:

Дамп 10 инструкций относительно текущего указателя:   (qemu) x/10i $eip
0x90107063:  ret
0x90107064:  sti
0x90107065:  lea    0x0(%esi,1),%esi
0x90107069:  lea    0x0(%edi,1),%edi
0x90107070:  ret
0x90107071:  jmp    0x90107080
0x90107073:  nop
0x90107074:  nop
0x90107075:  nop
0x90107076:  nop
 

Дамп 80-ти 16-битных значений относительно начала видеопамяти:   (qemu) xp/80hx 0xb8000
0x000b8000: 0x0b50 0x0b6c 0x0b65 0x0b78 0x0b38 0x0b36 0x0b2f 0x0b42
0x000b8010: 0x0b6f 0x0b63 0x0b68 0x0b73 0x0b20 0x0b56 0x0b47 0x0b41
0x000b8020: 0x0b42 0x0b69 0x0b6f 0x0b73 0x0b20 0x0b63 0x0b75 0x0b72
0x000b8030: 0x0b72 0x0b65 0x0b6e 0x0b74 0x0b2d 0x0b63 0x0b76 0x0b73
0x000b8040: 0x0b20 0x0b30 0x0b35 0x0b20 0x0b4e 0x0b6f 0x0b76 0x0b20
0x000b8050: 0x0b32 0x0b30 0x0b30 0x0b33 0x0720 0x0720 0x0720 0x0720
0x000b8060: 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720
0x000b8070: 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720
0x000b8080: 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720
0x000b8090: 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720
 

`p или print/fmt выражение'
Вывод значения выражения. Используется только часть format из fmt.

`sendkey клавиши'
Отправляет клавиши в эмулятор. Используйте - для одновременного нажатия нескольких
клавиш. Пример:

sendkey ctrl-alt-f1
Эта команда полезна для отправки нажатий клавиш, которые ваш графический интерфейс

перехватывает на низком уровне, наподобие ctrl-alt-f1 в X Window.

`system_reset'

ссылки
документация пользователя на русском 
http://www.opennet.ru/docs/RUS/qemu_doc/
http://michurin.com.ru/qemu.shtml
http://www.unix.lviv.ua/content/view/38/27

Категория: Мои статьи | Добавил: pufi (31.08.2007) | Автор: Маша E W
Просмотров: 5624 | Комментарии: 6 | Рейтинг: 5.0/1
Читайте так же:
Как запретить сайтам следить вами? 
Комедия из жизни высоких технологий в трёх частях, с моралью и системными требованиями. 
настройка Proftpd 
просто компюмор 
Как настроить mail.ru-агент в QIP Infium 
Всего комментариев: 61 2 »
avatar
1 Алексей • 14:07, 19.01.2008
ай-ай-ай
как не стыдно, могли бы указать автора-то.
avatar
2 pufi • 14:48, 19.01.2008
авторов тут несколько.я вроде как не говорю что статья моя....тут собрана исчерпывающая информация о данном эмуляторе из РАЗНЫХ источников...
avatar
3 pufi • 14:54, 19.01.2008
и кстати,если вы не заметили, молодой человек, то ссылка на первоисточник тоже есть wink
avatar
4 Алексей • 18:51, 19.01.2008
Ссылку заметил, спасибо. Но обидно как-то, когда твою статью просто копипастят. (выкинув чуть-чуть из начала и дописав конец) Если вам есть, что написать -- напишите. Если копируете 2/3 статьи, то так и пишите... Впрочем, мне не жалко именно этих скопированных слов, жалко, что разрушается интернет http://michurin.com.ru/nonsense.shtml
avatar
5 pufi • 19:16, 19.01.2008
Алексей, если вас это успокоет, то скажу, что у вас очень замечательный и нужный сайт.вашими материалами пользовалась и пользуюсь.эта копипаста единственная.а выкладывая в интернет что-то я думаю стоит понимать, что на хороший материал по-любому будет копипаста :-)
1-5 6-6
avatar