1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/openeuler-stratovirt

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
boot.ch.md 14 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 4 месяцев назад 123faeb

Запуск StratoVirt

StratoVirt предоставляет два типа виртуальных машин: облегчённые и стандартные. Процесс запуска для обоих типов описан ниже.

Предварительные настройки параметров

arch=`uname -m`
if [ ${arch} = "x86_64" ]; then
    con=ttyS0
    machine="q35"
elif [ ${arch} = "aarch64" ]; then
    con=ttyAMA0
    machine="virt"
else
    echo "${arch} architecture not supported."
    exit 1
fi

Процесс запуска облегчённой виртуальной машины

1. Создание образа ядра

Облегчённая виртуальная машина StratoVirt поддерживает на платформе x86_64 образы ядра в формате PE или bzImage, а на платформе aarch64 — только в формате PE. Для создания образа ядра выполните следующие шаги:

  1. Сначала получите исходный код ядра openEuler:

    $ git clone -b kernel-5.10 --depth=1 https://gitee.com/openeuler/kernel
    $ cd kernel

    При использовании версии openEuler 21.03 вы также можете получить исходный код с помощью yum-источника:

    $ sudo yum install kernel-source
    $ cd /usr/src/linux-5.10.0-0.0.0.7.oe1.$(uname -m)/
  2. Настройте информацию о ядре Linux. Вы можете использовать предоставленный файл конфигурации облегчённой виртуальной машины (в папке ./kernel_config/micro_vm) и переименовать его в .config, а затем скопировать в папку kernel. Также можно изменить параметры компиляции ядра с помощью команды:

    $ make menuconfig
  3. Создайте и преобразуйте образ ядра в формат PE:

    $ make -j$(nproc) vmlinux && objcopy -O binary vmlinux vmlinux.bin
  4. Если вы хотите скомпилировать образ ядра bzImage на платформе x86_64, используйте команду:

    $ make -j$(nproc) bzImage

2. Создание образа rootfs

Образ rootfs — это образ файловой системы. Во время запуска StratoVirt можно смонтировать образ EXT4 с /sbin/init. Подробнее см. в приложении.

3. Пример команды запуска

/usr/bin/stratovirt \
    -machine microvm \
    -kernel /path/to/kernel \
    -smp 1 \
    -m 1024m \
    -append "console=${con} pci=off reboot=k quiet panic=1 root=/dev/vda" \
    -drive file=/path/to/rootfs,id=rootfs,readonly=off,direct=off \
    -device virtio-blk-device,drive=rootfs,id=rootfs \
    -qmp unix:/path/to/socket,server,nowait \
    -serial stdio

Процесс запуска стандартной виртуальной машины

Существует два способа запуска стандартных виртуальных машин: с использованием ядра и образа rootfs или с использованием предварительно установленного образа гостевой операционной системы в формате raw.

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

1. Получение стандартного загрузочного ПО

Для запуска стандартных виртуальных машин требуется загрузочное программное обеспечение. StratoVirt поддерживается только на платформах x86_64 и aarch64 через UEFI (унифицированный расширяемый интерфейс встроенного ПО).

EDK2 — это проект с открытым исходным кодом, который реализует стандарт UEFI. Мы используем EDK2 для запуска виртуальных машин, поэтому нам нужно получить соответствующий двоичный файл EDK2.

Есть два способа получить двоичный файл EDK2: установить его напрямую или скомпилировать из исходного кода. Обратите внимание, что двоичный файл EDK2 содержит два файла: один для хранения исполняемого кода, другой — для хранения данных инициализации.

1.1 Прямая установка EDK2

На платформе x86_64 выполните команду:

$ sudo yum install -y edk2-ovmf

На платформе aarch64 выполните команду:

$ sudo yum install -y edk2-aarch64

После установки EDK2 на платформе x86_64 файлы OVMF_CODE.fd и OVMF_VARS.fd будут находиться в каталоге /usr/share/edk2/ovmf. На платформе aarch64 файлы QEMU_EFI-pflash.raw и vars-template-pflash.raw будут находиться в каталоге /usr/share/edk2/aarch64.

1.2 Компиляция из исходного кода

# Установите необходимые зависимости для компиляции edk2.
yum install git nasm acpica-tools -y

# Клонируйте исходный код edk2.
git clone https://github.com/tianocore/edk2.git
cd edk2
git checkout edk2-stable202102
git submodule update --init

# Скомпилируйте edk2 и получите файлы для запуска StratoVirt.
arch=`uname -m`
if [ ${arch} = "x86_64" ]; then
    echo "ACTIVE_PLATFORM = OvmfPkg/OvmfPkgX64.dsc" >> Conf/target.txt
    echo "TARGET_ARCH = X64" >> Conf/target.txt
elif [ ${arch} = "aarch64" ]; then
    echo "ACTIVE_PLATFORM = ArmVirtPkg/ArmVirtQemu.dsc" >> Conf/target.txt
    echo "TARGET_ARCH = AARCH64" >> Conf/target.txt
else
    echo "${arch} architecture not supported."
    exit 1
fi

echo "TOOL_CHAIN_TAG = GCC5" >> Conf/target.txt
echo "BUILD_RULE_CONF = Conf/build_rule.txt" >> Conf/target.txt
echo "TARGET = RELEASE" >> Conf/target.txt

make -C BaseTools
. ./edksetup.sh
build


if [ ${arch} = "x86_64" ]; then
    cp ./Build/OvmfX64/RELEASE_GCC5/FV/OVMF_CODE.fd /home/
    cp ./Build/OvmfX64/RELEASE_GCC5/FV/OVMF_VARS.fd /home/
