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.
Стандартная машина в StratoVirt поддерживает формат образа ядра bzImage на платформе x86_64 и формат PE на платформе aarch64. Образ ядра можно собрать следующим образом:
Сначала получите исходный код ядра openEuler с помощью команды:
$ git clone -b kernel-5.10 --depth=1 https://gitee.com/openeuler/kernel
$ cd kernel
Настройте ядро Linux. Вы должны использовать рекомендованную конфигурацию standard_vm (./kernel_config/standard_vm) и скопировать её в путь ядра как .config.
Соберите образ ядра:
# На платформе aarch64 преобразуйте образ ядра в формат PE.
$ make -j$(nproc) vmlinux && objcopy -O binary vmlinux vmlinux.bin
# На платформе x86_64 получите образ формата bzImage.
$ make -j$(nproc) bzImage
Кроме ручной сборки образа ядра, вы также можете загрузить образ с официального сайта OpenEuler.
Сборка корневой файловой системы для стандартной виртуальной машины выполняется так же, как и для microvm. Более подробную информацию см. в Приложении.
Вы можете скачать установленный образ 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
Теперь доступный необработанный образ получен.
Можно напрямую загрузиться с ядра. В этом режиме 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.
Обратите внимание, что стандартному устройству требуется два устройства 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 ГБ):
$ dd if=/dev/zero of=./rootfs.ext4 bs=1G count=20
Создайте пустую файловую систему EXT4 на этом файле:
$ mkfs.ext4 ./rootfs.ext4
Смонтируйте образ файла:
$ mkdir -p /mnt/rootfs
$ sudo mount ./rootfs.ext4 /mnt/rootfs && cd /mnt/rootfs
Получите последнюю версию 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 в качестве образа корневой файловой системы.
Размонтируйте образ корневой файловой системы:
$ cd ~ && umount /mnt/rootfs
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарий ( 0 )