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

Материал из ALT Linux Wiki
< Ports‎ | riscv64
Нет описания правки
 
(не показано 15 промежуточных версий 3 участников)
Строка 1: Строка 1:
{{Stub}}
На этой странице описано, как запустить виртуальную машину <tt>riscv64</tt> под [https://www.qemu.org QEMU].
На этой странице описано, как запустить виртуальную машину <tt>riscv64</tt> под [https://www.qemu.org QEMU].


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


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


== QEMU 6.0+ ==
== QEMU 6.0+ ==


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


Для запуска образов в QEMU необходимо выполнить следующие шаги:
Для запуска образов в QEMU необходимо выполнить следующие шаги:
Строка 15: Строка 13:
'''Шаг 0.''' Для запуска порта ALT на RISC-V необходимо установить QEMU с поддержкой riscv64. Например, в случае хостовой системы на ALT x86_64: [http://sisyphus.ru/srpm/Sisyphus/qemu qemu-system-riscv-core]:
'''Шаг 0.''' Для запуска порта ALT на RISC-V необходимо установить QEMU с поддержкой riscv64. Например, в случае хостовой системы на ALT x86_64: [http://sisyphus.ru/srpm/Sisyphus/qemu qemu-system-riscv-core]:


   apt-get install qemu-system-riscv-core qemu-device-display-virtio-gpu-gl 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-gpu qemu-device-display-virtio-gpu-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/ru/sisyphus_riscv64/srpms/u-boot-sifive/rpms/ ссылкой на пакет на официальном сайте репозитория Sisyphus]. Или найти пакет непосредственно в [http://ftp.altlinux.org/pub/distributions/ALTLinux/ports/riscv64/Sisyphus/noarch/RPMS.classic/ репозитории].
Строка 23: Строка 23:
  rpm2cpio u-boot-qemu-*.rpm | cpio -vi --to-stdout './usr/share/u-boot/qemu-riscv64_smode/u-boot.bin' > 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.''' Запуск образа в QEMU можно осуществить следующей командой, указав в IMAGE путь к образу и в UBOOT путь до u-boot, скачанного на шаге 1:
'''Шаг 2.''' Скачать образ. Сжатые образы (например, в формате <tt>img.xz</tt>) нужно распаковать.
 
'''Шаг 3.''' Запуск образа в QEMU можно осуществить следующей командой, указав в IMAGE путь к образу и в UBOOT путь до u-boot, скачанного на шаге 1:


<source lang="shell">
<source lang="shell">
Строка 29: Строка 31:
$ UBOOT=<путь до u-boot.bin>
$ UBOOT=<путь до u-boot.bin>
$ qemu-system-riscv64 \
$ qemu-system-riscv64 \
           -nographic -m 2G -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 -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-vga-gl,xres=1280,yres=800 -device virtio-keyboard -device virtio-tablet -display sdl,gl=on
           -device virtio-keyboard -device virtio-tablet \
          -device virtio-gpu-gl,xres=1280,yres=800 -display sdl,gl=on
</source>
</source>


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


<source lang="shell">
<source lang="shell">
$ vncviewer localhost:5901
$ remote-viewer vnc://localhost:5901
</source>
</source>
=== Virtmanager ===
По той же схеме (правда, без графики, с последовательной консолью) образ можно запустить под управлением {{prg|virtmanager}} / <tt>libvirt</tt>.
# При создании виртуальной машины выбрать
#* <code>Параметры архитектуры</code> → <code>riscv64</code>
#* <code>Тип машины</code> → <code>virt</code>
#* <code>Метод установки</code> → <code>Импорт образа диска</code> (указать расположение распакованного образа)
# Файл <code>u-boot-qemu</code> следует подложить сюда: <code>Параметры загрузки</code> → <code>Прямая загрузка ядра</code> → <code>Путь к ядру</code>
#* Там же выставить «'''✓'''» в пункте <code>Включить прямую загрузку ядра</code>
# Для управления загрузкой и системой потребуется COM-консоль
#* Выставить «'''✓'''» в пункт <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>), одна из которых будет графической, а в другой будет эмулированный последовательный порт.
'''Замечание:''' Работа графики проверена, когда VirtManager использует пользовательский сеанс QEMU (<code>qemu:///session</code>), возможно с libvritd надо делать по-другому.


== OpenSBI ==
== OpenSBI ==

Текущая версия от 12:30, 29 марта 2024

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

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

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

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

Шаг 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 -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.

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

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

Графика

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

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

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

Замечание: Работа графики проверена, когда VirtManager использует пользовательский сеанс QEMU (qemu:///session), возможно с libvritd надо делать по-другому.

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