当前virtCCA仅支持Kernel+rootfs分离方式启动,云上场景下,虚机的启动主要采用grub boot的方式(需要将edk2+Kernel挂载到同一个qcow镜像中),通过这种方式满足客户的使用方式。
brctl addbr virbr0
#!/bin/sh set -x switch=virbr0 if [ -n "$1" ];then ip tuntap add $1 mode tap user `whoami` ip link set $1 up sleep 1s ip link set $1 master $switch exit 0 else echo "Error: no interface specified" exit 1 fi
#!/bin/sh MAC_ADDR_0=DE:AD:BE:EF:FA:28 function launch_uefi() { cd /home/uefi/qemu/build taskset -c 0 ./qemu-system-aarch64 \ -M virt,usb=off,gic-version=host,accel=kvm,kvm-type=cvm \ --enable-kvm \ -bios /home/uefi/QEMU_EFI.fd \ -cpu host \ -m 2048 \ -smp 1 \ -no-user-config \ -nographic \ --no-reboot \ -object tmm-guest,id=tmm0,num-pmu-counters=1 \ -drive if=none,file=/home/uefi/openEuler-24.03-SP1-aarch64.qcow2,format=qcow2,id=disk01 \ -device virtio-blk-pci-non-transitional,drive=disk01,num-queues=1,bootindex=1,iommu_platform=on \ -netdev tap,id=vnet,ifname=tap0,script=/home/uefi/qemu-ifup,queues=2 \ -device virtio-net-pci-non-transitional,netdev=vnet,iommu_platform=on } function launch_uefi_normal() { cd /home/uefi/qemu/build ./qemu-system-aarch64 \ -M virt,usb=off,gic-version=host,accel=kvm \ --enable-kvm \ -bios /home/uefi/QEMU_EFI.fd \ -cpu host \ -m 2048 \ -smp 1\ -no-user-config \ -nographic \ --no-reboot \ -drive if=none,file=/home/uefi/openEuler-24.03-SP1-aarch64.qcow2,format=qcow2,id=disk01 \ -device virtio-blk-pci-non-transitional,drive=disk01,num-queues=1,bootindex=1 \ -netdev tap,id=vnet,ifname=tap0,script=/home/uefi/qemu-ifup,queues=2 \ -device virtio-net-pci,netdev=vnet,mac=${MAC_ADDR_0} } if [ "$1" == "u" ] then launch_uefi fi # Launch cVM to test KATA if [ "$1" == "nu" ] then launch_uefi_normal fi
<domain type='kvm' xmlns:qemu="http://libvirt.org/schemas/domain/qemu/1.0"> <name>cvm-uefi</name> <memory unit='GiB'>8</memory> <vcpu placement='static'>4</vcpu> <cputune> <vcpupin vcpu='0' cpuset='0'/> <vcpupin vcpu='1' cpuset='1'/> <vcpupin vcpu='2' cpuset='2'/> <vcpupin vcpu='3' cpuset='3'/> <emulatorpin cpuset='0-3'/> </cputune> <numatune> <memnode cellid='0' mode='strict' nodeset='0'/> </numatune> <os> <type arch='aarch64' machine='virt'>hvm</type> <loader readonly='yes' type='rom'>/home/uefi/QEMU_EFI.fd</loader> <boot dev='hd'/> </os> <features> <acpi/> <gic version='3'/> </features> <cpu mode='host-passthrough'> <topology sockets='1' dies='1' clusters='1' cores='4' threads='1'/> <numa> <cell id='0' cpus='0-3' memory='8' unit='GiB'/> </numa> </cpu> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> <devices> <emulator>/home/uefi/qemu/build/qemu-system-aarch64</emulator> <console type='pty'/> <disk type='file' device='disk' model='virtio-non-transitional'> <driver name='qemu' type='qcow2' queues='2' cache='none' iommu='on'/> <source file='/home/uefi/openEuler-24.03-SP1-aarch64.qcow2'/> <target dev='vda' bus='virtio'/> </disk> <interface type='bridge'> <source bridge='virbr0'/> <driver iommu='on'/> <model type='virtio-non-transitional'/> </interface> </devices> <launchSecurity type='cvm'/> <qemu:commandline> <qemu:arg value='-object'/> <qemu:arg value='tmm-guest,id=tmm0,num-pmu-counters=1'/> </qemu:commandline> </domain>