OSX-Hyper-V:基于 OpenCore 的 Hyper-V macOS 虚拟化项目

OpenCore configuration for running macOS on Windows Hyper-V.

分支1Tags11
文件最后提交记录最后更新时间
1 年前
3 年前
6 个月前
11 个月前
6 个月前
2 年前
3 年前
1 年前
1 年前

OSX-Hyper-V

Hyper-V 窗口图示
一个基于 OpenCore 引导程序和 OCE-Build 构建管理器,为 Windows Hyper-V 实现 MacHyperVSupport 软件包的 Hackintosh 项目。

许可证 语义化版本 macOS 版本 OpenCore OCE 构建

⚡快速链接

⚙️ 当前进度

有关每个发行版本所实现的变更,请参考 更新日志语义化版本看板

macOS 版本支持:

Note

无法直接安装 OS X Tiger(10.4)至 Snow Leopard(10.6)。建议先安装较新版本的 macOS,然后使用 Acidanthera 提供的磁盘镜像 恢复到所需版本。

您也可以在 Archive.org 上找到其他历史版本的 InstallAssistant.dmg 存档。

以下支持的版本包括 macOS 10.426.0

macOS 版本 状态 最低版本 最高版本
Tahoe 🚧 开发中。 (无) (最新版)
Sequoia 支持。 (无) (最新版)
Sonoma 支持。 (无) (最新版)
Ventura 支持。 (无) (最新版)
Monterey 支持。 (无) (最新版)
Big Sur 支持。 (无) (最新版)
Catalina 支持。 (无) (最新版)
Mojave 支持。 (无) (最新版)
High Sierra 支持。 (无) (最新版)
Sierra 支持。 (无) (最新版)
El Capitan 支持。 (无) (最新版)
Yosemite 支持。 (无) (最新版)
Mavericks 支持。 (无) (最新版)
Mountain Lion 支持。 (无) (最新版)
Lion 支持。 (无) (最新版)
Snow Leopard 🚧 支持。 (无) (零售版)
Leopard 🚧 支持。 (无) (零售版)
Tiger 🚧 支持。 (无) (零售版)

有关 macOS 与 Windows 客户端、服务器以及 Hyper-V 版本的完整兼容性说明,请参考 HyperV-versions.md

✨ 开始使用

如果您选择使用本仓库中的预构建版本,可直接跳至2. 为您的硬件配置 OpenCore部分,针对您的特定 CPU 进行 OpenCore 设置,然后继续执行4. 设置 Hyper-V以创建新的虚拟机。

希望从源代码构建此项目的用户,请按照以下步骤克隆本仓库、构建 EFI 并设置 Hyper-V。

1. 使用 Git 克隆本仓库

要克隆本仓库,请运行以下命令:

git clone https://github.com/Qonfused/OSX-Hyper-V
cd OSX-Hyper-V

Tip

或者,你可以使用 curl 命令从 GitHub 下载并提取压缩包:

iwr https://github.com/Qonfused/OSX-Hyper-V/archive/refs/heads/main.zip -OutFile OSX-Hyper-V-main.zip | tar -xf OSX-Hyper-V-main.zip
rm OSX-Hyper-V-main.zip
cd OSX-Hyper-V-main

2. 为你的硬件配置 OpenCore

Note

MacHyperVSupport 需要 Windows Server 2012 R2 / Windows 8.1 或更高版本。Windows Server 2016 目前不受支持。

由于 Hyper-V 是一种 1 型 hypervisor,它需要兼容的 CPU 才能运行 macOS。这意味着任何直通的硬件都需要像在裸机黑苹果上一样得到支持或打补丁。

默认情况下没有 GPU 加速,这意味着任何图形相关任务都将由 CPU 驱动,并且速度会很慢。要获得 GPU 加速,你需要使用离散设备分配 (DDA) 来直通受支持的 GPU 以进行加速。

Important

与裸机不同,iGPU/APU 默认情况下对虚拟机不可见,需要 DDA 支持才能进行 GPU 直通。此外,即使大多数独立 GPU 原生支持,如果通过 DDA 直通也可能无法工作。有关 Hyper-V 当前支持的概述,请参阅限制部分。

