Подготовка
QEMU и SPARC
Для начала необходимо установить сам QEMU и модуль поддержки архитектуры SPARC. В Debian-based дистрибутивах, необходимо установить пакеты qemu
и qemu-system-sparc
. В Windows всё необходимое устанавливается единым инсталлятором.
PROM Flash
Далее нам понадобится PROM от SparcStation 5. Раздобыть его можно например здесь (зеркало).
Жёсткий диск
Затем, если необходимо, нужно создать файл жёсткого диска, например если планируется установка Solaris. По опыту, инсталлированный Solaris 2.6 со всеми опциями занимает 414 МБ.
В силу особенностей работы Solaris и утилиты format в частности, нельзя просто взять и создать диск любого размера, так как необходимо знать его количество цилиндров, головок и секторов. Можно использовать известные параметры реально существующих дисков:
SUN1.0G cyl 1703 alt 2 hd 15 sec 80
SUN9.0G cyl 4924 alt 2 hd 27 sec 133
SUN18G cyl 7506 alt 2 hd 19 sec 248
SUN36G cyl 24620 alt 2 hd 27 sec 107
Создаём диск нужного размера:
qemu-img create -f qcow2 hda_qcow_36g.img 36G
Сеть
Далее, если необходима работа с сетью, необходимо создать tap-интерфейс.
В Windows это можно сделать с помощью утилиты, входящей в состав OpenVPN (или её скачать отдельно). Затем необходимо переименовать интерфейс во что-то вменяемое вроде tap0
, чтобы потом использовать это имя при запуске QEMU с помощью ncpa.cpl
.
В Linux системах для этого можно воспользоваться командой
ip tuntap add mode tap tap0
Созданный TAP-интерфейс можно объединить в bridge с необходимым физическим интерфейсом.
В Linux:
brctl addbr br0
brctl addif br0 eth0
brctl addif br0 tap0
ip link set dev br0 up
Не забываем назначить интерфейсу br0
исходный IP-адрес, который был на интерфейсе eth0
:
ip addr add 192.168.0.1/24 dev br0
В Windows:
В ncpa.cpl
выбираем оба интерфейса - ПКМ - Настройка моста
CDROM
Взять Solaris различных древних версий можно, например, здесь.
Запуск
Графический режим
Наконец, подготовка завершена и можно уже запустить наш эмулятор:
qemu-system-sparc \
-M SS-5 -m 256 \
-bios ss5.bin \
-hda hda_qcow_36g.img \
-cdrom solaris_2.6_598_sparc.iso \
-net nic -net tap,ifname=tap0
И получаем до боли знакомый экран загрузки:

