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

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


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


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


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


'''Шаг 0.''' Для запуска порта ALT на RISC-V необходимо установить QEMU с поддержкой riscv64. Например, в случае хостовой системы на ALT x86_64: [http://sisyphus.ru/en/srpm/Sisyphus/qemu qemu-system-riscv-core].
В qemu 6.0 у ядра 5.14 и выше при загрузке с u-boot работает графика (virtio-gpu) и ввод в графике (virtio-keyboard и virtio-tablet).


'''Шаг 1.a''' Прошивка OpenSBI для QEMU virt находится внутри qcow2/qcow2c. Скопируем её из образа:
Для запуска образов в QEMU необходимо выполнить следующие шаги:
 
'''Шаг 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-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/ репозитории].


<source lang=shell>
Из пакета нужно извлечь файл '''/usr/share/u-boot/qemu-riscv64_smode/u-boot.bin'''. Например:
root$ qemu-nbd -c /dev/nbd0 qemu-riscv64.qcow2c
root$ mount /dev/nbd0p1 /mnt
root$ cp -v /mnt/usr/share/opensbi/qemu/virt/firmware/fw_payload.elf .
user$ FIRM=./fw_payload.elf
</source>


'''Шаг 1.b''' Альтернативный вариант: [http://ftp.altlinux.org/pub/distributions/ALTLinux/ports/riscv64/Sisyphus/noarch/RPMS.classic/ загрузить]
rpm2cpio u-boot-qemu-*.rpm | cpio -vi --to-stdout './usr/share/u-boot/qemu-riscv64_smode/u-boot.bin' > u-boot.bin
и установить последнюю версию пакета прошивки OpenSBI для QEMU virt.  
После этого прошивка OpenSBI будет находится в /usr/share/opensbi/qemu/virt/firmware/fw_payload.elf


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


<source lang=shell>
'''Шаг 3.''' Запуск образа в QEMU можно осуществить следующей командой, указав в IMAGE путь к образу и в UBOOT путь до u-boot, скачанного на шаге 1:
user$ curl -O http://ftp.altlinux.org/pub/distributions/ALTLinux/ports/riscv64/Sisyphus/noarch/RPMS.classic/opensbi-firmware-qemu-0.6-alt1.noarch.rpm
 
root$ rpm -i opensbi-firmware-qemu-0.6-alt1.noarch.rpm
<source lang="shell">
user$ FIRM=/usr/share/opensbi/qemu/virt/firmware/fw_payload.elf
$ 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
</source>
</source>


'''Шаг 1.с'''  В случае '''хостовой системы ALT''' можно добавить noarch репозиторий riscv64 и установить пакет <code>opensbi-firmware-generic</code>:
Если нужен доступ по vnc, то вместо "-device virtio-vga-gl -display sdl,gl=on" нужно указать "-device virtio-vga -vnc :1" и подключаться к 5901 порту (5900 порт занят для проброса сети):


<source lang="shell">
<source lang="shell">
$ apt-repo add 'rpm [sisyphus-riscv64] http://ftp.altlinux.org/pub/distributions/ALTLinux ports/riscv64/Sisyphus/noarch classic'
$ remote-viewer vnc://localhost:5901
$ apt-get update
$ apt-get install opensbi-firmware-generic
$ FIRM=/usr/share/opensbi/qemu/virt/firmware/fw_payload.elf
</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> (хотя никакой установки не происходит); впоследствии виртуальная машина будет запускаться штатно


'''Шаг 2.''' Запуск образа qcow2/qcow2c на QEMU можно осуществить следующей командой, указав в QCOW путь к образу:
==== Графика ====


<source lang="shell">
Помимо COM-порта (он всё равно нужен) нужно добавить:
$ QCOW=qemu-riscv64.qcow2c
* Клавиатуру: <code>Ввод</code>  →  <code>USB клавиатура</code>, с VirtIO-клавиатурой бывают проблемы.
$ qemu-system-riscv64 \
* Мышь: <code>Ввод</code> → <code>VirtIO-планшет</code> (можно и USB Мышь, но планшет удобнее).
          -nographic -machine virt -kernel "$FIRM" \
* Видеокатрту: <code>Видео</code> → <code>Virtio</code>, включить галочкой 3D.
          -m 2G -smp cpus=4 \
* Дисплей: <code>Графика</code> → <code>Сервер sipce</code> (<code>Тип ожидания:</code> нет, можно пробовать включать OpenGL).
          -drive file="$QCOW",id=hd0 -device virtio-blk-device,drive=hd0 \
 
          -netdev user,id=eth0,hostfwd=tcp::5900-:5900 -device virtio-net-device,netdev=eth0
После загрузки можно переключаться между консолями (меню <code>Вид</code> → <code>Консоли</code>), одна из которых будет графической, а в другой будет эмулированный последовательный порт.
</source>


'''Шаг 3.''' Дальнейшая настройка графической системы выполняется при помощи [https://www.altlinux.org/Regular/riscv64#VNC VNC]. При подключении по VNC установлен стандартный пароль '''<tt>alt</tt>''', его будет предложено поменять при первоначальной настройке.
'''Замечание:''' Работа графики проверена, когда VirtManager использует пользовательский сеанс QEMU (<code>qemu:///session</code>), возможно с libvritd надо делать по-другому.


== QEMU 6.1 ==
== OpenSBI ==


В qemu 6.1 у ядра 5.14 при загрузке с u-boot работает графика (virtio-gpu) и ввод в графике (virtio-keyboard и virtio-tablet). Поэтому для этого варианта загрузки уже не требуется использовать для графики vnc со стороны операционной системы. При необходимости можно использовать vnc от qemu.
Для более старых (до 6.0) версий QEMU Вам понадобится собранный OpenSBI.


Для запуска образов в QEMU необходимо выполнить следующие шаги:
Скачать последнюю версию <code>opensbi</code>. Можно воспользоваться [https://packages.altlinux.org/ru/sisyphus_riscv64/srpms/opensbi/rpms/ ссылкой на пакет на официальном сайте репозитория Sisyphus]. Или найти пакет непосредственно в [http://ftp.altlinux.org/pub/distributions/ALTLinux/ports/riscv64/Sisyphus/riscv64/RPMS.classic/ репозитории]


'''Шаг 0.''' Для запуска порта ALT на RISC-V необходимо установить QEMU с поддержкой riscv64. Например, в случае хостовой системы на ALT x86_64: [http://sisyphus.ru/en/srpm/Sisyphus/qemu qemu-system-riscv-core].
Из пакета нужно извлечь файл '''/usr/share/opensbi/generic/firmware/fw_jump.elf'''. Например:


'''Шаг 1.''' Скачать последнюю версию [https://packages.altlinux.org/ru/sisyphus/srpms/u-boot-qemu u-boot-qemu для riscv64]. Извлечь из пакета '''/usr/share/u-boot/qemu-riscv64_smode/u-boot.bin'''.
rpm2cpio opensbi-*.rpm | cpio -vi --to-stdout './usr/share/opensbi/generic/firmware/fw_jump.elf' > fw_jump.elf


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


<source lang="shell">
<source lang="shell">
$ IMAGE=<путь до образа>
$ IMAGE=<путь до образа>
$ UBOOT=<путь до u-boot.bin>
$ UBOOT=<путь до u-boot.bin>
$ FIRM=<путь до fw_jump.elf>
$ qemu-system-riscv64 \
$ qemu-system-riscv64 \
          -nographic -m 2G  -machine virt -kernel "$UBOOT" \
                      -nographic -machine virt \
          -smp cpus=4 \
                      -bios "$FIRM" \
          -drive file=$IMAGE,id=hd0 -device virtio-blk-device,drive=hd0 \
                      -kernel "$UBOOT" \
          -netdev user,id=eth0,hostfwd=tcp::5900-:5900 -device virtio-net-device,netdev=eth0 \
                      -m 2G -smp cpus=4 \
          -device virtio-gpu,xres=1280,yres=800 -device virtio-keyboard -device virtio-tablet -sdl
                      -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
</source>
</source>


Если нужен доступ по vnc, то вместо "-sdl" нужно указать "-vnc :1" и подключаться к 5901 порту (5900 порт занят для проброса сети):
Если нужен графический интерфейс запустить сервер VNC в образе, например, как описано в [[Regular/riscv64#VNC]].
 
Подключиться к VNC, например, так:


<source lang="shell">
vncviewer localhost
$ vncviewer localhost:5901
</source>


{{Category navigation|title=RISC-V|category=RISC-V|sortkey=*}}
{{Category navigation|title=RISC-V|category=RISC-V|sortkey=*}}
[[en:Ports/riscv64/QEMU]]

Текущая версия от 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