有关硬件支持的一般概述,请参阅 Dortania 指南的CPU 支持GPU 支持部分,了解按 macOS 版本划分的硬件支持明细。

要为你的特定 CPU 设置 OpenCore,请按照 Dortania 安装指南中针对你的 CPU 系列的 Intel 或 AMD 部分进行操作。忽略任何 USB 映射、固件或主板特定部分,因为它们与 Hyper-V 无关(Hyper-V 提供自己的虚拟化硬件)。

请参阅以下部分,了解硬件支持明细和 Hyper-V 特定配置。

Intel

Note

对于 Intel Tiger Lake 及更新版本(第 11 代及更新版本),你可以按照 Dortania 安装指南中的 Comet Lake 部分进行操作。

你需要通过使用以下 CPUID 补丁将 CPU 伪装成 Comet Lake:

Kernel:
  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>

将此添加到 config.yml 文件的 Kernel -> Emulate 部分下,或手动添加到生成的 config.plist 文件的 EFI/OC/config.plist 中。

有关其他可用的 CPUID 补丁以获得更好的 XCPM 支持,请参阅 Cpuid1Data

以下是受支持的 CPU 代次及其初始和最新支持的 macOS 版本列表:

桌面 CPU:
代次 初始支持版本 最新支持版本
Penryn OS X 10.4.10 (Tiger) macOS 10.13.6 (High Sierra)
Clarkdale (第 1 代) OS X 10.6.3 (Snow Leopard) macOS 12 (Monterey)
Sandy Bridge (第 2 代) OS X 10.6.7 (Snow Leopard) macOS 12 (Monterey)
Ivy Bridge (第 3 代) OS X 10.7 (Lion) macOS 12 (Monterey)
Haswell (第 4 代) OS X 10.8 (Mountain Lion) (当前)
Skylake (第 6 代) OS X 10.11 (El Capitan) (当前)
Kaby Lake (第 7 代) macOS 10.12 (Sierra) (当前)
Coffee Lake (第 8 代) macOS 10.13 (High Sierra) (当前)
Comet Lake (第 10 代) macOS 10.15 (Catalina) (当前)
移动 CPU:
代次 初始支持版本 最新支持版本
Arrandale (第 1 代) OS X 10.6.3 (Snow Leopard) macOS 10.13 (High Sierra)
Sandy Bridge (第 2 代) OS X 10.6.7 (Snow Leopard) macOS 12 (Monterey)
Ivy Bridge (第 3 代) OS X 10.7 (Lion) macOS 12 (Monterey)
Haswell (第 4 代) OS X 10.8 (Mountain Lion) macOS 12 (Monterey)
Broadwell (第 5 代) OS X 10.10 (Yosemite) macOS 12 (Monterey)
Skylake (第 6 代) OS X 10.11 (El Capitan) (当前)
Kaby Lake (第 7 代) macOS 10.12 (Sierra) (当前)
Coffee Lake (第 8 代) macOS 10.13 (High Sierra) (当前)
Whiskey Lake (第 8 代) macOS 10.14.1 (Mojave) (当前)
Comet Lake (第 10 代) macOS 10.15.4 (Catalina) (当前)
Ice Lake (第 10 代) macOS 10.15.4 (Catalina) (当前)

AMD

Important

AMD CPU 需要在 config.plist 中启用 Kernel -> Emulate -> DummyPowerManagement 选项,因为 AMD 在 macOS 中没有原生电源管理驱动:

Kernel:
  Emulate:
    DummyPowerManagement:   Boolean | true

以下是受支持的 CPU 代次及其初始和最新支持的 macOS 版本列表:

代次 初始支持版本 最新支持版本
Bulldozer (15h) macOS 13 (High Sierra) macOS 12 (Monterey)
Jaguar (16h) macOS 13 (High Sierra) macOS 12 (Monterey)
Ryzen (17h) macOS 13 (High Sierra) (当前)
Threadripper (19h) macOS 13 (High Sierra) (当前)