Serial-порт
Для удобства работы (и возможности копи-пэйста) можно отключить графику и использовать serial-порт. Для этого добавим опции -nographic
и -serial mon:telnet:127.0.0.1:13666,server,nowait
, где 127.0.0.1:13666 - адрес и порт, на котором будет запускаться telnet-сервер, подключаясь к кторому можно будет общаться с serial-портом машины.
Host ID
Как известно, Host ID на Sparcstation последние 3 октета MAC адреса машины совпадают с последними 6 цифрами Host ID. С внесением этого патча в основную ветку QEMU, стало возможно изменение Host ID с изменением MAC машины.
Для этого, нужно добавить параметр macaddr
к ключу -net nic
:
-net nic,macaddr=52:54:00:12:34:57 -net tap,ifname=tap0
boot cdrom
По умолчанию, QEMU размещает cdrom со SCSI target id 2, а не 6, как этого ожидает Sparcstation, что приводит к тому, что загружаться с cdrom надо командой boot disk2:d
:
SPARCstation 5, No Keyboard
ROM Rev. 2.15, 256 MB memory installed, Serial #1193046.
Ethernet address 52:54:0:12:34:56, Host ID: 80123456.
Boot device: /iommu/sbus/ledma@5,8400010/le@5,8c00000 File and args:
Internal loopback test -- Wrong packet length; expected 36, observed 64
Can't open boot device
Type help for more information
ok boot cdrom
Boot device: /iommu/sbus/espdma@5,8400000/esp@5,8800000/sd@6,0:d File and args:
Can't open boot device
ok
ok
ok boot disk2:d
Boot device: /iommu/sbus/espdma@5,8400000/esp@5,8800000/sd@2,0:d File and args:
SunOS Release 5.6 Version Generic_105181-05 [UNIX(R) System V Release 4.0]
Copyright (c) 1983-1997, Sun Microsystems, Inc.
Вернём работоспособность нормальной загрузки с boot cdrom
немного иначе подключив образ диска: -drive media=cdrom,index=6,file=solaris_2.6_598_sparc.iso
.
Итог
С применением всех указанных опций, получаем:
qemu-system-sparc \
-M SS-5 -m 256 \
-bios ss5.bin \
-nographic \
-serial mon:telnet:127.0.0.1:13666,server,nowait \
-hda hda_qcow_36g.img \
-drive media=cdrom,index=6,file=solaris_2.6_598_sparc.iso \
-net nic,macaddr=52:54:00:12:34:56 -net tap,ifname=tap0
$$$$$ WARNING: No Keyboard Detected! $$$$$
MMU Context Table Reg Test
MMU Context Register Test
MMU TLB Replace Ctrl Reg Tst
MMU Sync Fault Stat Reg Test
MMU Sync Fault Addr Reg Test
MMU TLB RAM NTA Pattern Test
ERROR : Address= 000000fc, exp= 07ffffdc, obs= 00000000, xor= 07ffffdc
initializing TLB
initializing cache
Allocating SRMMU Context Table
Setting SRMMU Context Register
Setting SRMMU Context Table Pointer Register
Allocating SRMMU Level 1 Table
Mapping RAM
Mapping ROM
ttya initialized
Probing Memory Bank #0 32 Megabytes
Probing Memory Bank #1 32 Megabytes
Probing Memory Bank #2 32 Megabytes
Probing Memory Bank #3 32 Megabytes
Probing Memory Bank #4 32 Megabytes
Probing Memory Bank #5 32 Megabytes
Probing Memory Bank #6 32 Megabytes
Probing Memory Bank #7 32 Megabytes
Incorrect configuration checksum;
Setting NVRAM parameters to default values.
Setting diag-switch? NVRAM parameter to true
Probing CPU FMI,MB86904
Probing /iommu@0,10000000/sbus@0,10001000 at 5,0 espdma esp sd st SUNW,bpp ledma le
Probing /iommu@0,10000000/sbus@0,10001000 at 4,0 SUNW,CS4231 power-management
Probing /iommu@0,10000000/sbus@0,10001000 at 1,0 Nothing there
Probing /iommu@0,10000000/sbus@0,10001000 at 2,0 Nothing there
Probing /iommu@0,10000000/sbus@0,10001000 at 3,0 SUNW,tcx
Probing /iommu@0,10000000/sbus@0,10001000 at 0,0 Nothing there
Probing Memory Bank #0 32 Megabytes
Probing Memory Bank #1 32 Megabytes
Probing Memory Bank #2 32 Megabytes
Probing Memory Bank #3 32 Megabytes
Probing Memory Bank #4 32 Megabytes
Probing Memory Bank #5 32 Megabytes
Probing Memory Bank #6 32 Megabytes
Probing Memory Bank #7 32 Megabytes
Incorrect configuration checksum;
Setting NVRAM parameters to default values.
Setting diag-switch? NVRAM parameter to true
Probing CPU FMI,MB86904
Probing /iommu@0,10000000/sbus@0,10001000 at 5,0 espdma esp sd st SUNW,bpp ledma le
Probing /iommu@0,10000000/sbus@0,10001000 at 4,0 SUNW,CS4231 power-management
Probing /iommu@0,10000000/sbus@0,10001000 at 1,0 Nothing there
Probing /iommu@0,10000000/sbus@0,10001000 at 2,0 Nothing there
Probing /iommu@0,10000000/sbus@0,10001000 at 3,0 SUNW,tcx
Probing /iommu@0,10000000/sbus@0,10001000 at 0,0 Nothing there
SPARCstation 5, No Keyboard
ROM Rev. 2.15, 256 MB memory installed, Serial #1193046.
Ethernet address 52:54:0:12:34:56, Host ID: 80123456.
Boot device: /iommu/sbus/ledma@5,8400010/le@5,8c00000 File and args:
Internal loopback test -- Wrong packet length; expected 36, observed 64
Can't open boot device
Type help for more information
ok boot cdrom
Boot device: /iommu/sbus/espdma@5,8400000/esp@5,8800000/sd@6,0:d File and args:
SunOS Release 5.6 Version Generic_105181-05 [UNIX(R) System V Release 4.0]
Copyright (c) 1983-1997, Sun Microsystems, Inc.
/
В следующих статьях мы рассмотрим процесс установки Solaris 2.6 в QEMU, решим проблемы, возникающие при загрузке, и настроим Install server в эмуляторе для загрузки настоящей SparcStation 5 (и не только) по сети.