在Windows中使用QEMU搭建Arm虚拟机

安装准备

  • 安装 qemu: QEMU 根据网页提示,进入对应的系统(x86_64的Windows选择W64目录),进入目录后下载最新版本即可
  • 安装 tap-windows: tap-windows 进入网页后搜索tap-windows,选择下载,目前可以下载tap-windows-9.24.2-I601-Win10.exe
  • EFI 文件: QEMU_EFI.fd 可以使用上述链接中的固件,也可以自行下载
  • ARM系统: 本次使用 openEuler 22.03 LTS SP4

创建虚拟网卡

  • tap-windows 安装完成后,网络连接里会出现一个 TAP-Winodws-Adapter V9 的本地连接网卡;
arm0019.png
  • 将这个网卡改名,推荐改为tap0,改名可以通过F2直接改名,也可以通过右键菜单中的重命名修改
arm0019.png
  • 共享物理网卡

    • 右击物理网卡(一般名称为以太网);
    • 切换到“共享”标签页;
    • 勾选“允许其它网络通过此计算机的 Internet 连接来连接”;
    • “家庭网络连接”项选择新增加的网卡:tap0;
    • 勾选“允许其它网络用户控制或禁用共享的 Internet 连接”;
    • 点击“确定”按钮;
arm0022.png
arm0023.png

创建虚拟机

  • 创建虚拟机磁盘

    在准备安装的虚拟机目录打开cmd窗口输入(自行调整磁盘大小)

    1
    qemu-img create -f qcow2 E:\Vmware\Qemu\openEuler-22.03-disk.img 30G

    如果此时不存在qemu-img,需要将qemu的安装目录设置为环境变量,或者使用指定程序运行

    1
    'E:\Program\qemu\qemu-img' create -f qcow2 E:\Vmware\Qemu\openEuler-22.03-disk.img 30G
    1733219003124.png
  • 准备EFI固件文件

  • 使用 qemu-system-aarch64 命令安装操作系统

    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
    qemu-system-aarch64.exe -m 8192 -cpu cortex-a72 -smp 4,cores=4,threads=1,sockets=1 -M virt -bios E:\Vmware\Qemu\QEMU_EFI-202407.fd -net nic -net tap,ifname=tap0 -device nec-usb-xhci -device usb-kbd -device usb-mouse -device VGA -drive if=none,file=E:\Vmware\Qemu\openEuler-22.03-LTS-SP4-aarch64-dvd.iso,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom -drive if=none,file=E:\Vmware\Qemu\openEuler-22.03-disk.img,id=hd0 -device virtio-blk-device,drive=hd0

    # -m 8192 表示分配给虚拟机的内存最大8192MB,可以直接使用 -m 8G

    # -cpu cortex-a72 指定CPU类型,还可以选择cortex-a53、cortex-a57等

    # -smp 4,cores=4,threads=1,sockets=1 指定虚拟机最大使用的CPU核心数等

    # -M virt 指定虚拟机类型为virt,具体支持的类型可以使用 qemu-system-aarch64 -M help 查看

    # -bios E:\Vmware\Qemu\QEMU_EFI-202407.fd 指定UEFI固件文件

    # -net tap,ifname=tap0 启用网络功能(ifname=tap0中的tap0,修改为前面步骤中自己修改后的网卡名称)

    # -device nec-usb-xhci -device usb-kbd -device usb-mouse 启用USB鼠标等设备

    # -device VGA 启用VGA视图,对于图形化的Linux这条很重要!

    # -drive if=none,file=E:\Vmware\Qemu\openEuler-22.03-LTS-SP4-aarch64-dvd.iso,id=cdrom,media=cdrom 指定光驱使用镜像文件

    # -device virtio-scsi-device -device scsi-cd,drive=cdrom 指定光驱硬件类型

    # -drive if=none,file=E:\Vmware\Qemu\openEuler-22.03-disk.img 指定硬盘镜像文件


  • 然后在弹出的窗口中安装虚拟机

  • 安装完成后,再次启动虚拟机

    1
    2
    3
    # 无需再次指定iso文件启动

    qemu-system-aarch64 -m 8192 -cpu cortex-a72 -smp 4,cores=4,threads=1,sockets=1 -M virt -bios E:\Vmware\Qemu\QEMU_EFI-202407.fd -net nic -net tap,ifname=tap0 -device nec-usb-xhci -device usb-kbd -device usb-mouse -device VGA -drive if=none,file=,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom -drive if=none,file=E:\Vmware\Qemu\openEuler-22.03-disk.img,id=hd0 -device virtio-blk-device,drive=hd0

可以将以上命令写入bat文件启动

  • 启动后可配置ssh,通过其他工具连接

问题

重启 QEMU 虚拟机后,可能会出现无法连接外网

此问题是 Windows 网络共享的问题,在宿主机种右键物理网卡,点击“属性”按钮,在弹出的界面中选择“共享”选项,先取消共享,点击确定后,再次选择共享即可。