很久没折腾黑苹果了。先在VMware上用OC4VM1试了一下,发现性能还是很差,可能是跟hypervisor有冲突2,而且GPU图形加速也开不了。因为平时常用的WSL2依赖Hyper-V,不能关掉它,所以就想在Hyper-V上试试装macOS。
准备工作
-
首先把OSX-Hyper-V3项目中的文件全克隆到本地
-
定位到刚才克隆的项目中的
src\config.yml文件,编辑文件中最后一部分的内容-
对于 Intel Tiger Lake 及更新的处理器(第 11 代及更新的处理器),需要编辑cpuid将自己伪装为Comet Lake CPU:
-
文件中的
Kernel -> Emulate部分添加:1 2 3 4Kernel: Emulate: Cpuid1Data: Data | <55 06 0A 00 00 00 00 00 00 00 00 00 00 00 00 00> Cpuid1Mask: Data | <FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00>注意缩进格式!
Kernel下可能已经有了Patch一项,确保Emulate与Patch平级,并自行注意缩进的空格数量!编辑完的最后一部分应该看起来像:1 2 3 4 5 6Kernel: Patch: 这一部分保持原有的内容不变 Emulate: Cpuid1Data: Data | <55 06 0A 00 00 00 00 00 00 00 00 00 00 00 00 00> Cpuid1Mask: Data | <FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00>
-
-
对于AMD CPU,请参见官方文档的AMD部分4。由于我不是AMD CPU,就不详细概述这部分内容了。
-
-
构建EFI。在项目目录中打开Powershell,输入
Set-ExecutionPolicy Bypass -Scope Process仅在此窗口中禁用安全策略,然后执行.\scripts\build.ps1进行构建。成功后会在项目目录中看到dist/目录。
创建虚拟机
可以直接使用.\dist\Scripts\create-virtual-machine.ps1脚本一键创建虚拟机。如需手动创建虚拟机,请参阅官方文档5。
安装系统
正常在Hyper-V管理器中启动并进入恢复镜像。安装系统前记得抹掉目标硬盘为APFS格式。
如果启动失败,请定位到虚拟机的配置文件目录,双击挂载EFI.vhdx镜像,然后在镜像的根目录下获取log文件,排查启动错误。
安装完成后看起来好像比VMware性能要好一些。
修改分辨率
首先在macOS中安装Hyper-V相关依赖。在macOS中打开终端:
|
|
之后定位到虚拟机的配置文件目录,双击挂载EFI.vhdx镜像。定位到\EFI\OC\Kexts\MacHyperVFramebuffer.kext\Contents\Info.plist文件,定位到SupportedResolutions,下面在加一个dict即可:
|
|
显卡直通
省流:新版macOS(High Sierra 10.13之后)+ 新的nVidia显卡(RTX20系列及之后的显卡)不要想了6,而且需要Windows Server才能开启离散设备分配(DDA)
微软只把DDA功能开放给了Windows Server。你仍然可以按照微软官方教程把GPU加到VM上7,但如果不是Windows Server相关的SKU,启动会报错:
“macOS"无法启动。
Virtual Pci Express Port (实例 ID B927A021-DC53-4C54-BF5A-E850F5EDABB8):无法开机,因为发生了错误"虚拟机监控程序功能对于该用户来说不可用。”。
“macOS"无法启动。(虚拟机 ID 0F41CF70-91D2-476E-B0F5-6225E767C7C1)“macOS"Virtual Pci Express Port (实例 ID B927A021-DC53-4C54-BF5A-E850F5EDABB8):无法打开电源,因为发生错误"虚拟机监控程序功能对于该用户来说不可用。“(0xC035001E)。(虚拟机 ID 0F41CF70-91D2-476E-B0F5-6225E767C7C1)
重新安装Windows Server就不说了。不过有其他不用重装系统的方案:Reddit上一位小猪佩奇头像的用户提供了一种野路子,能把普通Windows直接变成Windows Server8;你也可以通过改注册表或Massgrave脚本(既然你都玩Hyper-V了,那大概率之前用过这个脚本😎)将Windows的版本切换为ServerRdsh9。顺便提醒一下,改成Windows Server会破坏部分电源选项(比如开始菜单里看不到睡眠/休眠选项)。
当然,前面也提到过,新版macOS已经不再支持所有nVidia显卡,所以折腾半天显卡直通进去也没用。如果你有旧款nVidia显卡 + 旧版macOS,倒是可以按上面的思路折腾一下。
脚注
-
详见 https://community.broadcom.com/vmware-cloud-foundation/discussion/disabling-hyper-v-hypervisor-on-windows-11-pro-host-to-get-vmware-17s-cpl0-vs-ulm-monitor-mode 。大概原因是Hyper-V属于Type 1 hypervisor,在Windows上开启后,宿主机自身的Windows会变为一种特殊的Guest虚拟机(在Hyper-V中称为Root Partition)。因此在Windows上再运行虚拟机就是一种嵌套虚拟化,此时要不然继续使用Hyper-V创建子虚拟机,要么VMware等第三方软件需要通过Windows Hypervisor Platform提供的API来调用底层Hyper-V的hypervisor来运行虚拟机。这种间接API调用可能会有一定的性能损失。 ↩︎
-
https://github.com/Qonfused/OSX-Hyper-V#4-setting-up-hyper-v ↩︎
-
https://dortania.github.io/GPU-Buyers-Guide/#a-quick-refresher-with-nvidia-and-web-drivers ↩︎
-
https://learn.microsoft.com/zh-cn/windows-server/virtualization/hyper-v/deploy/deploying-graphics-devices-using-dda ↩︎
-
https://www.reddit.com/r/HyperV/comments/rd1pf5/comment/hp07iw0/ ↩︎
-
https://www.reddit.com/r/HyperV/comments/1ofyyk7/finally_managed_to_get_dda_working_on_windows_10/ ↩︎