АЛЕКСАНДР БАЙРАК
Обзор эмулятора mips64emul
В этой статье я хотел бы вам рассказать об одном очень интересном эмуляторе – mips64emul. В последнее время меня заинтересовала тема эмуляции во всех ее проявлениях. Начиная от эмулирования системных вызовов какой-либо ОС, заканчивая полноценными виртуальными машинами. В конечном итоге виртуальная машина – это тот же самый эмулятор, отличие лишь в том, что эмулируется весь компьютер целиком. Самые известные представители ряда виртуальных машин – VMWare, Bochs, Virtual PC. И вот тут мы подходим к самому интересному, все вышеперечисленные программы эмулируют архитектуру x86. Соответственно под ними у нас есть возможность запустить ОС, созданные для этой архитектуры. Но ведь есть и другие архитектуры – PPC, m68k, SPARC, MIPS, и т. д. Потратив некоторое время на поиски программ, способных эмулировать процессоры, отличные от x86, я нашел много чего интересного. Изыскания относительно одной из находок перед вами.
Официальный сайт проекта mips64emul – http://www.mdstud.chalmers.se/~md1gavan/mips64emul. Как ясно из названия, он эмулирует процессоры MIPS. Данная программа способна эмулировать как 64-, так и 32-битные процессоры MIPS. MIPS в настоящее время используются достаточно широко: 90% всех компьютеров от Silicon Graphics используют эти процессоры, также они используются в игровой приставке Sony Play Station 2 и во многих других устройствах.
Перейдем от теории к практике. Все свои эксперименты я проводил на P3-550 МГц/320 Мб RAM под управлением ОС FreeBSD 4.10. Также ее можно использовать под управлением другой BSD-системы или Linux.
Берем с сайта разработчика последнюю версию программы. Я использовал версию 0.2. Процесс установки mips64emul очень прост и каких-либо затруднений не вызвал:
./configure – help
Внимательно читаем, может быть, вам понадобится для своих нужд добавить какие-либо опции.
./configure
gmake
gmake install
mips64emul поддерживает эмуляция достаточно большого количества компьютеров с mips-процессорами:
- DEC Station: PMAX(3100), 3MAX(5000), 3MIN(5000), 3MAX+(5000,5900), 5800, 5400, MAXINE(5000), 5500, 5100(MIPSMATE).
- ARC: NEC-RD94, PICA-61, NEC-R94, Deskstation Tyne.
- Sony Playstation 2 (CPU R5900).
- Cobalt (CPU RM5200).
- Различные машины от SGI (IPxx ).
- Некоторые карманные компьютеры с MIPS-процессорами.
Поддерживаемые типы процессоров:
- R2000, R2000A, R3000, R3000A, R4000.
- R4300, R4400, R4600, R4700, R5000.
- RM5200, R5900, VR5432, R6000, RM 7000.
- R8000, R10000, R12000, R14000, 5K.
Далее, для каждого компьютера нужна ОС. На сайте разработчика я прочитал, что на данный момент под эмулятором можно свободно запустить следующие ОС:
- NetBSD/pmax;
- OpenBSD/pmax;
- Ultrix/RISC;
- Sprite.
С последними двумя я, к сожалению, не работал, и, как следствие, дистрибутивов этих ОС у меня нет. Если принять во внимание, что это коммерческие ОС, уже официально не поддерживаемые производителем, я не стал тратить время на поиск дистрибутивов и для дальнейших экспериментов выбрал NetBSD. Во-первых, с ней я работаю чаще, нежели с OpenBSD, во-вторых, поддержка архитектуры pmax в OpenBSD была закончена в версии 2.9 (она вышла 1 июня 2001 года). А последняя версия NetBSD (на момент написания – 1.6.2) отлично поддерживает pmax и по сей день.
Не буду подробно останавливаться на процессе установки NetBSD, потому как есть замечательная статья Андрея Бешкова [1].
Для начала нам нужно создать виртуальный жесткий диск, на который мы будем устанавливать ОС.
dd if=/dev/zero of=/disk.img bs=1 count=512 seek=1100000000
После выполнения команды у нас получится файл размером 1050 Мб. Естественно, размер диска вы можете уменьшить или увеличить в зависимости от своих потребностей.
Далее нам нужно определиться с методом установки: NetBSD можно поставить непосредственно с boot CD-диска либо по сети, перед этим загрузившись с помощью установочной дискеты. Я выбрал первый вариант. Берем ftp://ftp.netbsd.org/pub/NetBSD/iso/1.6.2/pmaxcd.iso.
Его размер около 75 Мб. Далее запускаем наш эмулятор, указав ему грузиться с диска:
mips64emul –X –D2 –d disk.img –d bc:pmaxcd.iso –j netbsd.pmax
Давайте разберемся с опциями, которые мы указываем:
- -X – использовать X11.
- -D2 – эмулировать DEC Station 5000/200.
- -d disk.img – указываем файл, который является нашим виртуальным диском.
- -d bc:pmaxcd.iso – указываем загрузочный диск.
- -j – указываем имя ядра.
Для тех, кто решил устанавливать систему по сети, сообщаю порядок действий.
Сначала нужно списать образ загрузочной дискеты c ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-1.6.2/pmax/binary/kernel/netbsd-INSTALL.gz. Далее нужно распаковать полученный архив:
gunzip netbsd-INSTALL.gz
После чего запустить mips64emul:
mips64emul –X –D2 –d disk.img netbsd-INSTALL
Так же в случае процесса установки по сети придется настроить сеть. Сетевой интерфейс будет называться le0. Настройка сети каких-либо проблем не вызывает, вам нужно лишь указать имя хоста, IP-адрес, маску сети, адрес шлюза и IP DNS-сервера.
Процесс инсталляции ОС занимает достаточно продолжительное время, так на моей системе он занял чуть больше четырех часов. Да, к сожалению, уже на этом этапе можно заметить, что работает все медленнее, чем хотелось бы. После того как процесс установки завершен, можно посмотреть, что у нас получилось:
mips64emul –X –M64 –D2 –d disk.img
Все опции запуска нам уже знакомы, за исключением –M. Это опция служит для задания количества оперативной памяти, т.е. в данном случае я указал, что на эмулируемом компьютере установлено 64 Мб памяти.
Система загружается порядка 5 минут. Я никогда не работал на настоящей DEC Station 5000/200, но думаю, что на ней загрузка системы ничуть не быстрее, потому как тактовая частота процессора всего 25 МГц. После запуска, без дополнительной настройки мы можем запустить X-windows, выполнив команду startx. В качестве window manager используется стандартный twm. Более подробно о настройке NetBSD вы можете прочитать в моей статье [2].
Исходя из документации к mips64emul, помимо вышеуказанных ОС, можно запустить другие системы, созданные для процессоров MIPS. Например, NetBSD/sgimips, NetBSD/arc, NetBSD/cobalt, NetBSD/playstation2 (http://www.netbsd.org), Linux/SGI (http://www.linux-mips.org). И некоторые другие малоизвестные реализации Linux для MIPS-процессоров. Ради справедливости нужно заметить, что поддержка всего вышеперечисленного пока находится в экспериментальном режиме. Но судя по тому, как динамично развивается проект (а ему меньше двух лет), можно предположить, что все эти ОС в скором времени можно будет запускать абсолютно спокойно.
А какая практическая польза от использования этого эмулятора, спросите вы. Я лично использую его исключительно из «спортивного» интереса. Но он окажется очень полезным для программистов, пишущих приложения, нацеленные на MIPS-процессоры, но по какой-либо причине не имеющие его под рукой. Также это отличный полигон для изучения данной архитектуры в академических целях.
Буду рад услышать описания ваших экспериментов, связанных с этим эмулятором. Пишите!
Литература:
- Бешков А. NetBSD: установка и настройка. – Журнал «Системный администратор», №9, август 2003г., также доступна электронная версия – http://onix.opennet.ru/netbsd/netbsd.html.
- Байрак А. Первые шаги в NetBSD. Часть 1. – Журнал «Системный администратор», №6, июнь 2004 г.