Эльбрус/qemu: различия между версиями
м (→qemu-user-e2k: ++) |
м (по виртуализованному буту) |
||
Строка 1: | Строка 1: | ||
Аппаратная виртуализация (kvm) есть только на [[эльбрус/архитектура|v6]]; для v3+ (v2+?) потихоньку пилят paravirt. | Аппаратная виртуализация (kvm) есть только на [[эльбрус/архитектура|v6]]; для v3+ (v2+?) потихоньку пилят paravirt. | ||
Пока нет виртуализованного [[эльбрус/пнс|бута]] -- приходится вытаскивать из образа ядро с initrd и подсовывать вручную. | |||
= qemu-system-e2k = | = qemu-system-e2k = |
Версия от 17:12, 8 ноября 2023
Аппаратная виртуализация (kvm) есть только на v6; для v3+ (v2+?) потихоньку пилят paravirt.
Пока нет виртуализованного бута -- приходится вытаскивать из образа ядро с initrd и подсовывать вручную.
qemu-system-e2k
Пример запуска системы с образа жёсткого диска (ядро 5.4-5.9 на хосте и в "коробочке", в последнем случае требуется вариант mcst-def ради расширенного набора модулей virtio; см. тж. mcst#7476):
$ qemu-system-e2k -m 4G -vga std -display none -object iothread,id=iothread0 -drive if=none,id=drive0,file=$HOME/qemu/alt-rescue-20220929-e2kv6.img,format=raw,cache=none,aio=native -device virtio-blk-pci,iothread=iothread0,drive=drive0 -kernel ~/qemu/20220929/image -initrd ~/qemu/20220929/initrd.img -append "console=ttyS0 hardreset root=UUID=3d6fa1c7-2871-42ec-938f-de5c1d991df6" -serial stdio
и с livecd (при наличии -vga virtio лучше применять его):
$ qemu-system-e2k -m 4G -vga std -display none -drive id=cdrom0,if=none,format=raw,readonly=on,file=$HOME/qemu/alt-p10-wmaker-sysv-20220928-e2kv6.iso -device virtio-scsi-pci,id=scsi0 -device scsi-cd,bus=scsi0.0,drive=cdrom0 -kernel ~/qemu/live-image.0 -initrd ~/qemu/live-initrd.img -append "fastboot live automatic=method:cdrom stagename=live lowmem" -serial stdio
сеть (см. тж. etcnet#bridge и PVE#Настройка_сетевой_подсистемы; eth5 ниже -- пример имени опорного интерфейса моста vmbr0):
# echo "TYPE=eth" > /etc/net/ifaces/eth5/options # mkdir -p /etc/net/ifaces/vmbr0 # cat > /etc/net/ifaces/vmbr0/options << EOF BOOTPROTO=static TYPE=bri HOST=eth5 CONFIG_WIRELESS=no CONFIG_IPV4=yes # cat > /etc/net/ifaces/vmbr0/ipv4address << EOF 10.2.0.1/24 EOF
# mkdir -p /etc/qemu # echo "allow vmbr0" >> /etc/qemu/bridge.conf
$ ... -netdev bridge,id=n1,br=vmbr0 -device virtio-net-pci,netdev=n1,mac=52:54:00:12:34:56
В запущенной виртуалке можно сконфигурировать, скажем, 10.2.0.14/24 на полученный сетевой интерфейс и обмениваться пакетами с системой-хозяином.
Запуская вторую виртуалку с сетью, не забудьте дать ей свой MAC (52:54:xx:xx:xx:xx) во избежание конфликтов на мосту с сопутствующими таймаутами.
qemu-user-e2k
На x86 можно воспользоваться программным эмулятором qemu-e2k от сообщества, который, по словам сотрудника МЦСТ, "эмулирует что-то напоминающее архитектуру эльбрус" (при этом для ряда практических задач уже вполне пригоден).
Краткая вводная от разработчиков (тест подразумевает доступность кроссового lcc):
$ git clone --depth=1 -b e2k https://git.mentality.rip/OpenE2K/qemu-e2k.git $ cd qemu-e2k $ mkdir build $ cd build $ ../configure --target-list=e2k-linux-user --static --disable-capstone --disable-werror $ nice ninja $ sudo cp qemu-e2k /usr/local/bin $ cat hello.c #include <stdio.h> int main(int argc, char *argv[]) { const char *name = argc > 1 ? argv[1] : "world"; printf("Hello, %s!\n", name); return 0; } $ lcc -O2 hello.c -o hello-e2k $ qemu-e2k hello-e2k $USER Hello, denis! # setup binfmt $ cat /etc/binfmt.d/qemu-e2k.conf :qemu-e2k:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xaf\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-e2k:OC :qemu-e2k-old:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x31\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-e2k:OC :qemu-e2k32:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xaf\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-e2k32:OC :qemu-e2k32-old:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x31\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-e2k32:OC $ ./hello-e2k $USER Hello, denis!
Можно собрать без static, если не планируется запускать что-то в chroot. Можно добавить e2k32-linux-user в --target-list для запуска 32-битных программ, но особого смысла в них нет. :)
Ещё можно в /usr/gnemul создать символическую ссылку на chroot в cross-lcc, или на реальный chroot от Эльбрусов.
$ readlink -f /usr/gnemul/qemu-e2k/ /opt/mcst/lcc-1.26.14.e2k-v4.5.4/fs
Это чтобы не прописывать окружения QEMU_LD_PREFIX или qemu-e2k -L /opt/mcst/..../fs.