若系统环境为openEuler 22.03 LTS Arm系统,可跳过此章节。
yum install spice-server spice-server-devel -y
[root@localhost vm]# yum install spice-server spice-server-devel -y Last metadata expiration check: 0:18:11 ago on Tue 10 Jan 2023 09:51:22 AM CST. Dependencies resolved. ============================================================================================================================================================================================================= Package Architecture Version Repository Size ============================================================================================================================================================================================================= Installing: spice-server x86_64 0.14.3-3.oe2203 everything 364 k spice-server-devel x86_64 0.14.3-3.oe2203 everything 17 k Transaction Summary ============================================================================================================================================================================================================= Install 2 Packages Total download size: 382 k Installed size: 1.2 M Downloading Packages: (1/2): spice-server-devel-0.14.3-3.oe2203.x86_64.rpm 15 kB/s | 17 kB 00:01 (2/2): spice-server-0.14.3-3.oe2203.x86_64.rpm 189 kB/s | 364 kB 00:01 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Total 198 kB/s | 382 kB 00:01 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : spice-server-0.14.3-3.oe2203.x86_64 1/2 Installing : spice-server-devel-0.14.3-3.oe2203.x86_64 2/2 Running scriptlet: spice-server-devel-0.14.3-3.oe2203.x86_64 2/2 Verifying : spice-server-0.14.3-3.oe2203.x86_64 1/2 Verifying : spice-server-devel-0.14.3-3.oe2203.x86_64 2/2 Installed: spice-server-0.14.3-3.oe2203.x86_64 spice-server-devel-0.14.3-3.oe2203.x86_64 Complete! [root@localhost vm]#
apt-get install -y ninja-build gcc pkg-config build-essential zlib1g-dev libglib2.0-dev libmount-dev libpixman-1-dev
root@atlas:~# apt-get install -y ninja-build gcc pkg-config build-essential zlib1g-dev libglib2.0-dev libmount-dev libpixman-1-dev Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: binutils binutils-common binutils-x86-64-linux-gnu cpp cpp-9 dpkg-dev fakeroot g++ g++-9 gcc-10-base gcc-9 gcc-9-base libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan5 libatomic1 libbinutils libblkid-dev libblkid1 libc-dev-bin libc6 libc6-dev libcc1-0 libcrypt-dev libctf-nobfd0 libctf0 libdpkg-perl libfakeroot libffi-dev libfile-fcntllock-perl libgcc-9-dev libgcc-s1 libglib2.0-0 libglib2.0-bin libglib2.0-dev-bin libgomp1 libisl22 libitm1 liblsan0 libmount1 libmpc3 libpcre16-3 libpcre2-16-0 libpcre2-32-0 libpcre2-8-0 libpcre2-dev libpcre2-posix2 libpcre3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libquadmath0 libselinux1-dev libsepol1 libsepol1-dev libstdc++-9-dev libstdc++6 libtsan0 libubsan1 libuuid1 linux-libc-dev make manpages-dev uuid-dev zlib1g Suggested packages: binutils-doc cpp-doc gcc-9-locales debian-keyring g++-multilib g++-9-multilib gcc-9-doc gcc-multilib autoconf automake libtool flex bison gdb gcc-doc gcc-9-multilib glibc-doc bzr libgirepository1.0-dev libglib2.0-doc libstdc++-9-doc make-doc The following NEW packages will be installed:
apt-get install -y libusbredirhost-dev libusbredirhost1 libusbredirparser-dev libusbredirparser1 usbredirserver
root@localhost:/home/qemu-4.1.0# apt-get install -y libusbredirhost-dev libusbredirhost1 libusbredirparser-dev libusbredirparser1 usbredirserver Reading package lists... DoneBuilding dependency treeReading state information... Donelibusbredirhost1 is already the newest version (0.8.0-1ubuntu0.1).libusbredirhost1 set to manually installed.libusbredirparser1 is already the newest version (0.8.0-1ubuntu0.1).libusbredirparser1 set to manually installed.The following NEW packages will be installed: libusbredirhost-dev libusbredirparser-dev usbredirserver0 upgraded, 3 newly installed, 0 to remove and 263 not upgraded.Need to get 30.5 kB of archives.After this operation, 121 kB of additional disk space will be used.Get:1 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libusbredirparser-dev arm64 0.8.0-1ubuntu0.1 [8,164 B]Get:2 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libusbredirhost-dev arm64 0.8.0-1ubuntu0.1 [14.4 kB]Get:3 http://ports.ubuntu.com/ubuntu-ports focal-updates/universe arm64 usbredirserver arm64 0.8.0-1ubuntu0.1 [7,896 B]
apt-get install libspice-server-dev libspice-server1
root@localhost:~# apt-get install libspice-server-dev libspice-server1 Reading package lists... DoneBuilding dependency treeReading state information... Donelibspice-server1 is already the newest version (0.14.2-4ubuntu3.1).libspice-server1 set to manually installed.The following NEW packages will be installed: libspice-protocol-dev libspice-server-dev0 upgraded, 2 newly installed, 0 to remove and 263 not upgraded.Need to get 31.8 kB of archives.After this operation, 198 kB of additional disk space will be used.Get:1 http://ports.ubuntu.com/ubuntu-ports focal/main arm64 libspice-protocol-dev all 0.14.0-0ubuntu1 [21.5 kB]Get:2 http://ports.ubuntu.com/ubuntu-ports focal-updates/main arm64 libspice-server-dev arm64 0.14.2-4ubuntu3.1 [10.3 kB]Fetched 31.8 kB in 8s (3,903 B/s)Selecting previously unselected package libspice-protocol-dev.(Reading database ... 97326 files and directories currently installed.)Preparing to unpack .../libspice-protocol-dev_0.14.0-0ubuntu1_all.deb ...
virsh version
root@atlas:~# virsh version Compiled against library: libvirt 6.0.0 Using library: libvirt 6.0.0 Using API: QEMU 6.0.0 Running hypervisor: QEMU 4.2.1
对于Atlas 200T A2 Box16 异构子框,建议下载5.2.0版本的QEMU源码包。
chmod +x ./qemu-4.1.0.tar.xz
tar -xf ./qemu-4.1.0.tar.xz
cd qemu-4.1.0/
增加如下加粗字体标注的代码并保存:
… #include "hw/nvram/fw_cfg.h" #include "pci.h" #include "trace.h" // ascend-patch begin #define PCI_VENDOR_ID_HUAWEI 0x19e5 #define PCI_DEVICE_ID_ASCEND910 0xd801 #define PCI_DEVICE_ID_ASCEND910B 0xd802 #define PCI_DEVICE_ID_ASCEND310P 0xd500 #define PCI_DEVICE_ID_ASCEND310B 0xd105 #define PCI_DEVICE_ID_ASCEND310 0xd100 #define PCI_SUB_DEVICE_ID_ASCEND310P_1P_MIN 0x100 #define PCI_SUB_DEVICE_ID_ASCEND310P_1P_MAX 0x10f #define PCI_SUB_DEVICE_ID_ASCEND310P_2P_MIN 0x110 #define PCI_SUB_DEVICE_ID_ASCEND310P_2P_MAX 0x11f #define ASCEND910_XLOADER_SIZE 4 #define ASCEND910_XLOADER_OFFSET 0x80400 #define ASCEND910B_XLOADER_SIZE 4 #define ASCEND910B_XLOADER_OFFSET 0x18208430 #define ASCEND310P_2P_BASE (128 * 1024 * 1024) #define ASCEND310P_1P_DEVNUM 1 #define ASCEND310P_2P_DEVNUM 2 #define ASCEND310P_XLOADER_SIZE 4 #define ASCEND310P_XLOADER_OFFSET 0x100430 #define ASCEND310B_XLOADER_SIZE 4 #define ASCEND310B_XLOADER_OFFSET 0x4430 #define ASCEND310_XLOADER_SIZE 4 #define ASCEND310_XLOADER_OFFSET 0x400 typedef struct VFIOAscendBarQuirk { struct VFIOPCIDevice *vdev; pcibus_t offset; uint8_t bar; MemoryRegion *mem; } VFIOAscendBarQuirk; static uint64_t vfio_ascend_quirk_read(void *opaque, hwaddr addr, unsigned size) { VFIOAscendBarQuirk *quirk = opaque; VFIOPCIDevice *vdev = quirk->vdev; qemu_log("read RO region! addr=0x%" HWADDR_PRIx ", size=%d\n", addr + quirk->offset, size); return vfio_region_read(&vdev->bars[quirk->bar].region, addr + quirk->offset, size); } static void vfio_ascend_quirk_write(void *opaque, hwaddr addr, uint64_t data, unsigned size) { VFIOAscendBarQuirk *quirk = opaque; qemu_log("modifying RO region is not allowed! addr=0x%" HWADDR_PRIx ", data=0x%" PRIx64 ", size=%d\n", addr + quirk->offset, data, size); } static const MemoryRegionOps vfio_ascend_intercept_regs_quirk = { .read = vfio_ascend_quirk_read, .write = vfio_ascend_quirk_write, .endianness = DEVICE_LITTLE_ENDIAN, }; static void vfio_probe_ascend910b_bar2_quirk(VFIOPCIDevice *vdev, int nr) { VFIOQuirk *quirk; VFIOAscendBarQuirk *bar2_quirk; if (vdev->vendor_id != PCI_VENDOR_ID_HUAWEI || nr != 2 || vdev->device_id != PCI_DEVICE_ID_ASCEND910B) { return; } quirk = g_malloc0(sizeof(*quirk)); quirk->nr_mem = 1; quirk->mem = g_new0(MemoryRegion, quirk->nr_mem); bar2_quirk = quirk->data = g_new0(typeof(*bar2_quirk), quirk->nr_mem); bar2_quirk[0].vdev = vdev; bar2_quirk[0].offset = ASCEND910B_XLOADER_OFFSET; bar2_quirk[0].bar = nr; /* intercept w/r to the xloader-updating register, * so the vm can't enable xloader-updating */ memory_region_init_io(&quirk->mem[0], OBJECT(vdev), &vfio_ascend_intercept_regs_quirk, &bar2_quirk[0], "vfio-ascend910b-bar2-intercept-regs-quirk", ASCEND910B_XLOADER_SIZE); memory_region_add_subregion_overlap(vdev->bars[nr].region.mem, bar2_quirk[0].offset, &quirk->mem[0], 1); QLIST_INSERT_HEAD(&vdev->bars[nr].quirks, quirk, next); } static void vfio_probe_ascend910_bar0_quirk(VFIOPCIDevice *vdev, int nr) { VFIOQuirk *quirk; VFIOAscendBarQuirk *bar0_quirk; if (vdev->vendor_id != PCI_VENDOR_ID_HUAWEI || nr != 0 || vdev->device_id != PCI_DEVICE_ID_ASCEND910) { return; } quirk = g_malloc0(sizeof(*quirk)); quirk->nr_mem = 1; quirk->mem = g_new0(MemoryRegion, quirk->nr_mem); bar0_quirk = quirk->data = g_new0(typeof(*bar0_quirk), quirk->nr_mem); bar0_quirk[0].vdev = vdev; bar0_quirk[0].offset = ASCEND910_XLOADER_OFFSET; bar0_quirk[0].bar = nr; /* * intercept w/r to the xloader-updating register, * so the vm can't enable xloader-updating */ memory_region_init_io(&quirk->mem[0], OBJECT(vdev), &vfio_ascend_intercept_regs_quirk, &bar0_quirk[0], "vfio-ascend910-bar0-intercept-regs-quirk", ASCEND910_XLOADER_SIZE); memory_region_add_subregion_overlap(vdev->bars[nr].region.mem, bar0_quirk[0].offset, &quirk->mem[0], 1); QLIST_INSERT_HEAD(&vdev->bars[nr].quirks, quirk, next); } static void vfio_probe_ascend310p_bar2_quirk(VFIOPCIDevice *vdev, int nr) { VFIOQuirk *quirk; VFIOAscendBarQuirk *bar2_quirk; int sub_device_id; int devnum = 0; if (vdev->vendor_id != PCI_VENDOR_ID_HUAWEI || nr != 2 || vdev->device_id != PCI_DEVICE_ID_ASCEND310P) { return; } sub_device_id = pci_get_word(vdev->pdev.config + PCI_SUBSYSTEM_ID); if (sub_device_id >= PCI_SUB_DEVICE_ID_ASCEND310P_1P_MIN && sub_device_id <= PCI_SUB_DEVICE_ID_ASCEND310P_1P_MAX) { devnum = ASCEND310P_1P_DEVNUM; } else if (sub_device_id >= PCI_SUB_DEVICE_ID_ASCEND310P_2P_MIN && sub_device_id <= PCI_SUB_DEVICE_ID_ASCEND310P_2P_MAX) { devnum = ASCEND310P_2P_DEVNUM; } if (devnum != ASCEND310P_1P_DEVNUM && devnum != ASCEND310P_2P_DEVNUM) { return; } quirk = g_malloc0(sizeof(*quirk)); quirk->nr_mem = devnum; quirk->mem = g_new0(MemoryRegion, quirk->nr_mem); bar2_quirk = quirk->data = g_new0(typeof(*bar2_quirk), quirk->nr_mem); bar2_quirk[0].vdev = vdev; bar2_quirk[0].offset = ASCEND310P_XLOADER_OFFSET; bar2_quirk[0].bar = nr; /* * intercept w/r to the xloader-updating register, * so the vm can't enable xloader-updating */ memory_region_init_io(&quirk->mem[0], OBJECT(vdev), &vfio_ascend_intercept_regs_quirk, &bar2_quirk[0], "vfio-ascend310p-bar2-1p-intercept-regs-quirk", ASCEND310P_XLOADER_SIZE); memory_region_add_subregion_overlap(vdev->bars[nr].region.mem, bar2_quirk[0].offset, &quirk->mem[0], 1); if (devnum == ASCEND310P_2P_DEVNUM) { bar2_quirk[1].vdev = vdev; bar2_quirk[1].offset = (ASCEND310P_2P_BASE + ASCEND310P_XLOADER_OFFSET); bar2_quirk[1].bar = nr; memory_region_init_io(&quirk->mem[1], OBJECT(vdev), &vfio_ascend_intercept_regs_quirk, &bar2_quirk[1], "vfio-ascend310p-bar2-2p-intercept-regs-quirk", ASCEND310P_XLOADER_SIZE); memory_region_add_subregion_overlap(vdev->bars[nr].region.mem, bar2_quirk[1].offset, &quirk->mem[1], 1); } QLIST_INSERT_HEAD(&vdev->bars[nr].quirks, quirk, next); } static void vfio_probe_ascend310b_bar2_quirk(VFIOPCIDevice *vdev, int nr) { VFIOQuirk *quirk; VFIOAscendBarQuirk *bar2_quirk; if (vdev->vendor_id != PCI_VENDOR_ID_HUAWEI || nr != 2 || vdev->device_id != PCI_DEVICE_ID_ASCEND310B) { return; } quirk = g_malloc0(sizeof(*quirk)); quirk->nr_mem = 1; quirk->mem = g_new0(MemoryRegion, quirk->nr_mem); bar2_quirk = quirk->data = g_new0(typeof(*bar2_quirk), quirk->nr_mem); bar2_quirk[0].vdev = vdev; bar2_quirk[0].offset = ASCEND310B_XLOADER_OFFSET; bar2_quirk[0].bar = nr; /* intercept w/r to the xloader-updating register, * so the vm can't enable xloader-updating */ memory_region_init_io(&quirk->mem[0], OBJECT(vdev), &vfio_ascend_intercept_regs_quirk, &bar2_quirk[0], "vfio-ascend310b-bar2-intercept-regs-quirk", ASCEND310B_XLOADER_SIZE); memory_region_add_subregion_overlap(vdev->bars[nr].region.mem, bar2_quirk[0].offset, &quirk->mem[0], 1); QLIST_INSERT_HEAD(&vdev->bars[nr].quirks, quirk, next); } static void vfio_probe_ascend310_bar4_quirk(VFIOPCIDevice *vdev, int nr) { VFIOQuirk *quirk; VFIOAscendBarQuirk *bar4_quirk; if (vdev->vendor_id != PCI_VENDOR_ID_HUAWEI || nr != 4 || vdev->device_id != PCI_DEVICE_ID_ASCEND310) { return; } quirk = g_malloc0(sizeof(*quirk)); quirk->nr_mem = 1; quirk->mem = g_new0(MemoryRegion, quirk->nr_mem); bar4_quirk = quirk->data = g_new0(typeof(*bar4_quirk), quirk->nr_mem); bar4_quirk[0].vdev = vdev; bar4_quirk[0].offset = ASCEND310_XLOADER_OFFSET; bar4_quirk[0].bar = nr; /* * intercept w/r to the xloader-updating register, * so the vm can't enable xloader-updating */ memory_region_init_io(&quirk->mem[0], OBJECT(vdev), &vfio_ascend_intercept_regs_quirk, &bar4_quirk[0], "vfio-ascend310-bar4-intercept-regs-quirk", ASCEND310_XLOADER_SIZE); memory_region_add_subregion_overlap(vdev->bars[nr].region.mem, bar4_quirk[0].offset, &quirk->mem[0], 1); QLIST_INSERT_HEAD(&vdev->bars[nr].quirks, quirk, next); } // ascend-patch end …
void vfio_bar_quirk_setup(VFIOPCIDevice *vdev, int nr)
{
vfio_probe_ati_bar4_quirk(vdev, nr);
vfio_probe_ati_bar2_quirk(vdev, nr);
vfio_probe_nvidia_bar5_quirk(vdev, nr);
vfio_probe_nvidia_bar0_quirk(vdev, nr);
// ascend-patch begin
vfio_probe_ascend910b_bar2_quirk(vdev, nr);
vfio_probe_ascend910_bar0_quirk(vdev, nr);
vfio_probe_ascend310p_bar2_quirk(vdev, nr);
vfio_probe_ascend310b_bar2_quirk(vdev, nr);
vfio_probe_ascend310_bar4_quirk(vdev, nr);
// ascend-patch end
vfio_probe_rtl8168_bar2_quirk(vdev, nr);
vfio_probe_igd_bar4_quirk(vdev, nr);
}…
vi ./linux-user/syscall.c
修改前TARGET_NR_stime函数代码如下:
#ifdef TARGET_NR_stime /* not on alpha */ case TARGET_NR_stime: { time_t host_time; if (get_user_sal(host_time, argl)) return -TARGET_EFAULT; return get_errno(stime(&host_time)); } #endif
#ifdef TARGET_NR_stime /* not on alpha */ case TARGET_NR_stime: { time_t host_time; if (get_user_sal(host_time, argl)) return -TARGET_EFAULT; struct timespec res; res.tv_sec = host_time; return get_errno(clock_settime(CLOCK_REALTIME, &res)); } #endif
vi ./target/i386/cpu.c
修改前x86_cpu_realizefn函数代码如下:
static void x86_cpu_realizefn(DeviceState *dev, Error **errp) { … if (env->features[FEAT_8000_0001_EDX] & CPUID_EXT2_LM) { if (accel_uses_host_cpuid()) { uint32_t host_phys_bits = x86_host_phys_bits(); static bool warned; … } else { … } … }
修改后x86_cpu_realizefn函数段如下加粗字体标注。
static void x86_cpu_realizefn(DeviceState *dev, Error **errp) { … if (env->features[FEAT_8000_0001_EDX] & CPUID_EXT2_LM) { if (accel_uses_host_cpuid()) { uint32_t host_phys_bits = x86_host_phys_bits(); static bool warned; cpu->host_phys_bits = true; … } else { … } … }
vi ./linux-user/strace.c
增加如下加粗字体内容并保存。
#include "qemu/osdep.h" #include <sys/ipc.h> #include <sys/msg.h> #include <sys/sem.h> #include <sys/shm.h> #include <sys/select.h> #include <sys/mount.h> #include <arpa/inet.h> #include <netinet/tcp.h> #include <linux/if_packet.h> #include <linux/netlink.h> #include <linux/falloc.h> #include <sched.h> #include "qemu.h"
vi ./configure
修改如下加粗字体的参数取值为“yes”并保存。
qom_cast_debug="yes" trace_backends="log" trace_file="trace" spice="yes" rbd="" smartcard="" libusb="" usb_redir="" opengl="" opengl_dmabuf="no" cpuid_h="no" avx2_opt=""
yum install -y http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
[root@localhost yum.repos.d]# yum install -y http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm Loaded plugins: fastestmirror, langpacks epel-release-latest-7.noarch.rpm | 15 kB 00:00:00 Examining /var/tmp/yum-root-eFmD9i/epel-release-latest-7.noarch.rpm: epel-release-7-14.noarch Marking /var/tmp/yum-root-eFmD9i/epel-release-latest-7.noarch.rpm to be installed Resolving Dependencies --> Running transaction check ---> Package epel-release.noarch 0:7-14 will be installed --> Finished Dependency Resolution Dependencies Resolved ========================================================================================================================================================================================================================================================================================= Package Arch Version Repository Size ========================================================================================================================================================================================================================================================================================= Installing: epel-release noarch 7-14 /epel-release-latest-7.noarch 25 k Transaction Summary ========================================================================================================================================================================================================================================================================================= Install 1 Package Total size: 25 k Installed size: 25 k Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : epel-release-7-14.noarch 1/1 Verifying : epel-release-7-14.noarch 1/1 Installed: epel-release.noarch 0:7-14 Complete!
yum install -y ninja-build libffi-devel unzip
root@[10:35:08]|0:~$ yum install -y ninja-build libffi-devel unzip Loaded plugins: fastestmirror, product-id, search-disabled-repos, subscription-manager This system is not registered with an entitlement server. You can use subscription-manager to register. Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * centos-sclo-rh: ftp.sjtu.edu.cn * centos-sclo-sclo: mirror.lzu.edu.cn * elrepo: dfw.mirror.rackspace.com * epel: ftp.iij.ad.jp * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com Resolving Dependencies --> Running transaction check ---> Package libffi-devel.x86_64 0:3.0.13-19.el7 will be installed ---> Package ninja-build.x86_64 0:1.10.2-3.el7 will be installed ---> Package unzip.x86_64 0:6.0-24.el7_9 will be installed --> Finished Dependency Resolution Dependencies Resolved ========================================================================================================================================== Package Arch Version Repository Size ========================================================================================================================================== Installing: libffi-devel x86_64 3.0.13-19.el7 base 23 k ninja-build x86_64 1.10.2-3.el7 epel 144 k unzip x86_64 6.0-24.el7_9 updates 172 k Transaction Summary ========================================================================================================================================== Install 3 Packages Total download size: 340 k Installed size: 767 k Downloading packages: (1/3): libffi-devel-3.0.13-19.el7.x86_64.rpm | 23 kB 00:00:00 (2/3): ninja-build-1.10.2-3.el7.x86_64.rpm | 144 kB 00:00:00 (3/3): unzip-6.0-24.el7_9.x86_64.rpm | 172 kB 00:00:00 ------------------------------------------------------------------------------------------------------------------------------------------ Total 620 kB/s | 340 kB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : ninja-build-1.10.2-3.el7.x86_64 1/3 Installing : libffi-devel-3.0.13-19.el7.x86_64 2/3 Installing : unzip-6.0-24.el7_9.x86_64 3/3 Verifying : unzip-6.0-24.el7_9.x86_64 1/3 Verifying : libffi-devel-3.0.13-19.el7.x86_64 2/3 Verifying : ninja-build-1.10.2-3.el7.x86_64 3/3 Installed: libffi-devel.x86_64 0:3.0.13-19.el7 ninja-build.x86_64 0:1.10.2-3.el7 unzip.x86_64 0:6.0-24.el7_9 Complete!
[root@localhost etc]# service libvirtd restart Redirecting to /bin/systemctl restart libvirtd.service
systemctl disable apparmor
若系统环境为openEuler 22.03 LTS/openEuler 20.03 LTS/Kylin V10 SP2/Kylin V10/UOS V20(1050e)/CULinux 3.0系统,可跳过此步骤。
若系统环境为openEuler 22.03 LTS/openEuler 20.03 LTS/Kylin V10 SP2/Kylin V10/UOS V20(1050e)/CULinux 3.0系统,可跳过此步骤。
[root@localhost qemu-4.1.0]# virsh version Compiled against library: libvirt 6.0.0 Using library: libvirt 6.0.0 Using API: QEMU 6.0.0 Running hypervisor: QEMU 4.1.0