elif [ ${arch} = "aarch64" ]; then
    dd if=/dev/zero of=/home/STRATOVIRT_EFI.raw bs=1M count=64
    dd of=/home/STRATOVIRT_EFI.raw if=./Build/ArmVirtQemu-AARCH64/RELEASE_GCC5/FV/QEMU_EFI.fd conv=notrunc
    dd if=/dev/zero of=/home/STRATOVIRT_VAR.raw bs=1M count=64
fi

После компиляции EDK2 файлы OVMF_CODE.fd и OVMF_VARS.fd на платформе x84_64 будут находиться в каталоге /home. Файлы STRATOVIRT_EFI.raw и STRATOVIRT_VAR.raw на платформе aarch64 будут также находиться в каталоге /home.

2. Запуск стандартной виртуальной машины с использованием ядра + образа rootfs

2.1 Создание образа ядра

Стандартная виртуальная машина StratoVirt может использовать ядро в формате bzImage для платформы x86_64 или в формате PE для платформ x86_64 и aarch64. Создание образа ядра выполняется следующим образом:

  1. Получите исходный код openEuler:

    $ git clone -b kernel-5.10 --depth=1 https://gitee.com/openeuler/kernel
    $ cd kernel
  2. Настройте параметры ядра Linux. Можно использовать предоставленный файл конфигурации стандартной виртуальной машины (./kernel_config/standard_vm), переименовать его в .config и скопировать в каталог kernel. Или же можно изменить параметры компиляции с помощью команды:

    $ make menuconfig
  3. Скомпилируйте ядро:

    #
    

Примечание: В тексте запроса присутствуют фрагменты кода на языке программирования Shell, но они не были включены в ответ. В запросе текст на английском языке.

  1. На платформе aarch64 преобразуйте образ ядра в формат PE: makej(nproc) vmlinux && objcopy -O binary vmlinux vmlinux.bin

  2. На платформе x86_64 преобразуйте образ ядра в формат bzImage: makej(nproc) bzImage

  3. Кроме ручного способа сборки образа ядра, можно напрямую загрузить соответствующее ядро с официального сайта OpenEuler.

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

  5. Чтобы запустить стандартную виртуальную машину с использованием образа в формате raw, выполните следующие шаги:

    • Загрузите готовый образ qcow2 с официального сайта OpenEuler и преобразуйте его в формат raw с помощью команды qemu-img. Пример команды для преобразования образа формата qcow2 в образ формата raw:
      $ xz -d openEuler-21.03-x86_64.qcow2.xz
      $ qemu-img convert -f qcow2 -O raw openEuler-21.03-x86_64.qcow2 openEuler-21.03-x86_64.raw
  6. Чтобы запустить стандартную виртуальную машину, используйте режим прямого запуска ядра (direct kernel boot). Этот режим позволяет виртуальной машине пропустить этап UEFI и сразу перейти к запуску ядра. Это ускоряет процесс запуска. Команда для запуска виртуальной машины в режиме direct kernel boot:

    /usr/bin/stratovirt \
        -machine virt \
        -kernel /path/to/kernel \
        -smp 1 \
        -m 2G \
        -append "console=${con} reboot=k panic=1 root=/dev/vda rw" \
        -drive file=/path/to/rootfs,id=rootfs,readonly=off,direct=off \
        -device virtio-blk-pci,drive=rootfs,id=blk1,bus=pcie.0,addr=0x2 \
        qmp unix:/path/to/socket,server,nowait \
        -serial stdio

    Обратите внимание, что в настоящее время режим direct kernel boot поддерживается только для архитектур ARM.

  7. Для запуска стандартной виртуальной машины необходимы два устройства PFlash. Они будут использовать два файла микропрограммы из EDK2. Если вам не нужно сохранять информацию о запуске, вы можете пропустить файл данных с номером единицы 1. Однако файл кода с номером единицы 0 является обязательным.

  8. Сначала приведите пример команды для запуска с использованием ядра и образа rootfs:

    /usr/bin/stratovirt \
        -machine ${machine} \
        -kernel /path/to/kernel \
        -smp 1 \
        -m 2G \
        -append "console=${con} reboot=k panic=1 root=/dev/vda rw" \
        -drive file=/path/to/rootfs,id=rootfs,readonly=off,direct=off \
        -device virtio-blk-pci,drive=rootfs,id=blk1,bus=pcie.0,addr=0x2 \
        -drive file=/path/to/OVMF_CODE.fd,if=pflash,unit=0,readonly=true \
        -drive file=/path/to/OVMF_VARS.fd,if=pflash,unit=1 \
        qmp unix:/path/to/socket,server,nowait \
        -serial stdio
  9. Затем приведите пример команды для запуска с использованием образа raw:

    /usr/bin/stratovirt \
        -machine ${machine} \
        -smp 1 \
        -m 2G \
        -drive file=/path/to/raw_image,id=raw_image,readonly=off,direct=off \
        -device virtio-blk-pci,drive=raw_image,id=blk1,bus=pcie.0,addr=0x2 \
        -drive file=/path/to/OVMF_CODE.fd,if=pflash,unit=0,readonly=true \
        -drive file=/path/to/OVMF_VARS.fd,if=pflash,unit=1 \
        qmp unix:/path/to/socket,server,nowait \
        -serial stdio
  10. В приложении описан метод создания образа EXT4 rootfs с использованием dd и mkfs.ext4.

Обратите внимание, что это перевод текста, который может содержать неточности или ошибки.

Комментарий ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/openeuler-stratovirt.git
git@gitlife.ru:oschina-mirror/openeuler-stratovirt.git
oschina-mirror
openeuler-stratovirt
openeuler-stratovirt
master