Войти
ФлеймФорумСофт

Эмуляция Debian ARM/ARM64 используя Qemu на Linux x86_64

#0
(Правка: 1 окт 2021, 0:40) 1:12, 20 сен 2021

Не актуально, проблема решена и ниже показал как устанавливать. )))

Суть такова, что уже достаточно много представлено возможностей установить машину ARM/ARM64 на машине x86_64, используя Qemu. Как обычный ПК, так и какие-то микрокомпьютеры и прочие платы.
Смотрим: здесь (Debian), здесь (Русские блоги, достаточно много различного), здесь (Raspberry, но лучше смотреть видео, по которому сделали "урок" на этом сайте), ну и тонны информации в интернете.

Если достаточно неплохо разбираться и сидеть за всем за этим, то можно достаточно быстро собрать машину. Что я и сделал (очень долго курил мануалы, Qemu здесь только какие-то основы даёт и определённую документацию).

Видео, начал устанавливать 32-х битный Debian-armhf (на моей машине установка достаточно долгая).

+ Показать

В общем машину (64-х битную) я уже собрал, но хотелось бы решить несколько проблем:
- это настройка консоли когда машина без графической оболочки (это больше к тем кто разбирается с Linux-системами). Сама виртуальная машина запускается в терминале родной машины, и виртуальная консоль получается 80х25 (на видео видно), возможно ли увеличить размер этой консоли? Хотя бы раза в два.
- и второе, это я хочу запустить графическую оболочку используя "-M virt". В документации Qemu сказано что это возможно, настроив конфигурацию...

Linux guest kernel configuration
The ‘defconfig’ for Linux arm and arm64 kernels should include the right device drivers for virtio and the PCI controller; however some older kernel versions, especially for 32-bit Arm, did not have everything enabled by default. If you’re not seeing PCI devices that you expect, then check that your guest config has:

CONFIG_PCI=y
CONFIG_VIRTIO_PCI=y
CONFIG_PCI_HOST_GENERIC=y
If you want to use the virtio-gpu-pci graphics device you will also need:

CONFIG_DRM=y
CONFIG_DRM_VIRTIO_GPU=y

> Я это и не понял, какую конфигурацию я должен настроить? Конфигурацию виртуальной машины? Конфигурацию Qemu? Какую-то установочную конфигурацию (когда создаю эмулируемую машину)?
> В какой момент я должен её настроить? В начале установки? После того как я установил виртуальную машину?

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


#1
8:14, 20 сен 2021

Mirrel

> возможно ли увеличить размер этой консоли?
Параметр ядра vga.

> не понял, какую конфигурацию я должен настроить?
Очевидно, конфигурацию собираемого ядра. Если ты загрузился, то конфиг обычно можно глянуть в файле (кажется) /proc/config.gz, просто zcat'ом. Опять же, если ядро собрано с опцией, которая создаёт там сжатый конфиг.

#2
(Правка: 12:18) 12:18, 20 сен 2021

Ghost2
> Параметр ядра vga.
на ARM архитектуре (по крайней мере в Qemu точно) нет как такового VGA. Они ведут работу через порты вывода (я не до конца разобрался).

Есть какая-то определённая конфигурация настраиваемая? Где должно это меняться или задаваться по умолчанию?

> Если ты загрузился, то конфиг обычно можно глянуть в файле (кажется)
> /proc/config.gz, просто zcat'ом.
гляну.
Но пока разбираюсь, у меня ощущение, что в данном случае, я должен собрать ядро Linux с данными параметрами, ещё до создания самой машины.

#3
(Правка: 17:17) 17:13, 30 сен 2021

Привет! В общем повозился со всем, но оказывается последний Debian и Qemu дружат довольно неплохо друг с другом. Итак начнём (кому интересно), постараюсь доступно изложить процесс.

Будем создавать графическую машину ARM/ARM64. Основываться будем на том, что уже сделали до меня.
Сайт: эмуляция Debian 9 ARM, человек уже делал несколько рабочих машин на основе ARM как 32-х битных, так и 64-х битных, а так же Raspberry.

Требования к вашему компьютеру:

+ Показать

Внимание! Я использую Linux, если вы используете Windows, то вам надо будет создавать не sh-файл, а bat-файл. В файле прописать путь до qemu-system-aarch64.exe или положить этот файл в папку с исполняемым файлом.

Для того чтоб понять принцип работы эмуляции, нужно изучить и Qemu и принципы работы Linux, а так же принципы работы ядра Linux. Но это не обязательно, надеюсь просто повторив действия которые я совершил, вы установите себе машину ARM с графическим окружением.

Но будем основываться на сайте, что я написал выше. Произведём изменения соответственно произошедших изменений на данный момент. И будем использовать Debian 11 (изначально брался Debian 9). Debian 11 уже имеет нужные настройки ядра для эмулирования графического интерфейса.

Создаётся эмулируемая машина в два этапа: 1-й, создание и установка; 2-й собственно запуск и использование.

Изначально создаём папку для эмулируемой машины, допустим deb11_inst и рядом папку для запуска этой машины deb11_start (в видео ниже показано как всё у меня выглядело).
Запускаем терминал (в Windows - командную строку) и заходим в только что созданный каталог
deb11_inst (в Linux я использую mc, подобие norton commander, это привычка работы с DOS).

