LINUX.ORG.RU

qemu arm-виртуалка на x86

 , , ,


1

1

Если ли способ её просто запустить (с линуксом и снаружи и внутри, разумеется), без выяснений каких-то особенностей зоопарка arm-железок? Я когда-то пытался это сделать, оказалось что «просто arm» не существует, а есть куча мучений которые надо преодолевать.

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

А, наверно надо не только возможность запустить систему, но и возможность перед этим запустить её инсталлятор с iso-образа.

И есть ли разница в запуске 32 и 64 битных?

Хочу покодить кое что на arm ассемблере и надо где-то проверить что оно работает, а нативных arm-железок у меня нет.

★★★★★

Последнее исправление: firkax (всего исправлений: 1)

надо не только возможность запустить систему, но и возможность перед этим запустить её инсталлятор с iso-образа.

Пожалуйста, подскажите, на каком конфиге QEMU можно запустить установку Debian ARM? (комментарий) возможно только некоторые параметры надо будет заменить на аналоги для современной версии qemu.

No ★★★
()

оказалось что «просто arm» не существует,

Дак и просто x86 не существует, там указывается machine, потом какой биос (обычный или uefi), какое usb, сеть и т.д. Строка запуска qemu в любом случае куча буков. Так, вроде, вам нужен «virt» — абстрактный arm, а не какая-то конкретная плата. Плюс, нужно взять uboot, без uboot arm как-бы не загружается.

qemu-system-arm -machine virt -nographic -bios u-boot.bin -nic user,model=virtio-net-pci

https://www.qemu.org/docs/master/system/target-arm.html
https://docs.u-boot.org/en/stable/board/emulation/qemu-arm.html
https://www.altlinux.org/Ports/armh/QEMU

окно с экраном где видно как грузится ядро, юзерспейс например дебиана, и в конце пусть командная строка

Но qemu, это же не докер, либо отдельно искать установленый образ дебиана, либо качать дистрибутив, запускать инсталятор под qemu.

mky ★★★★★
()

Разверни обычный чрут, хоть MIPS, на amd64, закинь qemu-mips-static в /bin чрута, и далее просто запускай чрут указывая в начале qemu-mips-static, а далее /bin/sh, всё. Эта нашлёпка внутри теперь будет делать «магию». Так и для любой другой архитетуры для которой можно бутстрапнуть дебиан и засунуть в него готовый qemu-*-static

Давно так не делал, но раньше работало на ура, можно не отходя от кассы запускать без жирных виртуалок минимум 5 разных архитектур, прозрачно. Например если нужно собрать deb пакет сразу для ppc64le,amd64,i386,mips,aarch64 но у тебя есть лишь дохлый ПК и 5 гигов дискового пространства, на всё.

https://wiki.gentoo.org/wiki/Crossdev_qemu-static-user-chroot

anonymous
()
Ответ на: комментарий от mky

Дак и просто x86 не существует, там указывается machine, потом какой биос (обычный или uefi), какое usb, сеть и т.д. Строка запуска qemu в любом случае куча буков

Вообще-то не обязательно, qemu-system-i386 без аргументов вообще успешно запускается, показывает работу биоса который пытается сделать pxe. Если ему ещё дать образ диска - запустится с него. Всё остальное перечисленное он наверно делает внутри, но у него есть дефолты о которых можно не думать.

qemu-system-arm -machine virt -nographic -bios u-boot.bin -nic user,model=virtio-net-pci

Запустилось, но он как-то пробросил виртуальную консоль наружу, видимо через виртуальный последовательный порт или что-то такое. А с экраном нельзя? Если -nographic убрать то запускается с окном, но в нём не экран виртуалки а qemu-консоль.

firkax ★★★★★
() автор топика
Ответ на: комментарий от firkax

Ну когда-то вот так запускал (может поможет):

