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

Материал из ALT Linux Wiki
< Ports‎ | riscv64
Нет описания правки
Нет описания правки
Строка 17: Строка 17:
   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-device-display-virtio-gpu-gl qemu-ui-sdl seavgabios


'''Шаг 1.''' Скачать последнюю версию u-boot-qemu для riscv64. Можно воспользоваться ссылкой со страницы https://packages.altlinux.org/ru/sisyphus_riscv64/srpms/u-boot-sifive/rpms/. Или найти пакет непосредственно в [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/. Или найти пакет непосредственно в [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'''. Например так:
Строка 46: Строка 46:
Для более старых (до 6.0) версий QEMU Вам понадобится собранный OpenSBI.
Для более старых (до 6.0) версий QEMU Вам понадобится собранный OpenSBI.


'''Вариант #1''' Прошивка OpenSBI для QEMU virt находится внутри qcow2/qcow2c. Скопируем её из образа:
Скачать последнюю версию <code>opensbi</code>. Можно воспользоваться ссылкой со страницы https://packages.altlinux.org/ru/sisyphus_riscv64/srpms/opensbi/rpms/. Или найти пакет непосредственно в [http://ftp.altlinux.org/pub/distributions/ALTLinux/ports/riscv64/Sisyphus/noarch/RPMS.classic/ репозитории]


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


'''Вариант #2''' [http://ftp.altlinux.org/pub/distributions/ALTLinux/ports/riscv64/Sisyphus/noarch/RPMS.classic/ Загрузить]
rpm2cpio opensbi-*.rpm | cpio -vi --to-stdout './usr/share/opensbi/generic/firmware/fw_jump.elf' > fw_jump.elf
и установить последнюю версию пакета прошивки OpenSBI <code>opensbi-firmware-generic</code>.  
После этого прошивка OpenSBI будет находится в /usr/share/opensbi/generic/firmware/fw_payload.elf


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


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

Версия от 14:19, 20 января 2022

Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.


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

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

Некоторые образы ALT для risc64 содержат сервер 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-device-display-virtio-gpu-gl qemu-ui-sdl seavgabios

Шаг 1. Скачать последнюю версию u-boot-qemu для riscv64. Можно воспользоваться ссылкой со страницы https://packages.altlinux.org/ru/sisyphus_riscv64/srpms/u-boot-sifive/rpms/. Или найти пакет непосредственно в репозитории

Из пакета нужно извлечь файл /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. Запуск образа в QEMU можно осуществить следующей командой, указав в IMAGE путь к образу и UBOOT путь до u-boot, скачанного на шаге 1:

$ IMAGE=<путь до образа>
$ UBOOT=<путь до u-boot.bin>
$ qemu-system-riscv64 \
          -nographic -m 2G  -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-vga-gl,xres=1280,yres=800 -device virtio-keyboard -device virtio-tablet -display sdl,gl=on

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

$ vncviewer localhost:5901

OpenSBI

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

Скачать последнюю версию opensbi. Можно воспользоваться ссылкой со страницы https://packages.altlinux.org/ru/sisyphus_riscv64/srpms/opensbi/rpms/. Или найти пакет непосредственно в репозитории

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