Windows/Linux使用qemu模拟ARM64

Windows环境

下载安装QEMU

qemu-w64-setup-20260422.exe

  1. 下载 qemu-w64-setup-20260422.exe
    点击下一步,下一步 直到安装完成。
  1. 配置windows的环境变量
    新增 C:\Program Files\qemu

下载EFI

QEMU_EFI.fd

下载TAP驱动

tap-windows-9.24.7-I601-Win10.exe

名字改为tap0

启动

打开CMD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
首次安装
qemu-img create -f qcow2 my_arm_vdisk.qcow2 40G
qemu-system-aarch64.exe ^
-m 4G ^
-cpu cortex-a57 ^
-smp 4 ^
-M virt ^
-bios "C:\path\to\QEMU_EFI.fd" ^
-device virtio-gpu-pci ^
-device virtio-keyboard-pci ^
-device virtio-mouse-pci ^
-display sdl ^
-drive if=none,file=my_arm_vdisk.qcow2,id=hd0 ^
-device virtio-blk-device,drive=hd0 ^
-drive if=none,file=your_system_image.iso,id=cdrom,media=cdrom ^
-device virtio-scsi-device ^
-device scsi-cd,drive=cdrom ^
-device nec-usb-xhci -device usb-kbd -device usb-tablet ^
-netdev tap,id=net0,ifname=tap0 ^
-device virtio-net-device,netdev=net0

安装好后正常启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
set "disk_img=arm64.qcow2"
set "efi_file=QEMU_EFI.fd"
set "tap_name=QEMU"

start "" qemu-system-aarch64w.exe -m 4G -machine type=virt -cpu neoverse-n1 ^
-smp 8,sockets=4,cores=2 ^
-bios "%efi_file%" ^
-drive "if=none,file=%disk_img%,id=hd0" ^
-device virtio-blk-device,drive=hd0 ^
-device virtio-gpu-pci ^
-object rng-builtin,id=objrng0 ^
-device virtio-rng-pci,rng=objrng0 ^
-device nec-usb-xhci -device usb-kbd -device usb-tablet ^
-netdev tap,id=net0,ifname=%tap_name% ^
-device virtio-net-pci,netdev=net0 ^
-display vnc=0.0.0.0:1

VNC 图形

VNC-Viewer-5.3.1-Windows-64bit.exe
使用 宿主机IP:5901 端口连接进去

Linux 的libvirt

如果是在Linux环境运行qemu,需要这个
edk2-aarch64-202011-18.oe2203sp4.noarch.rpm
aarch64.tar.gz

1
2
3
4
5
6
7
8
9
10
11
[root@localhost ~]# rpm -ql edk2-aarch64-202011-18.oe2203sp4.noarch
/usr/share/edk2
/usr/share/edk2/aarch64
/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw
/usr/share/edk2/aarch64/QEMU_EFI.fd
/usr/share/edk2/aarch64/QEMU_VARS.fd
/usr/share/edk2/aarch64/vars-template-pflash.raw
/usr/share/licenses/edk2-aarch64
/usr/share/licenses/edk2-aarch64/LICENSE.openssl
/usr/share/licenses/edk2-aarch64/License.txt
[root@localhost ~]#

导入方式启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
[root@localhost libsdt]# cat /home/kvm/vm_arm64_dev/arm64.import
#!/bin/bash

DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
echo "Working directory: $DIR"
VM_NAME="arm64"

# --- 2. 检查虚拟机名称是否已存在 (核心修改) ---
if virsh list --all --name | grep -qx "$VM_NAME"; then
echo "错误: 虚拟机 '$VM_NAME' 已经存在。"
echo "请先使用 'virsh undefine $VM_NAME --nvram' 删除旧机器,或更改脚本中的 VM_NAME。"
exit 1
fi
# ------------------------------------------

# 1. 定义官方固件路径
CODE_PATH="/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw"
VARS_PATH="/usr/share/edk2/aarch64/vars-template-pflash.raw"

# 2. 清理旧的虚拟机定义(防止名称冲突)
virsh destroy $VM_NAME 2>/dev/null
virsh undefine $VM_NAME --nvram 2>/dev/null

# 3. 执行安装
virt-install \
--name $VM_NAME \
--arch aarch64 \
--machine virt \
--cpu cortex-a57 \
--vcpus 4 \
--memory 4096 \
--import \
--os-variant linux2022 \
--boot loader="${CODE_PATH}",loader_type=pflash,loader_ro=yes,nvram_template="${VARS_PATH}" \
--tpm none \
--disk path="${DIR}/${VM_NAME}.qcow2",format=qcow2,bus=virtio \
--network bridge=br0,model=virtio \
--graphics vnc,listen=0.0.0.0,port=5900 \
--video virtio \
--noautoconsole \
--autostart

[root@localhost libsdt]#

安装当时启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
[root@localhost libsdt]# cat /home/kvm/vm_uos/uos.install
#!/bin/bash

DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
VM_NAME="arm64_dev"
echo "Working directory: $DIR"

# 0. 定义 ISO 路径
ISO_PATH="${DIR}/uos-server-20-1060a-arm64.iso"

# 1. 定义官方固件路径
CODE_PATH="/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw"
VARS_PATH="/usr/share/edk2/aarch64/vars-template-pflash.raw"

# --- 2. 检查虚拟机名称是否已存在 (核心修改) ---
if virsh list --all --name | grep -qx "$VM_NAME"; then
echo "错误: 虚拟机 '$VM_NAME' 已经存在。"
echo "请先使用 'virsh undefine $VM_NAME --nvram' 删除旧机器,或更改脚本中的 VM_NAME。"
exit 1
fi
# ------------------------------------------

echo "正在创建虚拟机 $VM_NAME..."

# 3. 执行安装
virt-install \
--name "$VM_NAME" \
--arch aarch64 \
--machine virt \
--cpu cortex-a57 \
--vcpus 2 \
--memory 2048 \
--rng /dev/urandom,model=virtio \
--location "${ISO_PATH}" \
--os-variant linux2022 \
--boot loader="${CODE_PATH}",loader_type=pflash,loader_ro=yes,nvram_template="${VARS_PATH}" \
--tpm none \
--disk path="${DIR}/${VM_NAME}.qcow2",format=qcow2,bus=virtio,size=40 \
--network bridge=br0,model=virtio \
--graphics vnc,listen=0.0.0.0,port=5901 \
--video vga \
--noautoconsole \
--autostart

#--video virtio \
[root@localhost libsdt]#