Скорее всего это первый русскоязычный мануал о настройке QEMU на Raspberry.

Какое-то время назад я загорелся идеей запустить на своей Raspberry Pi 2 какую-нибуть Windows систему. Сначала я хотел узнать возможно ли установить её, просто записав на SDCARD и вставив в «малинку», но этому не дано было осуществится…

После я стал искать возможность запуска через какие-нибудь эмуляторы. Наткнулся на QEMU и стал копаться с ним. Пытался я запустить эмулятор очень долго, почти всё, что я находил на форумах, было написано на английском, причём информации там было «по-минимуму», а людей, которые запустили, было совсем немного. После нескольких неудачных попыток запуска QEMU, я решил написать на 4PDA в теме, посвящённой Raspberry. Там мне помогли, и я благополучно запустил Windows 98 (почти идеально...). Запускал я это на Raspibiane (Debian).

Начнём, открываем терминал и прописываем это:

sudo apt-get install
sudo apt-get uprage
sudo apt-get install git zlib1g-dev libsdl1.2-dev libpixman-1-0 libpixman-1-dev

Желательно всё это делать через putty, чтобы всё символы точно соответствовали написанному.

Идём далее:

git clone git://git.qemu-project.org/qemu.git

Команда начинает скачивать «внутренности» эмулятора, этот процесс не займёт много времени.

image

После того, как файл скачается и распакуется, появится папка (расположение /home/%username%/qemu), в которой будут расположены все файлы, которые необходимы для работы эмулятора. После того, как у нас всё скачалось и распаковалось, прописываем это:

cd qemu
./configure --target-list="i386-softmmu" --enable-sdl --prefix=/usr

Начинается процесс конфигурации, это не займёт много времени (~30-60 секунд). Теперь нам нужно запустить процесс отладки:

sudo make

Скриншот
После ввода команды, начнётся отладка, она выглядит примерно так:

image

Отладка может продолжаться неопределённое время, (~15-20 минут). Последнее, что мы должны сделать, это подправить конфиги и отладить.

sudo nano /home/pi/qemu/tcg/arm/tcg-targe­t.c
sudo nano /home/pi/qemu/tcg/i386/tcg-targ­et.c

Скриншот
Иногда при выполнение вышеперечисленных команд система создаёт новый файл, тогда выходим из редактора и руками открываем необходимые конфиги.

image

Зажимаем Ctrl+W, открывается строка поиска, вводим: static void tcg_out_addi. Меняем на static inline void tcg_out_addi. Переходим ко второму конфигу, так же вызываем строку поиска и вводим этот текст: static void tcg_out_opc и меняем на static inline void tcg_out_opc. Если вы не нашли какую-то из строк, то ничего не делаем, а просто закрываем конфиг и выполняем следующий шаг (в первом конфиге я не нашёл нужную строку, однако эмулятор у меня работает нормально).

Если вы закончили с заменой строк, продолжаем дальше мучать нашу «малинку»:

sudo make
sudo make install

Скриншот
image

Настройку эмулятора мы закончили. Теперь перейдём к запуску системы. Насколько я знаю, эмулятор поддерживает данные форматы образов:

.img — Образ системы.
.vhd — Виртуальный «хард»
.iso — Образ диска.

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

Я собрал на Яндекс.Диске все образы, которые запускаются на QEMU и взяты из темы, ссылка на которую дана выше. Стоит заметить, что в названии образа Linux KDE написан пароль от пользователя.

Переходим к запуску систему. Пишем в консоль:

qemu-system-i386 здесь тип образа (-hda, -fda, -cdrom) НазваниеВашегоОбраза.img -m Тут_Кол-во_ОЗУ_В_МБ(Без подчёркиваний разумеется).

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

Это фото, как скринить в линуксе я так и не освоил.

Результат
image

image

QEMU может эмулировать не только i386 процессоры, но и другие «платформы», подробнее:

ls /usr/bin/qemu*

Данный запрос вызывает список команд QEMU:

qemu-system-i386 --help

