Loading [MathJax]/jax/output/HTML-CSS/jax.js
1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/openeuler-stratovirt

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

AARCH64" >> Conf/target.txt

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="x8664"];thencp./Build/OvmfX64/RELEASEGCC5/FV/OVMFCODE.fd/home/cp./Build/OvmfX64/RELEASEGCC5/FV/OVMFVARS.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, на платформе x86_64 файлы OVMF_CODE.fd и OVMF_VARS.fd находятся в каталоге /home. На платформе aarch64 файлы STRATOVIRT_EFI.raw и STRATOVIRT_VAR.raw также находятся в каталоге /home.

2. Загрузка с ядром и корневой файловой системой

2.1 Сборка ядра

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

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

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

  3. Соберите образ ядра:

    # На платформе aarch64 преобразуйте образ ядра в формат PE.
    $ make -j$(nproc) vmlinux && objcopy -O binary vmlinux vmlinux.bin
    
    # На платформе x86_64 получите образ формата bzImage.
    $ make -j$(nproc) bzImage

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

2.2 Сборка корневой файловой системы

Сборка корневой файловой системы для стандартной виртуальной машины выполняется так же, как и для microvm. Более подробную информацию см. в Приложении.

3. Загрузка с необработанным образом

3.1 Получение необработанного образа

Вы можете скачать установленный образ qcow2 с официального веб-сайта OpenEuler. После загрузки файла выполните команду qemu-img для преобразования файла. Далее, возьмём образ qcow2 openeuler-21.03 в качестве примера и приведём конкретные команды:

$ 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

Теперь доступный необработанный образ получен.

4. Прямая загрузка с ядра

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

Выполните следующие команды, чтобы напрямую загрузить виртуальную машину с ядра:

/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

Примечание: этот режим в настоящее время поддерживает только архитектуру arm.

5. Пример загрузки командной строки

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

Выполните следующие команды для загрузки с ядром и корневой файловой системой:

/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 Команда для загрузки с необработанным образом следующая:

```shell
/usr/bin/stratovirt \
    -machine ${machine} \
    -smp 1 \
    -m 2G \
    -drive файл=/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 файл=/path/to/OVMF_CODE.fd,if=pflash,unit=0,readonly=true \
    -drive файл=/path/to/OVMF_VARS.fd,if=pflash,unit=1 \
    -qmp unix:/path/to/socket,server,nowait \
    -serial stdio

Приложение

Ниже представлен простой способ создания образа корневой файловой системы EXT4:

  1. Подготовьте файл нужного размера (например, 1 ГБ):

    $ dd if=/dev/zero of=./rootfs.ext4 bs=1G count=20
  2. Создайте пустую файловую систему EXT4 на этом файле:

    $ mkfs.ext4 ./rootfs.ext4
  3. Смонтируйте образ файла:

    $ mkdir -p /mnt/rootfs
    $ sudo mount ./rootfs.ext4 /mnt/rootfs && cd /mnt/rootfs
  4. Получите последнюю версию alpine-minirootfs (http://dl-cdn.alpinelinux.org/alpine):

    $ arch=`uname -m`
    $ wget http://dl-cdn.alpinelinux.org/alpine/v3.13/releases/$arch/alpine-minirootfs-3.13.0-$arch.tar.gz -O alpine-minirootfs.tar.gz
    $ tar -zxvf alpine-minirootfs.tar.gz
    $ rm alpine-minirootfs.tar.gz

    Создайте простой /sbin/init для образа файла EXT4.

    $ rm sbin/init && touch sbin/init && cat > sbin/init <<EOF
    #! /bin/sh
    mount -t devtmpfs dev /dev
    mount -t proc proc /proc
    mount -t sysfs sysfs /sys
    ip link set up dev lo
    
    exec /sbin/getty -n -l /bin/sh 115200 /dev/ttyS0
    poweroff -f
    EOF
    
    $ sudo chmod +x sbin/init

    Примечание: alpine — это пример. Вы можете использовать любую открытую корневую файловую систему с init/systemd в качестве образа корневой файловой системы.

  5. Размонтируйте образ корневой файловой системы:

    $ cd ~ && umount /mnt/rootfs

Ссылки

Комментарий ( 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