Ports/riscv64/QEMU: различия между версиями

Материал из ALT Linux Wiki
< Ports‎ | riscv64
(Virtmanager)
 
(не показано 9 промежуточных версий 2 участников)
Строка 4: Строка 4:


Некоторые образы ALT для riscv64 содержат сервер VNC, через который осуществляется первоначальная настройка системы, в дальнейшем, и доступен графический интерфейс (см. [[Regular/riscv64#VNC]]). Для доступа к этому серверу удобно пробросить на хост порт 5900. В приведённых ниже командах <tt>qemu</tt> этот порт пробрасывается.
Некоторые образы ALT для riscv64 содержат сервер VNC, через который осуществляется первоначальная настройка системы, в дальнейшем, и доступен графический интерфейс (см. [[Regular/riscv64#VNC]]). Для доступа к этому серверу удобно пробросить на хост порт 5900. В приведённых ниже командах <tt>qemu</tt> этот порт пробрасывается.
== Подготовка образа ==
Образы в формате <tt>img</tt> и <tt>iso</tt> можно использовать непосредственно, <tt>*.img.xz</tt> необходимо распаковать.
Тарболы rootfs (<tt>*.tar.xz</tt>) необходимо преобразовать в образ диска (например, <tt>*.img</tt>). Сделать это можно при помощи  {{cmd|alt-rootfs-installer}}:
sudo alt-rootfs-installer \
    --rootfs=/path/to/rootfs.tar.xz  --image-out=/path/to/image.img \
    --image-size=8000  --addconsole
Не забудьте после этого передать себе права на созданный образ:
sudo chown "$(id -u):$(id -g)" "/path/to/image.img"
Подробнее возможности {{cmd|alt-rootfs-installer}} описаны на странице [[Write/rootfs]].


== QEMU 6.0+ ==
== QEMU 6.0+ ==
Строка 15: Строка 32:
   apt-get install qemu-system-riscv-core  qemu-ui-sdl seavgabios \
   apt-get install qemu-system-riscv-core  qemu-ui-sdl seavgabios \
     qemu-device-display-virtio-vga qemu-device-display-virtio-vga-gl \
     qemu-device-display-virtio-vga qemu-device-display-virtio-vga-gl \
     qemu-device-display-virtio-gpu qemu-device-display-virtio-gpu-gl
     qemu-device-display-virtio-gpu qemu-device-display-virtio-gpu-gl \
    qemu-device-display-virtio-gpu-pci qemu-device-display-virtio-gpu-pci-gl


'''Шаг 1.''' Скачать последнюю версию <code>u-boot-qemu</code> для riscv64. Можно воспользоваться  [https://packages.altlinux.org/ru/sisyphus_riscv64/srpms/u-boot-sifive/rpms/ ссылкой на пакет на официальном сайте репозитория Sisyphus]. Или найти пакет непосредственно в [http://ftp.altlinux.org/pub/distributions/ALTLinux/ports/riscv64/Sisyphus/noarch/RPMS.classic/ репозитории].
'''Шаг 1.''' Скачать последнюю версию <code>u-boot-qemu</code> для riscv64. Можно воспользоваться  [https://packages.altlinux.org/en/sisyphus_riscv64/srpms/u-boot-qemu/rpms/ ссылкой на пакет на официальном сайте репозитория Sisyphus]. Или найти пакет непосредственно в [http://ftp.altlinux.org/pub/distributions/ALTLinux/ports/riscv64/Sisyphus/noarch/RPMS.classic/ репозитории].


Из пакета нужно извлечь файл '''/usr/share/u-boot/qemu-riscv64_smode/u-boot.bin'''. Например:
Из пакета нужно извлечь файл '''/usr/share/u-boot/qemu-riscv64_smode/u-boot.bin'''. Например:
Строка 33: Строка 51:
           -nographic -m 4G  -machine virt -kernel "$UBOOT" \
           -nographic -m 4G  -machine virt -kernel "$UBOOT" \
           -smp cpus=4 \
           -smp cpus=4 \
           -drive file=$IMAGE,id=hd0 -device virtio-blk-device,drive=hd0  \
           -drive file=$IMAGE,id=hd0,if=none -device virtio-blk-device,drive=hd0  \
           -netdev user,id=eth0,hostfwd=tcp::5900-:5900 -device virtio-net-device,netdev=eth0 \
           -netdev user,id=eth0,hostfwd=tcp::5900-:5900 -device virtio-net-device,netdev=eth0 \
           -device virtio-keyboard -device virtio-tablet \
           -device virtio-keyboard -device virtio-tablet \
Строка 47: Строка 65:
=== Virtmanager ===
=== Virtmanager ===
По той же схеме (правда, без графики, с последовательной консолью) образ можно запустить под управлением {{prg|virtmanager}} / <tt>libvirt</tt>.
По той же схеме (правда, без графики, с последовательной консолью) образ можно запустить под управлением {{prg|virtmanager}} / <tt>libvirt</tt>.
==== U-Boot ====


# При создании виртуальной машины выбрать  
# При создании виртуальной машины выбрать  
Строка 57: Строка 78:
#* Выставить «'''✓'''» в пункт <code>Проверить конфигурацию системы перед установкой</code>
#* Выставить «'''✓'''» в пункт <code>Проверить конфигурацию системы перед установкой</code>
#* Добавить в конфигурацию COM-порт: <code>Добавить оборудование</code> → <code>Последовательное</code>
#* Добавить в конфигурацию COM-порт: <code>Добавить оборудование</code> → <code>Последовательное</code>
При первом запуске надо нажать кнопку <code>Начать установку</code> (хотя никакой установки не происходит); впоследствии виртуальная машина будет запускаться штатно
==== Графика ====
Помимо COM-порта (он всё равно нужен) нужно добавить:
* Клавиатуру: <code>Ввод</code>  →  <code>USB клавиатура</code>, с VirtIO-клавиатурой бывают проблемы.
* Мышь: <code>Ввод</code> → <code>VirtIO-планшет</code> (можно и USB Мышь, но планшет удобнее).
* Видеокатрту: <code>Видео</code> → <code>Virtio</code>, включить галочкой 3D.
* Дисплей: <code>Графика</code> → <code>Сервер sipce</code> (<code>Тип ожидания:</code> нет, можно пробовать включать OpenGL).
После загрузки можно переключаться между консолями (меню <code>Вид</code> → <code>Консоли</code>), одна из которых будет графической, а в другой будет эмулированный последовательный порт.
==== edk2 ====
Можно использовать и стандартную для virt-manager схему, в том числе с графикой. Для этого понадобится пакет {{pkg|edk2-riscv64}}:
apt-get install edk2-riscv64
Если у Вас в репозитории его ещё нет, можно скачать и поставить пакет [https://packages.altlinux.org/en/sisyphus/srpms/edk2-riscv64/rpms/ из Сизифа], он noarch и не требует никаких зависимостей.
После этого достаточно в virt-manager выбрать архитектуру riscv64, машину virt, и убедиться, что используется UEFI в качестве firmware. Можно загрузить обычную ISO (например, [[Regular/riscv64|регулярную сборку]]) и установить дистрибутив так же, как и на других архитектурах.
'''Замечания'''


'''TODO''': подключение графики.
* Для проверки этого сценария использовались {{pkg|libvirt 11.5.0-alt1}} и {{pkg|virt-manager 5.0.0-alt1}}.
* На данный момент в регулярных сборках ядра сконфигурированны выводить логи на последовательный порт, на который можно переключиться используя меню <code>Вид</code> → <code>Консоли</code>.


== OpenSBI ==
== OpenSBI ==

Текущая версия от 12:13, 17 июля 2025

На этой странице описано, как запустить виртуальную машину riscv64 под QEMU.

Начиная с версии 6.0, в состав QEMU входит OpenSBI (firmware). Для более старых версий QEMU нужно скачать собранный OpenSBI и указать его в командной строке QEMU. Как это сделть описано ниже, в секции #OpenSBI.

Некоторые образы ALT для riscv64 содержат сервер VNC, через который осуществляется первоначальная настройка системы, в дальнейшем, и доступен графический интерфейс (см. Regular/riscv64#VNC). Для доступа к этому серверу удобно пробросить на хост порт 5900. В приведённых ниже командах qemu этот порт пробрасывается.

Подготовка образа

Образы в формате img и iso можно использовать непосредственно, *.img.xz необходимо распаковать.

Тарболы rootfs (*.tar.xz) необходимо преобразовать в образ диска (например, *.img). Сделать это можно при помощи alt-rootfs-installer:

sudo alt-rootfs-installer \
   --rootfs=/path/to/rootfs.tar.xz  --image-out=/path/to/image.img \
   --image-size=8000  --addconsole


Не забудьте после этого передать себе права на созданный образ:

sudo chown "$(id -u):$(id -g)" "/path/to/image.img"

Подробнее возможности alt-rootfs-installer описаны на странице Write/rootfs.

QEMU 6.0+

В qemu 6.0 у ядра 5.14 и выше при загрузке с u-boot работает графика (virtio-gpu) и ввод в графике (virtio-keyboard и virtio-tablet).

Для запуска образов в QEMU необходимо выполнить следующие шаги:

Шаг 0. Для запуска порта ALT на RISC-V необходимо установить QEMU с поддержкой riscv64. Например, в случае хостовой системы на ALT x86_64: qemu-system-riscv-core:

 apt-get install qemu-system-riscv-core  qemu-ui-sdl seavgabios \
    qemu-device-display-virtio-vga qemu-device-display-virtio-vga-gl \
    qemu-device-display-virtio-gpu qemu-device-display-virtio-gpu-gl \
    qemu-device-display-virtio-gpu-pci qemu-device-display-virtio-gpu-pci-gl

Шаг 1. Скачать последнюю версию u-boot-qemu для riscv64. Можно воспользоваться ссылкой на пакет на официальном сайте репозитория Sisyphus. Или найти пакет непосредственно в репозитории.

Из пакета нужно извлечь файл /usr/share/u-boot/qemu-riscv64_smode/u-boot.bin. Например:

rpm2cpio u-boot-qemu-*.rpm | cpio -vi --to-stdout './usr/share/u-boot/qemu-riscv64_smode/u-boot.bin' > u-boot.bin

Шаг 2. Скачать образ. Сжатые образы (например, в формате img.xz) нужно распаковать.

Шаг 3. Запуск образа в QEMU можно осуществить следующей командой, указав в IMAGE путь к образу и в UBOOT путь до u-boot, скачанного на шаге 1:

$ IMAGE=<путь до образа>
$ UBOOT=<путь до u-boot.bin>
$ qemu-system-riscv64 \
          -nographic -m 4G  -machine virt -kernel "$UBOOT" \
          -smp cpus=4 \
          -drive file=$IMAGE,id=hd0,if=none -device virtio-blk-device,drive=hd0  \
          -netdev user,id=eth0,hostfwd=tcp::5900-:5900 -device virtio-net-device,netdev=eth0 \
          -device virtio-keyboard -device virtio-tablet \
          -device virtio-gpu-gl,xres=1280,yres=800 -display sdl,gl=on

Если нужен доступ по vnc, то вместо "-device virtio-vga-gl -display sdl,gl=on" нужно указать "-device virtio-vga -vnc :1" и подключаться к 5901 порту (5900 порт занят для проброса сети):

$ remote-viewer vnc://localhost:5901

Virtmanager

По той же схеме (правда, без графики, с последовательной консолью) образ можно запустить под управлением virtmanager / libvirt.


U-Boot

  1. При создании виртуальной машины выбрать
    • Параметры архитектурыriscv64
    • Тип машиныvirt
    • Метод установкиИмпорт образа диска (указать расположение распакованного образа)
  2. Файл u-boot-qemu следует подложить сюда: Параметры загрузкиПрямая загрузка ядраПуть к ядру
    • Там же выставить «» в пункте Включить прямую загрузку ядра
  3. Для управления загрузкой и системой потребуется COM-консоль
    • Выставить «» в пункт Проверить конфигурацию системы перед установкой
    • Добавить в конфигурацию COM-порт: Добавить оборудованиеПоследовательное

При первом запуске надо нажать кнопку Начать установку (хотя никакой установки не происходит); впоследствии виртуальная машина будет запускаться штатно

Графика

Помимо COM-порта (он всё равно нужен) нужно добавить:

  • Клавиатуру: ВводUSB клавиатура, с VirtIO-клавиатурой бывают проблемы.
  • Мышь: ВводVirtIO-планшет (можно и USB Мышь, но планшет удобнее).
  • Видеокатрту: ВидеоVirtio, включить галочкой 3D.
  • Дисплей: ГрафикаСервер sipce (Тип ожидания: нет, можно пробовать включать OpenGL).

После загрузки можно переключаться между консолями (меню ВидКонсоли), одна из которых будет графической, а в другой будет эмулированный последовательный порт.

edk2

Можно использовать и стандартную для virt-manager схему, в том числе с графикой. Для этого понадобится пакет edk2-riscv64:

apt-get install edk2-riscv64

Если у Вас в репозитории его ещё нет, можно скачать и поставить пакет из Сизифа, он noarch и не требует никаких зависимостей.

После этого достаточно в virt-manager выбрать архитектуру riscv64, машину virt, и убедиться, что используется UEFI в качестве firmware. Можно загрузить обычную ISO (например, регулярную сборку) и установить дистрибутив так же, как и на других архитектурах.

Замечания

  • Для проверки этого сценария использовались libvirt 11.5.0-alt1 и virt-manager 5.0.0-alt1.
  • На данный момент в регулярных сборках ядра сконфигурированны выводить логи на последовательный порт, на который можно переключиться используя меню ВидКонсоли.

OpenSBI

Для более старых (до 6.0) версий QEMU Вам понадобится собранный OpenSBI.

Скачать последнюю версию opensbi. Можно воспользоваться ссылкой на пакет на официальном сайте репозитория Sisyphus. Или найти пакет непосредственно в репозитории

Из пакета нужно извлечь файл /usr/share/opensbi/generic/firmware/fw_jump.elf. Например:

rpm2cpio opensbi-*.rpm | cpio -vi --to-stdout './usr/share/opensbi/generic/firmware/fw_jump.elf' > fw_jump.elf

Запуск образа в QEMU можно осуществить следующей командой, указав в IMAGE путь к образу, в UBOOT путь до u-boot, скачанного на шаге 1, в FIRM путь до fw_jump.elf.

$ IMAGE=<путь до образа>
$ UBOOT=<путь до u-boot.bin>
$ FIRM=<путь до fw_jump.elf>
$ qemu-system-riscv64 \
                      -nographic -machine virt \
                      -bios "$FIRM" \
                      -kernel "$UBOOT" \
                      -m 2G -smp cpus=4 \
                      -drive file=$IMAGE,id=hd0,format=raw -device virtio-blk-device,drive=hd0 \
                      -netdev user,id=eth0,hostfwd=tcp::5900-:5900 -device virtio-net-device,netdev=eth0

Если нужен графический интерфейс запустить сервер VNC в образе, например, как описано в Regular/riscv64#VNC.

Подключиться к VNC, например, так:

vncviewer localhost