Поиграйтесь с настройками QEMU, сам ещё не до конца разобрался с ним. Стоит учесть, что я запускал систему, используя ресурсы только одного ядра «малинки», при этом компьютер нагружался на 25-26% (запускал Win98). Я читал на форумах о многопоточной работе QEMU с образом системы, но так и не понял как заставить эмулятор использовать ресурсы больше, чем одного ядра. Опять же, поиграйтесь с настройками и возможно вы поймёте как настроить многопоточность (не забудьте написать в комментариях как вы это сделали).

Комментарии (9)


  1. shweew
    05.02.2016 09:17
    +2

    А какую цель Вы преследовали, пытаясь запустить Win98 на Raspberry Pi, смысл в чём? Или чисто спортивный интерес?


    1. Raspberries
      05.02.2016 09:50
      +1

      Спортивный интерес:)
      Хотел сделать что-то вроде мультиплатформенной олдскульной машины. RetroPie + Old Version Windows.
      Если разобраться с многопоточностью в программе, даже поиграть удастся.


      1. d7s2di
        05.02.2016 10:53
        +1

        Поиграть вряд ли получится, qemu и на куда более мощных современных x86 системах весьма неторопливый по понятным причинам.


  1. interrupt
    05.02.2016 11:41
    +4

    Брр. А почему Вы компиляцию называете — отладкой, а исходный код — конфигом.


  1. ValdikSS
    05.02.2016 12:17
    +2

    Что за ерунда? Чем отличается запуск qemu на Raspberry Pi от запуска qemu на любой другой плате или архитектуре? Почему вы не установили его из репозитория?


    1. lovecraft
      05.02.2016 12:37
      +2

      Ну как же, всем известно, что в линуксе пакеты собираются из сорцов при помощи ./configure && ./make. Использование же dpkg-buildpackage — уже ересь, а за apt-get install qemu-system-x86 отлучают от церкви Святого Торвальдса.


  1. lovecraft
    05.02.2016 12:39

    Насколько я знаю, эмулятор поддерживает данные форматы образов:

    .img — Образ системы.
    .vhd — Виртуальный «хард»
    .iso — Образ диска.

    >>qemu-img --help | grep Supported
    Supported formats: blkdebug blkverify bochs cloop cow dmg file ftp ftps host_cdrom host_device host_floppy http https iscsi nbd parallels qcow qcow2 qed quorum raw rbd sheepdog ssh tftp vdi vhdx vmdk vpc vvfat
    


  1. lovecraft
    05.02.2016 12:49

    Поиграйтесь с настройками QEMU, сам ещё не до конца разобрался с ним. Стоит учесть, что я запускал систему, используя ресурсы только одного ядра «малинки», при этом компьютер нагружался на 25-26% (запускал Win98). Я читал на форумах о многопоточной работе QEMU с образом системы, но так и не понял как заставить эмулятор использовать ресурсы больше, чем одного ядра.

    Если интересует многоядерность внутри ВМ, то:
    -smp [cpus=]n[,cores=cores][,threads=threads][,sockets=sockets][,maxcpus=maxcpus]
               Simulate an SMP system with n CPUs. On the PC target, up to 255 CPUs are supported. On Sparc32 target, Linux limits the number of usable CPUs to 4.  For the PC target, the number of cores per socket, the number of threads per cores and the total number of sockets can be specified. Missing values will be computed. If any on the three values is given, the total number of CPUs n can be omitted. maxcpus specifies the maximum number of hotpluggable CPUs.

    правда Win98 не поддерживает многоядерность, но можно попробоватьWinNT.

    Что касается архитектуры QEMU, то она вполне многопоточная на дисковый ввод-вывод, если использовать dataplane: www.linux-kvm.org/images/1/17/Kvm-forum-2013-Effective-multithreading-in-QEMU.pdf

    Я бы рекомендовал для старых игр не qemu, а dosbox, он намного менее требователен к ресурсам: dosonthepi.blogspot.ru/2015/01/run-dos-games-in-retropie_15.html
    а QEMU, как уже писали выше, даже при запуске x86->x86, но с выключенной аппаратной виртуализацией, очень нетороплив.


  1. Wedmer
    05.02.2016 15:14
    +1

    Хороший туториал на тему «Как бесполезно потратить время».