除了 AMD 内核补丁(适用于 AMD CPU 系列 15h、16h、17h 和 19h)之外,High Sierra 及更高版本还需要以下内核补丁:

Kernel:
  Patch:
    - Arch:                 String  | "x86_64"
      Base:                 String  | "_cpu_syscall_init"
      Comment:              String  | "flagers - kill invalid wrmsr | 10.13+"
      Count:                Number  | 3
      Find:                 Data    | "0F30"
      Identifier:           String  | "kernel"
      MaxKernel:            String  | ""
      MinKernel:            String  | "17.0.0"
      Replace:              Data    | "9090"

您也可以手动将以下 plist 条目添加到您的 config.plist 中:

Plist 条目(文件:patch.plist.zip
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Kernel</key>
    <dict>
        <key>Patch</key>
        <array>
            <dict>
                <key>Arch</key>
                <string>x86_64</string>
                <key>Base</key>
                <string>_cpu_syscall_init</string>
                <key>Comment</key>
                <string>flagers - kill invalid wrmsr | 10.13+</string>
                <key>Count</key>
                <integer>3</integer>
                <key>Enabled</key>
                <true/>
                <key>Find</key>
                <data>DzA=</data>
                <key>Identifier</key>
                <string>kernel</string>
                <key>Limit</key>
                <integer>0</integer>
                <key>Mask</key>
                <data></data>
                <key>MaxKernel</key>
                <string></string>
                <key>MinKernel</key>
                <string>17.0.0</string>
                <key>Replace</key>
                <data>kJA=</data>
                <key>ReplaceMask</key>
                <data></data>
                <key>Skip</key>
                <integer>0</integer>
            </dict>
        </array>
    </dict>
</dict>
</plist>

Note

应用 AMD 内核补丁时,请选择与配置 CPU 核心数时分配给虚拟机的核心数相匹配的核心数(即 algrey - Force cpuid_cores_per_package 补丁)。

例如,在 6 核 AMD Ryzen 9600X 上,你可能会发现为虚拟机分配 6 个核心并对 cpuid_cores_per_package 补丁使用 06 会很有帮助。如果分配 6 个核心时遇到启动问题,请尝试改为分配 8 个核心并对 cpuid_cores_per_package 补丁使用 08(参见 #37)。

Tip

你可以使用 amd.ps1 脚本为你的 CPU 自动生成这些 AMD 补丁,方法是运行以下命令:

.\scripts\amd.ps1 --cpu <core_count>

请注意,这需要将 --cpu 选项设置为分配给虚拟机的核心数。

3. 使用 OCE-Build 构建此仓库

本项目使用 OCE-Build 来自动版本化并构建此仓库的 EFI。

Important

要运行 PowerShell 脚本,你可能需要使用以下命令设置执行策略:

Set-ExecutionPolicy RemoteSigned

要构建此项目的 EFI,请在项目根目录下运行以下命令之一:

# Build for macOS 10.8 and newer
.\scripts\build.ps1

# Build for macOS 10.7 and older
.\scripts\build.ps1 --legacy

# Build for macOS 10.4 - 10.5, 10.6 if running in 32-bit mode
.\scripts\build.ps1 --legacy --32-bit

这将创建一个新的 dist/ 目录,其中包含 EFI.vhdx 虚拟磁盘,以及一个 dist/Scripts/ 目录,内含用于创建和配置虚拟机的各种脚本。

4. 设置 Hyper-V

在继续操作之前,请先检查是否已启用 Hyper-V

  • 你可以通过在 PowerShell 中以管理员身份运行以下命令来启用 Hyper-V 角色:
    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
    
  • 重启后,可以通过运行以下命令检查 Hyper-V 是否已成功启用:
    Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V
    

Tip

构建下载本项目的 EFI 后,你可以运行 create-virtual-machine.ps1 脚本来快速设置新的虚拟机。

例如,对于本项目的本地构建:

# 使用最新版本的 macOS(CPU=2 核,内存=8 GB,磁盘大小=50 GB)
.\dist\Scripts\create-virtual-machine.ps1 -name "My New Virtual Machine"

# 使用较旧版本的 macOS(CPU=4 核,内存=16 GB,磁盘大小=128 GB)
.\dist\Scripts\create-virtual-machine.ps1 -name "Catalina" -version 10.15 -cpu 4 -ram 16 -size 128

或者对于下载的发行版:

cd ~/Downloads/EFI-1.0.0-64-bit-DEBUG # 脚本随发行版一同打包

# 使用最新版本的 macOS(CPU=2 核,内存=8 GB,磁盘大小=50 GB)
.\Scripts\create-virtual-machine.ps1 -name "My New Virtual Machine"

# 使用较旧版本的 macOS(CPU=4 核,内存=16 GB,磁盘大小=128 GB)
.\Scripts\create-virtual-machine.ps1 -name "Catalina" -version 10.15 -cpu 4 -ram 16 -size 128

[!IMPORTANT] 较新版本的 macOS(Big Sur 及更高版本)需要 6-8 GB 内存才能启动安装程序。如果你使用的是较旧版本的 macOS,则可以使用更少的内存(最低 4 GB)。

以下概述了手动创建 macOS 新虚拟机的步骤:


i. 创建启动 VHDX 磁盘

格式化一个小型(1GB)FAT32 磁盘,使用 GPT(GUID 分区表)初始化并挂载它。这将作为你的 macOS 虚拟机的启动分区,并包含 OpenCore EFI 文件夹。

  • 选择以下三种创建 VHD/VHDX 磁盘的方法之一:
    • (A) Hyper-V 管理器 - 导航至 操作 > 新建 > 硬盘
      A-VHD

      • 硬盘位于 C:\ProgramData\Microsoft\Windows\Virtual Hard Disks\ 目录下。
      • 你可以通过右键单击文件并选择 挂载 来挂载 VHD/VHDX 磁盘。
      • 你可以通过右键单击已挂载的磁盘并选择 弹出 来卸载。
    • (B) 磁盘管理 - 导航至 操作 > 创建 VHD
      B-VHD

      • 确保将磁盘初始化为 GPT 并创建新的 FAT32 分区。
      • 你可以使用 操作 > 附加 VHD 来挂载 VHD/VHDX 磁盘。
      • 你可以通过右键单击卷并选择 分离 VHD 来卸载。
    • (C) PowerShell - 使用 New-VHD 命令创建新的 VHD/VHDX 磁盘。

      (PowerShell 命令)
      # 在 PowerShell 中以管理员身份运行此命令
      
      $vhdpath = "$env:USERPROFILE\Desktop\EFI.vhdx"
      $vhdsize = 1GB
      $vhdpart = "GPT"
      $vhdfs = "FAT32"
      New-VHD -Path $vhdpath -Dynamic -SizeBytes $vhdsize |
        Mount-VHD -Passthru |
        Initialize-Disk -PartitionStyle $vhdpart -Confirm:$false -Passthru |
        New-Partition -AssignDriveLetter -UseMaximumSize |
        Format-Volume -FileSystem $vhdfs -Confirm:$false -Force
      

将 EFI 文件夹(整个文件夹)移动到 VHDX 磁盘的根目录。

  • 操作完成后,你的 EFI VHDX 磁盘根目录下应会有一个 EFI/ 文件夹。

ii. 创建 macOS 安装程序/恢复 VHDX 磁盘

通过以下任一方法创建或添加安装程序磁盘:

  • (A) 使用 macrecovery.py 直接从 Apple 下载 BaseSystem 或 Recovery 镜像文件:
    • 按照 Dortania 指南 中的步骤下载 macOS 安装程序镜像。
    • 将 macrecovery 下载的 .chunklist.dmg 文件移动到你的 EFI VHDX 磁盘上一个名为 com.apple.recovery.boot 的新文件夹中。操作完成后,你的 EFI VHDX 磁盘根目录下应会同时有 EFI/com.apple.recovery.boot/ 文件夹。
  • (B) 使用 qemu-img 将 DMG 安装程序转换为 VHDX 磁盘:
    • 如果你已经有 macOS 的 DMG 安装程序(例如 Sierra 及更早版本),可以通过运行 qemu-img 并使用以下命令直接将安装程序镜像转换为 VHDX 磁盘:
      qemu-img.exe convert -f raw -O vhdx InstallMacOSX.dmg InstallMacOSX.vhdx
      

iii. 创建 macOS 虚拟机

在 Hyper-V 管理器中,导航至 操作 > 新建 > 虚拟机

3-New-VM

在向导过程中配置以下选项:

  • 指定代系:选择 第 2 代
  • 分配内存:至少分配 4096 MB(对于 Big Sur 及更高版本,建议分配 8192 MB)。
  • 配置网络:选择默认网络交换机。
  • 连接虚拟硬盘:命名并选择要安装 macOS 的磁盘大小。

创建完成后,右键单击新创建的虚拟机(在窗口的“虚拟机”部分下),然后选择 设置

3-VM-Settings

然后在“硬件”部分下配置以下选项:

  • 导航至“安全”并取消勾选 启用安全启动(禁用)。
  • 导航至“SCSI 控制器”并为你的 EFI VHDX(以及适用的安装程序 VHDX)添加新硬盘。
    • 你需要将 EFI VHDX 附加到位置值为 0 的端口,并将主虚拟硬盘的位置值更改为其他值(例如 12)。这是为了确保 EFI 磁盘是启动顺序中的第一个磁盘。

5. 将此EFI与macOS配合使用

请参考Dortania指南的安装流程部分。本文档额外提供了一些安装后章节,以帮助处理Hyper-V(或本项目)的特定问题。

安装流程的基本概述如下:

  1. 启动虚拟机,从OpenCore启动菜单中选择EFI (dmg)
    • 如果您创建了单独的macOS安装程序VHDX,它可能会显示为macOS Base System (External)Install macOS Big Sur (External),具体取决于您要安装的macOS版本。
  2. 安装程序加载后,从“实用工具”菜单中打开“磁盘工具”。
    • 从磁盘列表中选择Msft Virtual Disk Media(您的主虚拟硬盘)。
    • 点击“抹掉”以格式化磁盘。
      • 根据需要为磁盘命名(例如,macOSMacintosh HD等)。
      • 对于macOS 10.13及更高版本,请使用APFS格式。对于旧版本,请使用Mac OS Extended (Journaled)(Mac OS扩展(日志式))。
  3. 退出磁盘工具并返回到安装程序主菜单。
  4. 选择“重新安装macOS”以启动主安装程序。
    • 按照提示将macOS安装到您新格式化的磁盘上。
    • 确保选择您刚刚格式化的磁盘(例如,macOS或您命名的其他名称),而不是EFI磁盘。
    • 请注意,此过程可能需要一段时间(30分钟到2小时不等)。
  5. 安装完成后,虚拟机将重新启动,您应该会再次看到OpenCore启动菜单。
    • 这可能需要多次重启以安装其他组件并完成安装。
  6. 从OpenCore启动菜单中选择新安装的macOS磁盘(或您为其命名的名称)以启动macOS。
    • 如果您仍然无法启动到macOS安装,请尝试再次选择安装程序磁盘。
    • 您可以在选择磁盘时按住Ctrl键将其设置为默认启动项。

本项目创建的EFI虚拟磁盘捆绑了一个安装后脚本,负责安装MacHyperVFramebuffer驱动程序并配置守护进程以支持其他Hyper-V服务。这是在macOS中支持分辨率更改和硬件光标的必要条件。

要运行此脚本,请从EFI磁盘的Scripts/目录中执行post-install.sh脚本。例如,您可以在启动到macOS安装程序后,在终端中运行以下命令:

cd /Volumes/EFI # Change to the EFI disk
bash ./Scripts/post-install.sh

你也可以选择运行 optimize-vm.sh 脚本,以禁用 Spotlight 索引、减少磁盘 I/O 并关闭系统动画。对于采用 CPU 渲染图形且磁盘性能有限的虚拟机,建议执行此操作。

cd /Volumes/EFI # Change to the EFI disk
bash ./Scripts/optimize-vm.sh

6. 故障排除

如果在安装或启动过程中遇到问题,欢迎创建 GitHub issue,并尽可能详细地提供您的设置信息,包括:

  • 您尝试安装的 macOS 版本。
  • 运行 Hyper-V 的 Windows 版本。
  • 您使用的 CPU(例如 Intel i7-9700K、AMD Ryzen 5 3600 等)。
  • 分配给虚拟机的 CPU 核心数和内存量。
  • 在 OpenCore 启动菜单或安装过程中看到的任何错误消息。

不过,您可能会遇到一些常见问题,概述如下:

  • 选择安装程序后过早重启(#[EB.MM.AKM|!] Err(0xE) <- EB.MM.MKP
    • 这通常表示 macOS 安装程序没有足够的内存来启动。对于 macOS 11 Big Sur 及更高版本,请确保至少有 6-8 GB 内存;对于旧版本(Catalina 及更早版本),至少需要 4 GB 内存。
    • 更多详情请参见 #44
  • 卡在 vm_shared_region_start_address()failed lookup: com.apple.dock.fullscreen
    • 在此处停滞通常意味着 macOS 安装程序图形界面无法启动。您可能会发现其他与 WindowServergui/0 请求其他服务(即 logdrecoveryosd)相关的消息,这些可作为此问题的提示。
    • 尝试重启并清除 NVRAM(使用 OpenCore 启动菜单中的“Reset NVRAM”选项),看是否能解决问题。
    • 如果此问题持续存在,一个有效的解决方法是先安装 macOS Catalina(10.15),然后在安装完成后升级到所需的 macOS 版本。详情请参见 #53
  • 安装后选择安装程序时重启。
    • 这是相对正常的行为。完成安装过程可能需要多次重启(每次都选择 macOS 安装程序)。

限制

Hyper-V 的基本配置存在一些已知限制:

  • 显示分辨率
    • 默认虚拟显示分辨率设置为 1024x768,但可以通过修改 MacHyperVFramebuffer 的 Info.plist 文件中的 SupportedResolutions 条目进行重新配置。
    • 更多详情请参见 issue #6
  • 图形加速
    • 默认情况下,macOS 将使用 MacHyperVFramebuffer 合成图形驱动程序运行,该驱动程序提供基本的图形支持(具有 8 MB 视频内存)。此驱动程序足以完成基本任务,但不提供硬件加速或高级图形功能。
    • 可以通过离散设备分配 (DDA) 使用受支持的 GPU 实现 GPU 加速,但是存在几个主要注意事项:
      • AMD GPU(特别是 Navi 和更旧的 GPU)通过 DDA 与 macOS 的兼容性通常较差。原生支持的 NVIDIA GPU(在 Windows 上使用 465 或更高版本的驱动程序)往往能获得最佳效果。
      • 目前不支持使用 Lilu 和 WhateverGreen 进行 GPU 补丁(有关跟踪,请参阅 #2299)。这也适用于其他使用 Lilu 的 kext,如 NootedRed/NootedRX。
  • 音频支持
    • 默认情况下,Hyper-V 不会向 macOS 公开音频设备。
    • 更多详情请参见 issue #9

Note

DDA 仅适用于 Windows Server 和 Microsoft Hyper-V Server 2016 及更高版本。Windows Pro 和 Windows Enterprise 用户的 Hyper-V 不支持 DDA。

iServices

要启用 iServices 功能,您可以:

  1. 使用 GenSMBIOS 生成 SMBIOS 数据
  • 按照 Dortania 的 iServices 指南 为您的机器生成新的 SMBIOS 数据。
  1. 对于此 EFI 的本地构建,自动修补现有 SMBIOS 数据。
  • 每次使用 .serialdata 文件运行构建时(使用现有数据或 GenSMBIOS 生成的数据),都会自动修补。

🔥 贡献

我们始终欢迎任何规模的贡献!

有关为该项目做出贡献的说明(和提示),请参阅 CONTRIBUTING.md

⚖️ 许可

BSD 3-Clause License

🌟 鸣谢

项目介绍

在 Windows Hyper-V 上运行 macOS 的 OpenCore 配置【此简介由AI生成】

定制我的领域
171.23 K65访问 GitHub