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

Материал из ALT Linux Wiki
< Ports‎ | riscv64
Нет описания правки
(не показано 28 промежуточных версий 4 участников)
Строка 1: Строка 1:
{{Stub}}
На этой странице описано, как запустить виртуальную машину <tt>riscv64</tt> под [https://www.qemu.org QEMU].
 
Начиная с версии 6.0, в состав QEMU входит OpenSBI (firmware). Для более старых версий QEMU нужно скачать собранный OpenSBI и указать его в командной строке QEMU. Как это сделть описано ниже,  в секции [[#OpenSBI]].
 
Некоторые образы 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 необходимо выполнить следующие шаги:


'''Шаг 0.''' Для запуска порта ALT на RISC-V необходимо установить QEMU с поддержкой riscv64. Например, в случае хостовой системы на ALT x86_64: [http://sisyphus.ru/en/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-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


  apt-get install qemu-system-riscv-core
'''Шаг 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.''' Скачать последнюю версию [https://packages.altlinux.org/ru/sisyphus/srpms/u-boot-qemu u-boot-qemu для riscv64]. Можно воспользоваться ссылкой со страницы https://packages.altlinux.org/ru/sisyphus/srpms/u-boot-qemu/rpms.
Из пакета нужно извлечь файл '''/usr/share/u-boot/qemu-riscv64_smode/u-boot.bin'''. Например:


Из пакета нужно извлечь файл '''/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


  rpm2cpio u-boot-qemu-*riscv64.rpm | cpio -vi --to-stdout './usr/share/u-boot/qemu-riscv64_smode/u-boot.bin' > u-boot.bin
'''Шаг 2.''' Скачать образ. Сжатые образы (например, в формате <tt>img.xz</tt>) нужно распаковать.


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


<source lang="shell">
<source lang="shell">
Строка 23: Строка 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-gpu,xres=1280,yres=800 -device virtio-keyboard -device virtio-tablet -sdl  
           -device virtio-keyboard -device virtio-tablet \
          -device virtio-vga-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>


== OpenSBI ==


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


Начиная с версии 6.0, в состав QEMU входит OpenSBI (firmware). Для более старых версий 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/ репозитории]


'''Вариант #1''' Прошивка OpenSBI для QEMU virt находится внутри qcow2/qcow2c. Скопируем её из образа:
Из пакета нужно извлечь файл '''/usr/share/opensbi/generic/firmware/fw_jump.elf'''. Например:


<source lang=shell>
rpm2cpio opensbi-*.rpm | cpio -vi --to-stdout './usr/share/opensbi/generic/firmware/fw_jump.elf' > fw_jump.elf
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>


'''Вариант #2''' [http://ftp.altlinux.org/pub/distributions/ALTLinux/ports/riscv64/Sisyphus/noarch/RPMS.classic/ Загрузить]
Запуск образа в QEMU можно осуществить следующей командой, указав в IMAGE путь к образу, в UBOOT путь до u-boot, скачанного на шаге 1, в FIRM путь до fw_jump.elf.
и установить последнюю версию пакета прошивки OpenSBI для QEMU virt.
После этого прошивка OpenSBI будет находится в /usr/share/opensbi/qemu/virt/firmware/fw_payload.elf


Например:
<source lang="shell">
 
$ IMAGE=<путь до образа>
<source lang=shell>
$ UBOOT=<путь до u-boot.bin>
user$ curl -O http://ftp.altlinux.org/pub/distributions/ALTLinux/ports/riscv64/Sisyphus/noarch/RPMS.classic/opensbi-firmware-qemu-0.6-alt1.noarch.rpm
$ FIRM=<путь до fw_jump.elf>
root$ rpm -i opensbi-firmware-qemu-0.6-alt1.noarch.rpm
$ qemu-system-riscv64 \
user$ FIRM=/usr/share/opensbi/qemu/virt/firmware/fw_payload.elf
                      -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
</source>
</source>


'''Вариант #3'''  В случае '''хостовой системы ALT''' можно добавить noarch репозиторий riscv64 и установить пакет <code>opensbi-firmware-generic</code>:
Если нужен графический интерфейс запустить сервер VNC в образе, например, как описано в [[Regular/riscv64#VNC]].
 
<source lang="shell">
$ apt-repo add 'rpm [sisyphus-riscv64] http://ftp.altlinux.org/pub/distributions/ALTLinux ports/riscv64/Sisyphus/noarch classic'
$ apt-get update
$ apt-get install opensbi-firmware-generic
$ FIRM=/usr/share/opensbi/qemu/virt/firmware/fw_payload.elf
</source>


Тогда запуск образа qcow2/qcow2c на QEMU можно осуществить следующей командой:
Подключиться к VNC, например, так:


<source lang="shell">
vncviewer localhost
$ QCOW=qemu-riscv64.qcow2c
$ qemu-system-riscv64 \
          -nographic -machine virt -kernel "$FIRM" \
          -m 2G -smp cpus=4 \
          -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
</source>


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

Версия от 12:43, 22 апреля 2023

На этой странице описано, как запустить виртуальную машину 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-vga-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

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