Другое

ARM Android VM на ARM сервере Ubuntu: полное руководство

Полное руководство по созданию виртуальной машины ARM Android на ARM сервере Ubuntu. Узнайте, как работать с system.img и vbmeta.img, настройте QEMU и запустите Android 11 VM.

Как создать виртуальную машину с ARM Android на ARM сервере под Ubuntu?

У меня есть ARM сервер с установленной Ubuntu, и мне необходимо запустить на нем виртуальную машину с ARM Android, предпочтительно версии 11 (API 30). Основная сложность заключается в поиске подходящего образа системы.

В отличие от образов GNU/Linux или Windows, которые распространяются в виде ISO-файлов, Android не имеет стандартного ISO-образа. Я нашел только x86-образы Android в интернете, но они не подходят для моей ARM-архитектуры. На официальном сайте Google я скачал AOSP ARM 64 Android 11, который представляет собой ZIP-архив, содержащий только два файла: system.img и vbmeta.img.

Мне нужно понять:

  1. Какие именно файлы мне необходимо скачать для создания ARM Android VM на ARM сервере?
  2. Как правильно работать с файлами system.img и vbmeta.img?
  3. Почему Android-образы структурированы иначе, чем традиционные операционные системы?

Для создания виртуальной машины с ARM Android на ARM сервере под Ubuntu вам потребуется использовать QEMU с правильными параметрами и специальными файлами образа Android. Android действительно имеет уникальную структуру образов, отличающуюся от традиционных операционных систем.


Содержание


Необходимые файлы для ARM Android VM

Для запуска ARM Android виртуальной машины на ARM сервере вам потребуются следующие файлы:

  1. system.img - основной образ системы Android, который вы уже скачали из AOSP
  2. vbmeta.img - образ метаданных для верифицированной загрузки Android
  3. Загрузчик (boot.img) - для Android 11 обычно требуется отдельный загрузчик
  4. Дополнительные файлы - в зависимости от конфигурации могут потребоваться vendor.img, userdata.img

Важно: Стандартный qemu-system-aarch64 не поддерживает Android “из коробки” - требуется специальная конфигурация. Как отмечено в исследованиях, upstream qemu-arm doesn’t support running Android.

Для Android 11 (API 30) из AOSP вам следует проверить наличие следующих файлов в сборке:

  • boot.img или init_boot.img
  • system.img (у вас уже есть)
  • vbmeta.img (у вас уже есть)
  • vendor_boot.img
  • userdata.img (для хранения пользовательских данных)

Работа с system.img и vbmeta.img

Файлы system.img и vbmeta.img используются совместно и имеют специальные требования:

system.img

  • Это основной образ файловой системы Android
  • Обычно использует формат sparse или ext4
  • Может быть зашифрован в зависимости от конфигурации сборки
  • Требует правильной монтировки в QEMU через virtio-blk-device

vbmeta.img

  • Содержит метаданные для верифицированной загрузки Android
  • Используется для проверки целостности system.img
  • Требует специальной обработки в QEMU
  • Обычно монтируется через pflash устройство

Согласно документации Ubuntu, для работы с ARM образами в QEMU требуется использовать параметры:

bash
qemu-system-aarch64 -M virt -cpu host -m 1024 \
-drive if=pflash,format=raw,file=efi.img,readonly=on \
-drive if=pflash,format=raw,file=varstore.img \
-drive if=none,file=system.img,id=hd0 \
-device virtio-blk-device,drive=hd0

Особенности структуры Android образов

Android образы структурированы иначе, чем традиционные операционные системы, по нескольким причинам:

1. Верифицированная загрузка (Verified Boot)

Android использует систему верифицированной загрузки для обеспечения безопасности:

  • vbmeta.img содержит подписи и хеши для проверки целостности
  • Проверка выполняется на этапе загрузки
  • Это отличает Android от традиционных ОС, где такая система не используется

2. Разделенная структура