В терминале получаем файлы установщика для Debian 11 (заменяем "stretch" на "bullseye"):
"wget -O installer-linux http://http.us.debian.org/debian/dists/bullseye/" + "main/installer-arm64/current/images/netboot/debian-installer/arm64/linux"
"wget -O installer-initrd.gz http://http.us.debian.org/debian/dists/bullseye/" + "main/installer-arm64/current/images/netboot/debian-installer/arm64/initrd.gz"

твою дивизию, как сюда выложить полную строку, чтоб ссылка точками не разрывалась?

то что в кавычках и через знак "+" - соединить в одну строку и вставить в терминал.

получим два файла: installer-linux, installer-initrd.gz

дальше создаём диск для установки на него системы:

qemu-img create -f raw hda.img 20G

обращаем внимание, я создаю файл формата IMG, в дальнейшем нам понадобится именно этот формат. И можно (а возможно и нужно!) создать диск большего размера (20G - 20 гигабайт).

создаём файл instDebARM64.sh (для Windows instDebARM64.bat и не прописываем "#!/bin/bash") и прописываем в него следующие установки (не забудьте, я использую Linux, для Windows прописываем qemu-system-aarch64.exe и путь):

#!/bin/bash

qemu-system-aarch64 -M virt -m 2G -cpu cortex-a53 -smp 2 \
  -kernel installer-linux \
  -initrd installer-initrd.gz \
  -drive if=none,file=hda.img,format=raw,id=hd \
  -device virtio-blk-pci,drive=hd \
  -netdev user,id=mynet \
  -device virtio-net-pci,netdev=mynet \
  -display gtk,gl=on \
  -device virtio-gpu-pci \
  -no-reboot \
  -device qemu-xhci -device usb-kbd -device usb-tablet

я подбирал параметры, потому вы можете постараться сделать эмулируемую машину сами со своими параметрами, но насколько это будет работоспособно, я не знаю, будут возникать вопросы, задавайте. Постараемся решить вместе вашу проблему. Для более полного понимания параметров, вам всё же стоит изучить Qemu и документацию к нему.

Сохраняем файл instDebARM64.sh и делаем его запускаемым. Из терминала запускаем его. Терпение!!! ))) Вероятно надо подождать несколько секунд, и в запустившемся окне Qemu запустится инсталлятор Debian.

Начинается обычная установка Debian. Быстро пробежимся, чтоб не совершить ошибок.
На первом экране вы выбираете нужный вам язык (первый рисунок).

+ Показать

!!!А вот на втором экране, вы не должны выбирать пункт "other"!!! (второй рисунок) Этот пункт вы можете выбрать только в том случае, если точно знаете на каком сервере может находиться установочный диск для Debian-ARM. Потому выбирайте любой другой например United States (я, на всякий случай, и репозиторий их выставлял, это запрашивается позже).

+ Показать

Дальнейшая установка будет стандартной, если вы уже устанавливали Linux или просто неплохо знаете английский. )))

Ближе к окончанию установки мы получим окно, в котором надо будет просто нажать "continue" (третий рисунок). С этим мы разберёмся в дальнейшем, точнее обойдём эту ошибку.

+ Показать

Debian установлен.
Переносим наш hda.img - файл с установленным Debian в папку deb11_start и создаём файл debARM64.sh и можем в него просто скопировать всё из нашего прошлого запускаемого файла instDebARM64.sh. Чуть позже мы его подредактируем.

Не забываем, в терминале мы так же должны переместиться в данную папку deb11_start.

извиняюсь, дальше описание действий только для Linux. В Windows  я не проверял открытие этих дисков, учитывая, что установленные файловые системы ext2 и ext4... Тут вам прийдётся самим пободаться или воспользоваться ссылкой в начале этого поста, если она поможет извлечь данные.

В обычной вкладке щёлкаем правой клавишей на нашем созданном диске и выбираем (смотрим видео):

открыть с помощью -> Монтирование дискового образа

У нас откроются примонтируются три диска. Нас интересует диск с установленным ядром, там лежат файлы initrd.img-xxxxxxx-arm64 и vmlinuz-xxxxxxx-arm64 (версии их должны быть одинаковы!).

+ Показать

Копируем эти два файла в папку deb11_start и изменяем содержимое файла debARM64.sh согласно этих полученных файлов. Для меня:

#!/bin/bash

qemu-system-aarch64 -M virt -m 3G -cpu cortex-a53 -smp 2 \
  -kernel vmlinuz-5.10.0-8-arm64 \
  -initrd initrd.img-5.10.0-8-arm64 \
  -append 'root=/dev/vda2' \
  -drive if=none,file=hda.img,format=raw,id=hd \
  -device virtio-blk-pci,drive=hd \
  -netdev user,id=mynet \
  -device virtio-net-pci,netdev=mynet \
  -display gtk,gl=on \
  -device virtio-gpu \
  -no-reboot \
  -device qemu-xhci -device usb-kbd -device usb-tablet

Я указал новые ядро и initrd, так же указал место загрузки "-append 'root=/dev/vda2'". Ну и увеличил немного памяти для своей эмулируемой машины.
Запускаем и проверяем. У меня заработало графическое окружение. Так же я успел проверить работоспособность ZenGL, довольно неплохо работает, даже на медленной машине. )))
Не подключен звук, да и вообще можно to` подключить различные устройства к VM.

  • clc
  • Постоялец
#4
15:33, 1 окт 2021

respect и уважуха