Ports/riscv64/QEMU: различия между версиями
(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/ | '''Шаг 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|регулярную сборку]]) и установить дистрибутив так же, как и на других архитектурах. | |||
'''Замечания''' | |||
* Для проверки этого сценария использовались {{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
- При создании виртуальной машины выбрать
Параметры архитектуры→riscv64Тип машины→virtМетод установки→Импорт образа диска(указать расположение распакованного образа)
- Файл
u-boot-qemuследует подложить сюда:Параметры загрузки→Прямая загрузка ядра→Путь к ядру- Там же выставить «✓» в пункте
Включить прямую загрузку ядра
- Там же выставить «✓» в пункте
- Для управления загрузкой и системой потребуется 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