Android разбит на несколько образов:

  • system.img - основной код системы
  • vendor.img - проприетарные драйверы и компоненты
  • boot.img - загрузчик и ядро
  • userdata.img - пользовательские данные

3. Специальные форматы

  • Android использует sparse образы для экономии места
  • Формат отличается от стандартных ISO или raw образов
  • Требует специального драйвера в QEMU

Как объясняет Collabora, Virglrenderer creates a virtual 3D GPU, that allows the Qemu guest to use the graphics capabilities of the host machine.


Пошаговая настройка виртуальной машины

Шаг 1: Установка необходимых пакетов

bash
sudo apt update
sudo apt install qemu-system-arm qemu-utils qemu-system-aarch64

Шаг 2: Подготовка конфигурации QEMU

Создайте скрипт запуска с следующими параметрами:

bash
#!/bin/bash
sudo qemu-system-aarch64 \
  -M virt,gic-version=max \
  -cpu host \
  -m 2048 \
  -smp 2 \
  -nographic \
  -pflash /usr/share/AAVMF/AAVMF_CODE.fd \
  -pflash /usr/share/AAVMF/AAVMF_VARS.fd \
  -drive if=none,file=system.img,id=systemdisk \
  -device virtio-blk-device,drive=systemdisk \
  -drive if=none,file=vbmeta.img,id=vbmetadisk \
  -device virtio-blk-device,drive=vbmetadisk \
  -netdev user,id=net0 \
  -device virtio-net-device,netdev=net0

Шаг 3: Настройка сети

Добавьте перенаправление портов для ADB:

bash
-netdev user,id=net0,hostfwd=tcp::5555-:5555

Шаг 4: Запуск виртуальной машины

bash
chmod +x android_vm.sh
sudo ./android_vm.sh

Шаг 5: Подключение через ADB

После загрузки системы можно подключиться через ADB:

bash
adb connect localhost:5555

Альтернативные решения и проблемы

Проблемы с запуском Android на QEMU

  1. Отсутствие поддержки - стандартный QEMU не поддерживает Android из коробки
  2. Верифицированная загрузка - требует специальной конфигурации
  3. Графика - может требовать дополнительные настройки GPU

Альтернативные подходы

  1. Использование Cuttlefish - официальный эмулятор Android для разработки
  2. Android-x86 - но это x86 архитектура, не подходит для ARM
  3. Порт AOSP для QEMU - требует компиляции специальных компонентов

Как отмечено в документации ARM-Datacenter, для запуска ARM VM с нуля требуется множество параметров конфигурации: qemu-system-aarch64 -nographic -machine virt,gic-version=max -m 512M -cpu max -smp 4


Источники

  1. Emulating ARM with QEMU on Debian/Ubuntu · GitHub
  2. Boot ARM64 virtual machines on QEMU | Ubuntu
  3. How to run Android 13+ (aosp-arm64) on QEMU without Cuttlefish? - Stack Overflow
  4. Building Android for Qemu: A Step-by-Step Guide - Collabora
  5. How to launch ARM aarch64 VM with QEMU from scratch. - ARM-Datacenter
  6. Run Android app in qemu-arm? - Stack Overflow
  7. How to virtualize Android with QEMU/KVM – Clouding.io

Заключение

  1. Для ARM Android VM на ARM сервере используйте qemu-system-aarch64 с параметром -M virt
  2. Файлы system.img и vbmeta.img являются основой Android образа и требуют специальной обработки в QEMU
  3. Android образы структурированы иначе из-за верифицированной загрузки и разделенной архитектуры
  4. Наиболее надежный способ - использовать официальные инструменты Android development или Cuttlefish эмулятор
  5. Если возникают проблемы с загрузкой, проверьте наличие всех необходимых образов (boot.img, vendor.img) и правильность параметров QEMU

Для профессионального использования рекомендуется изучить документацию по Android emulator и Cuttlefish, которые обеспечивают лучшую совместимость и производительность.

Авторы
Проверено модерацией
Модерация