【笔记】MacOS通过qemu运行Windows10虚拟机

前言

MacOS Apple Silicon 通过qemu运行Windows10虚拟机

准备工作

下载编译QEMU时需要的依赖

1
brew install pkg-config glib pixman ninja

下载QEMU补丁

  • 点击series进行下载

下载edk2

下载制作系统虚拟机的工具Rufus

传送门

编译QEMU

下载项目

1
2
git clone https://github.com/qemu/qemu.git
cd qemu

打补丁

~/Downloads/hvf-Implement-Apple-Silicon-Support.patch:针对于 Apple Silicon 的 QEMU 补丁

1
git apply ~/Downloads/hvf-Implement-Apple-Silicon-Support.patch

编译项目

1
2
./configure --cpu=aarch64 --target-list=aarch64-softmmu
make

添加edk2包

  • 将edk2包内的所有文件复制到编译后的QEMU根目录

edk2.git-aarch64-0-20220719.209.gf0064ac3af.EOL.no.nore.updates.noarch.rpm:edk2包

1
2
tar -xvf ~/Downloads/edk2.git-aarch64-0-20220719.209.gf0064ac3af.EOL.no.nore.updates.noarch.rpm
cp ./usr/share/edk2.git/aarch64/* ./build

完成编译

  • 得到的build目录下的所有文件就是编译后的QEMU程序
1
cd build

制作Windows虚拟机文件(需要在Windows上完成)

  • 在Windows上创建一个VHDX的虚拟磁盘,将Windows系统的ISO系统镜像通过工具安装到VHDX虚拟磁盘中,作为Windows虚拟机文件

创建空白VHDX虚拟磁盘

  • 右键此电脑->管理->磁盘管理->操作->创建VHD`

  • 指定VHDX文件的存放位置及文件名->指定虚拟硬盘大小->选择VHDX格式->选择动态扩展->确定

如果选择了动态扩展,虚拟硬盘大小可以随意指定

使用Rufus安装Windows操作系统

  • 设备指定虚拟磁盘->引导类型选择指定系统镜像文件->镜像选择选择Windows To Go->开始

  • OK

  • OK

  • 确定

完成VHDX制作

  • 将制作好的VHDX文件移动到qemu/build目录下

启动虚拟机

  • qemu/build目录下通过命令启动虚拟机

<vhdx>:vhdx完整文件名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DYLD_LIBRARY_PATH=. \
./qemu-system-aarch64 \
-M virt.highmem=off \
-accel hvf \
-m 8G \
-smp 4 \
-cpu max \
-device ramfb \
-serial stdio \
-drive file=<vhdx>,if=none,id=NVME1 \
-device nvme,drive=NVME1,serial=nvme-1 \
-device nec-usb-xhci \
-device usb-kbd \
-device usb-tablet \
-device intel-hda -device hda-duplex \
-drive file=vars-template-pflash.raw,if=pflash,index=1 \
-bios QEMU_EFI.fd

初始化

  • 首次启动,需要在启动时按下Esc键,跳出BIOS选项->选择Device ManagerReturn键(回车键)

  • 选择OVMF Platform ConfigurationReturn

  • Change Preferred改为1024x768

  • F10保存设置->Y确定

完成

后记

  • 失败了,报错:qemu-system-aarch64: No machine specified, and there is no default

参考文献

哔哩哔哩——黑貓的野望
MacRumors——1958llakin