qemu-system-aarch64 \
  -monitor stdio \
  -M virt -m 8G -cpu max,pauth-impdef=on -smp 24 \
  -drive if=pflash,format=raw,readonly=on,file=/usr/share/qemu/edk2-aarch64-code.fd \
  -drive if=pflash,format=raw,file=~/games/edk2-arm-vars.fd \
  -display gtk,gl=on,show-cursor=on \
  -device ramfb \
  -device qemu-xhci -device usb-kbd -device usb-tablet \
  -device intel-hda \
  -device virtio-balloon \
  -device hda-output \
  -nic user,hostfwd=tcp::10022-:22,model=virtio-net-pci \
  -drive if=virtio,id=system,format=qcow2,file=~/games/gentoo-arm64-console.qcow2 \
Myp3ik ★★★
()
Последнее исправление: Myp3ik (всего исправлений: 1)

Пользователи дебианов могут сделать dpkg --add-architecture и пускать софт другой архитектуры даже без кросс-компиляции и chroot, через qemu+binfmt-misc

mittorn ★★★★★
()
Ответ на: комментарий от firkax

А с экраном нельзя?

Вариант с графикой:

#! /bin/bash

if ! [[ -e AAVMF_VARS.fd ]]; then
    cat /usr/share/AAVMF/AAVMF_VARS.fd > AAVMF_VARS.fd
fi

if ! [[ -e drive0.raw ]]; then
    truncate --size 8G drive0.raw
fi

cmd=(
    qemu-system-aarch64

    -machine virt
    -cpu cortex-a57 -smp 4
    -m 2G

    -drive if=pflash,format=raw,readonly=on,file=/usr/share/AAVMF/AAVMF_CODE.fd
    -drive if=pflash,format=raw,file=AAVMF_VARS.fd

    -device virtio-scsi-pci,id=scsi0

    -device scsi-hd,drive=drive0,bus=scsi0.0,lun=0
    -drive id=drive0,if=none,format=raw,file=drive0.raw

    -device scsi-hd,drive=drive1,bus=scsi0.0,lun=1
    -drive id=drive1,if=none,readonly=on,media=cdrom,file=debian-13.3.0-arm64-netinst.iso

    -device usb-ehci
    -device usb-kbd
    -device usb-mouse

    -monitor stdio

    #-device virtio-gpu-gl-pci -display sdl,gl=on
    -device virtio-gpu-pci -display sdl

    -net nic,model=virtio-net-pci
    -net user
)

"${cmd[@]}"

Тестовый режим сильно тормозит, графический работает побыстрее. При включении OpenGL у меня были проблемы в текстовом режиме.

No ★★★
()
Ответ на: комментарий от firkax

показывает работу биоса который пытается сделать pxe.

Та строка, которую я привёл, с u-boot.bin из пакета Альт Линукс делает аналогично, запускал её в xterm, она туда кучу сообщений выводит, пытается найти откуда загрузится. Не знаю, может у меня другой qemu.

Но, найти готовый образ корневой ФС под qemu virt arm как-то затруднительно. А образ SD-карточки — это не то, что понравится u-boot.

Так как на ARM нет BIOS, то нет стандартного формата загрузочного носителя, и вылазит куча букв в строке qemu. В гайдах по установке дебиан под qemu virt пишут, что нужно отдельно установочный iso и отдельно kernel и initrd указать qemu...

mky ★★★★★
()
Ответ на: комментарий от mky

Твоя строка запустилась да, но я про то что для x86 то же самое получается вообще без каких-либо настроек, чисто на дефолтах. А для arm открываю qemu-документацию а там, вместо понятного описания как запустить, список из нескольких десятков материнок которые я не знаю и знать не хочу, мне только виртуалка нужна. Поэтому и не смог сам составить команду.

Так как на ARM нет BIOS, то нет стандартного формата загрузочного носителя, и вылазит куча букв в строке qemu. В гайдах по установке дебиан под qemu virt пишут, что нужно отдельно установочный iso и отдельно kernel и initrd указать qemu...

И вот это всё тоже arm-возня на которую я жаловался.

firkax ★★★★★
() автор топика