null

Запуск Solaris 2.6 в QEMU, эмулирующем SparcStation 5 с поддержкой сети

Подготовка

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 (и не только) по сети.