求RU EFI内存修改器

11.3 工具与应用程序

一些不依赖 OpenCore 的工具可以帮助调试固件和硬件。下面列出了一些已知的工具。虽然有些工具可以从 OpenCore 启动,但大部分工具都应该直接或从 OpenCoreShell 中单独运行。

这种方法在 Mac 和其他计算机上都可以使用。还有一种只能在 Mac 上的 HFS+ 或 APFS 分区上使用的方法:


注 2:为了能够使用 bless,你可能需要 。

注 3:为了能够正常启动,你可能需要 (如果有的话)。

一些已知的 UEFI 工具(内置工具已用 * 标出):

  • * — 测试 BeepGen 协议,生成不同频率和长度的音频信号。
  • * — 重置 NVRAM,以一个单独的工具呈现。
  • * — 解锁和回锁 NVRAM 保护,让其他工具在从 OpenCore 启动时能够获得完整的 NVRAM 访问权限。
  • * — 由 OpenCore 配置的 ,与绝大部分固件兼容。
  • — 执行 EPID 配置(需要配置证书数据)。

OpenCanopy 所需的图象资源位于 Resources 目录下,一些简单的资源(字体和图标)可以在 中获取。可以在网络上找到自定义图标(比如 和 )。

OpenCanopy 为 PickerAttributes 提供了全面的支持,并提供了一套可配置的内置图标集。默认选择的图标由 DefaultBackgroundColor 变量决定,当该变量的值定义为浅灰时,则使用 Old 前缀的图标,定义为其他颜色时则使用没有前缀名的图标。

预定义的图标放在 \EFI\OC\Resources\Image 目录下。下面提供了所支持的图标的完整列表(.icns 格式)。可选图标如未提供,将使用最接近的可用的图标。外置设备的条目将使用 Ext 前缀的图标(如 OldExtHardDrive.icns)。

:以下标注的所有尺寸均为 1x 缩放级别的标准尺寸,其他缩放级别的尺寸须作相应调整。

  • Left — 向左滚动(必需,最大尺寸 40x40)。
  • Right — 向右滚动(必需,最大尺寸 40x40)。

预定义的标签放在 \EFI\OC\Resources\Label 目录下。每个标签都有 .lbl.l2x 的后缀,以代表缩放级别。完整的标签列表如下所示。所有标签都是必需的。

:所有标签的高度必须为 12px,宽度不限。

字体格式对应于 。虽然有很多工具可以生成字体文件,但目前还是建议使用 来生成位图字体(),并使用 将其导出为二进制格式。

OpenRuntime 是一个 OpenCore 的插件,提供了对 OC_FIRMWARE_RUNTIME 协议的实现。该协议对 OpenCore 的部分功能提供了支持,而这部分功能由于需要 Runtime(如操作系统)中运行、因此无法内置在 OpenCore 中。该协议提供了包括但不限于如下功能:

  • NVRAM 隔离,能够保护所有变量避免被不信任的操作系统写入(如 DisableVariableWrite)。

音频支持为上游协议提供了一种与所选硬件和音频资源交互的方式。所有音频资源应该保存在 \EFI\OC\Resources\Audio 目录。目前支持的音频文件格式为 MP3 和 WAVE PCM。虽然支持哪种音频流格式取决于驱动程序,但大多数常见的音频卡都支持 44100 或 48000Hz 的 16 位立体声。

  • 音频本地化语言由两个字母的语言代码表示(如 en),中文、西班牙语和葡萄牙语除外。具体请看 来了解所有支持的本地化列表。
  • 音频路径是对应于文件标识符的基本文件名。macOS 引导程序的音频路径参考 。OpenCore 的音频路径参考 。唯一例外的是 OpenCore

变量的值来控制。当某一特定文件的音频本地化缺失时,将会使用英语(en)来代替。示例音频文件可以在 中找到。

此选项对于加载某些遵循 UEFI 驱动模型的 驱动程序(如文件系统驱动、音频输出驱动)很有用,因为这些驱动可能无法自行启动。此选项对会自动连接的驱动程序来说是不必要的,并且可能会稍微减慢启动速度。

:某些固件(特别是 Apple 的)仅连接包含操作系统的驱动器以加快启动过程。启用此选项可以在拥有多个驱动器时查看所有引导选项。

:所有协议实例的安装都优先于驱动程序的加载。

Description: 设计为用 plist dict 值填充,用于描述对特定固件和硬件功能要求很高的内存区域,这些区域不应该被操作系统使用。比如被 Intel HD 3000 破坏的第二个 256MB 区域,或是一个有错误的 RAM 的区域。

APFS 的 EFI 驱动内置在所有可以作为系统启动盘的 APFS 容器之中。这一选项将会根据基于 ScanPolicy 找到的 APFS 容器,从中加载 APFS 驱动。更多详情请查看 中的 EFI Jummpstart 章节。

代替通常情况下用于 APFS 驱动程序加载的分区句柄连接,每一个句柄都是递归连接的。这可能会比平时花费更多的时间,但是是某些固件访问 APFS 分区的唯一方法,比如在旧的惠普笔记本电脑上发现的那样。

这一选项不仅提供了进入 OpenCore 以后再插入 U 盘的支持,而且还允许了在 OpenCore 引导菜单下 APFS U 盘的热插拔。

APFS 驱动的版本号基于其发布日期。较旧版本的 APFS 驱动可能与较新的系统不兼容、或者有未修补的漏洞。通过这一选项可以避免 OpenCore 加载过旧版本的 APFS 驱动。

  • 0 — 使用默认数值。随着未来的更新,OpenCore 内置的默认数值也会不断更新。如果你会一直更新你的系统,我们推荐使用这一数值。目前默认数值为 。
  • -1 — 允许使用任何版本的 APFS 驱动(强烈不推荐)。
  • 其他数值 — 数值格式应为形如 的格式。你可以从 OpenCore 的启动日志和 中找到 APFS

APFS 驱动的版本号和 macOS 版本相关。较旧版本的 APFS 驱动可能与较新的系统不兼容、或者有未修补的漏洞。通过这一选项可以避免 OpenCore 加载过旧版本的 APFS 驱动。

  • 0 — 使用默认数值。随着未来的更新,OpenCore 内置的默认数值也会不断更新。如果你会一直更新你的系统,我们推荐使用这一数值。目前默认数值选自 App Store 中能够下载到的 High Sierra(000)。
  • -1 — 允许使用任何版本的 APFS 驱动(强烈不推荐)。

一般来说,这里包含了内置模拟音频控制器(HDEF)上的第一个音频编解码器地址。音频编解码器地址(比如 2)可以在调试日志中找到(已用粗斜体标出):

一般来说,这里包含了内置模拟音频控制器(HDEF)的设备路径,比如 PciRoot(0x0)/Pci(0x1b,0x0)。认可的音频控制器列表可以在调试日志中找到(已用粗斜体标出):

除此之外,该值还可以在 macOS 中通过 gfxutil -f HDEF 命令来获取。如果指定了空的设备路径,则会使用第一个可用的音频控制器。

一般来说,这里包含了内置模拟音频控制器(HDEF)的绿色输出的索引。调试日志中输出节点的数量如下(已用粗斜体标出):

找到正确端口的最快办法就是暴力地尝试 0N - 1 的值。

启用此设置可将音频播放从内置协议路由到音频控制器(AudioDevice)上指定编解码器(AudioCodec)的专用音频端口(AudioOut)。

当计算出的音量小于 MinimumVolume 时,屏幕阅读器将使用这个音量。当计算出的音量小于 MinimumVolume,则不播放 Mac 特有的开机启动声音。

  • Enabled — 无条件启用开机声音。
  • Disabled — 无条件禁用开机声音。

Enable 是可以与 StartupMute NVRAM 变量分开使用的,以此来避免在固件能够播放启动铃声时发生冲突。

某些编解码器在重新配置后需要特定延迟(由供应商提供,例如音量设置),此选项可对其进行配置。一般来说,必要的延迟时间可能长达 0.5 秒。

SystemAudioVolume 读取的音量范围会因编解码器的不同而不同。为了将 [0, 127] 范围内的值转换为原始音量范围 [0, 100] 内的值,所读取的值按比例调整为 VolumeAmplifier 的百分数:

:macOS 中使用的转换并不是线性的,但非常接近,因此我们忽略了这种细微差别。

显然,有些主板,如 GA Z77P-D3,可能会在 EFI_INPUT_KEY 中返回所有输入协议的未初始化数据。这个选项会舍弃那些既不是 ASCII 码,也不是 UEFI 规范中定义的键(见版本 2.8 的表 107 和 108)。

AppleKeyMapAggregator 协议应该包含当前按下的键的固定长度的缓冲。但是大部分驱动程序仅将按键按下报告为中断、并且按住按键会导致在一定的时间间隔后再提交按下行为。一旦超时到期,我们就是用超时从缓冲区中删除一次按下的键,并且没有新提交。

此选项允许根据你的平台设置此超时。在大多数平台上有效的推荐值为 5 毫秒。作为参考,在 VMWare 上按住一个键大约每 2 毫秒就会重复一次,而在 APTIO V 上是 3 - 4 毫秒。因此,可以在较快的平台上设置稍低的值、在较慢的平台设置稍高的值,以提高响应速度。

:某些平台可能需要更高或者更低的值。例如,当 OpenCanopy 检测到按键丢失的时候,尝试稍高的值(比如增加到 10),当检测到按键停滞时,尝试稍低的值。由于每个平台各不相同,因此检查从 125 的每个值可能会比较合理。

KeyForgetThreshold 类似,这一选项适用于按键提交的顺序。为了能够识别同时按下的按键,我们需要设置一个超时时间,在这个时间内可以假定这两个按键是同时按下的。

对于 VMWare,同时按下多个键的间隔是 2 毫秒。对于 APTIO V 平台为 1 毫秒。一个接一个地按下按键会导致 6 毫秒和 10 毫秒的延迟。此选项的建议值为 2 毫秒,但对于较快的平台可以选取较小的值,反之亦然。

  • Auto — 从下述选项中自动选择

:目前 V1V2AMI 区别于 Auto,只对特定的协议进行过滤。这种情况在未来的版本中可能会改变。

此选项对于 Option 键位于 Command 右侧的键盘来说会很有用。

目前只支持 ASUS 值,使用的是 Z87 和 Z97 主板上的特殊协议。更多详情请参考 。如果启用了 PointerSupport,此处值不能为空。

设置较低的值可以提高界面和输入处理性能的响应能力。建议值为 50000(即 5 毫秒)或稍高一些。选择 ASUS Z87 主板时,请使用 60000,苹果主板请使用 100000。你也可以将此值保留为 0,由 OpenCore 自动计算。

目前支持两种渲染器:BuiltinSystemSystem 渲染器使用固件服务进行文本渲染。Builtin 渲染器则绕过固件服务,自行渲染文本。不同的渲染器支持的选项也不同。建议使用 Builtin 渲染器,因为它支持 HiDPI 模式,并能够使用全屏分辨率。

模式下显示,而图形可以在任何模式下绘制。由于 UEFI 规范并不要求这样做,因此具体的行为各不相同。

有效值为文本渲染器和渲染模式的组合:

:某些 Mac,比如 MacPro5,1,在使用较新的 GPU 时,可能会出现控制台输出中断的情况,因此可能只有 BuiltinGraphics 对它们有效。

设置为空字符串则不会改变控制台模式。设置为 Max 则会尝试最大的可用控制台模式。目前 Builtin 文本渲染器只支持一种控制台模式,所以该选项可以忽略。

:在大多数固件上,这个字段最好留空。

  • 设置为 WxH@Bpp(如 )或 WxH(如 )格式的字符串,向 GOP 请求自定义分辨率。
  • 设置为空字符串,不改变屏幕分辨率。
  • 设置为 Max,尝试使用最大的可用屏幕分辨率。

:当控制台句柄没有 GOP 协议时,这些设置会失败。当固件不再提供时,可以将 ProvideConsoleGop 设置为 true 并添加。

时,将尝试从所连接的显示器的 EDID 中提取最大的可用分辨率。

:该选项依赖 协议。目前只有

Description: 有些固件在从图形模式切换到文本模式时,只会清除部分屏幕、而会留下一部分之前绘制的图像。启用这一选项后,在切换到文本模式之前会用黑色填充整个图形屏幕。

:这一选项只会在 System 渲染器上生效。

在某些固件上,这样做可能会提供更优的性能,甚至修复渲染问题,比如 MacPro5,1。但是,除非有明显的好处,否则还是建议不要使用这个选项,因为可能会导致滚动速度变慢。

Description: 选择固件同时在图形和文本两种模式下在屏幕上输出文本。通常不会这样做,因为随机的文本可能会出现在图形图像上,并导致用户界面出错。将此选项设置为 true 时,会在控制台处于与 Text 不同的模式时,舍弃所有文本输出。

:这一选项只会在 System 渲染器上生效。

:这一选项只会在 System 渲染器上生效。

macOS bootloader 要求控制台句柄上必须有 GOP 或 UGA(适用于 10.4 EfiBoot),但 UEFI 规范并未涵盖图形协议的确切位置。此选项会确保 GOP 和 UGA(如果存在)在控制台句柄上可用。

:这个选项也会替换掉控制台句柄上损坏的 GOP 协议,在使用较新的 GPU 的 MacPro5,1 时可能会出现这种情况。

当通过 GOP 改变屏幕分辨率时,某些固件需要重新连接产生控制台协议(简单的文本输出)的控制器,否则它们不会根据新的分辨率生成文本。

:当 OpenCore 从 Shell 启动时,这个逻辑可能会导致某些主板黑屏,因此这个选项是非必须的。在 0.5.2 之前的版本中,这个选项是强制性的,不可配置。除非需要,否则请不要使用该选项。

:这一选项只会在 System 渲染器上生效。在所有已知的受影响的系统中,ConsoleMode 必须设置为空字符串才能正常工作。

有些固件不会去实现老旧的 UGA 协议,但是有些更老的 EFI 应用程序(如 10.4 的 EfiBoot)可能需要用它来进行屏幕输出。

每次只能有一组音频协议可用,所以如果为了在 Mac 系统上的 OpenCore 用户界面实现其中一些协议的音频播放,这一设置应该启用。

:后端音频驱动需要在 UEFI Audio 部分进行配置,以便这些协议能够流式传输音频。

:某些 Mac 设备(如 MacPro5,1)虽然兼容 APFS,但是其 Apple Boot Policy 协议包含了恢复分区检测问题,因此也建议启用这一选项。

:包括 VMWare 在内的多个虚拟机在 HiDPI 模式下光标会损坏,因此建议为所有虚拟机启用这一选项。

查看是否会出现禁行图标,来诊断你的固件是否需要这一 Quirk。一般来说,APTIO V(Haswell 和更早的平台)之前的平台都会受到影响。

:此设置可禁用固件的各种安全功能,因此也会同时破坏安全启动策略。如果打算使用 UEFI 安全启动,请勿启用此项。

SATA 控制器。未来应该会找到一个更好的方法。如果需要启用这一选项,设置 3-5 秒的延时就可以了。

:虽然该选项不会对不受影响的固件造成损害,但在不需要的情况下不建议启用。

Description: 尝试从固件驱动程序中分离 USB 控制器所有权。尽管大多数固件都设法正确执行了该操作或者提供有一个选项,但某些固件没有,从而导致操作系统可能会在启动时冻结。除非需要,否则不建议启用这一选项。

启用这个 Quirk 需要用到在 OpenRuntime.efi 中实现的 OC_FIRMWARE_RUNTIME 协议。当固件删除不兼容的启动条目时,这一 Quirk 可以让默认的启动条目保存在引导菜单中。简单地说就是,如果你想使用「系统偏好设置」中的「」,就必须启用这一 Quirk。

  • 囚禁操作系统,使其只受 OpenCore 引导环境的控制,从而提高了安全性。
  • 如遇到中途需要通过 OpenCore 来重启的情况,操作系统不会搞乱 OpenCore 的引导优先级,保证了系统更新和休眠唤醒的流畅性。
  • macOS 等潜在的不兼容的启动项,现在不会被意外删除或损坏了。

这个 Quirk 的主要目的是在运行 XNU 调试内核时,在一些服务器和笔记本型号上实现早期引导 TSC 同步。对于调试内核,在任何 Kext 可能导致其他解决方案出现问题之前,TSC 需要在各个内核之间保持同步。Timeout 以微秒为单位,取决于平台上存在的核心数量,推荐的起始值是 500000

这是一个实验性的 Quirk,只能被用于上述问题。在其他情况下,这个 Quirk 可能会导致操作系统不稳定,所以并不推荐使用。在其他情况下,推荐的解决办法是安装一个内核驱动,如 、 或 (是 VoodooTSCSync 的一个更有针对性的变种,适用于较新的笔记本电脑)。

:这个 Quirk 不能取代内核驱动的原因是它不能在 ACPI S3 模式(睡眠唤醒)下运行,而且 UEFI 固件提供的多核心支持非常有限,无法精确地更新 MSR 寄存器。

:如果惠普笔记本在 OpenCore 界面没有看到引导项,启用这一选项。

Description: 保留内存区域的起始地址,该区域应被分配为保留区,有效地将此类型的内存标记标记为操作系统不可访问。

这里写的地址必须是内存映射的一部分,具有 EfiConventionalMemory 类型,并且按页对齐(4KB)。

:禁用 CSM 后,某些固件可能不会为 S3(睡眠)和 S4(休眠)分配内存区域,因此导致唤醒失败。你可以分别比较禁用和启用 CSM 的内存映射,从低层内存中找到这些区域,并保留该区域来修复这个问题。详见 Sample.plist

旧版操作系统的安装可能比较复杂,但有时出于各种原因还是需要用到。主板标识符和 CPUID 的兼容性是旧版操作系统正常运行的基础,除此之外还有一些细枝末节的事情需要注意。本章节将尽量阐述与旧版 macOS 操作系统相关的一系列常见问题。

尽管较新的操作系统可以通过互联网下载,但旧版操作系统并不是每个次要版本都有安装介质的,因此要想获得兼容的发行版,可能需要下载特定设备的镜像,并在必要时进行修改。Mac 电脑随附的 macOS 旧版本和旧版号列表,可以从这篇 Apple 支持的 中找到,但由于它并不一定准确,下面列出了一些旧版 Apple 操作系统最后发布的版本。

    的情况下运行恢复功能,同时也避免了 OpenPartitionDxe的需求。
  • 缓存的内核映像通常不包括网络(IONetworkingFamily)或音频(IOAudioFamily)的家族驱动,这些家族驱动往往需要使用 Force 加载来注入。
  • macOS 10.8 之前的系统不支持 KASLR slide,因此会导致内存较低的固件分配内存失败,详见 。
    -no_compat_check来忽略兼容性检查。如果你拥有 macOS 10.6 的合法副本,又不想被上述限制所约束,可以在 (或 )找到无机型限制的修改版镜像(ACDT后缀),更多细节在 DIGEST.txt中。记住,这些都是经过 OpenCore 测试的最早的 macOS 10.6 版本。

true。仅更新映像中某一的文件而不影响到其他文件是相当困难的,而且还有可能因为内核缓存日期的改变而导致启动速度变慢,因此建议按照如下命令重建映像:

  • 这个版本的 macOS 有一个硬性要求,即需要两张光盘或两个 USB 安装介质来访问第二张 DVD 盘安装介质上的所有可选包。
  • 的合法副本,可以在 (或 )找到无机型限制的修改版 8R4088镜像(后缀为

OpenCore 的设计初衷是在 固件 和 操作系统 之间提供一个安全的启动链。在大多数 x86 平台上,可信加载(Trusted Loading)是通过 模式实现的。OpenCore 不仅完全支持这种模式,还扩展了它的功能,以确保通过 进行配置的加密存储,并使用自定义的验证过程向操作系统提供可信加载,例如 。正确的安全启动链需要通过以下步骤来仔细配置:

  1. 如果要启动的系统是 macOS,则需要通过设置 SecureBootModel 来启用 Apple 安全启动。请注意,并不是每个 macOS 版本都能使用 Apple 安全启动,具体限制详见 章节。
  2. 旧的 DMG 恢复镜像往往很脆弱、易受攻击,如果担心因为加载它而突破防线,可以通过设置 DmgLoadingDisabled 来禁用 DMG 加载。非必需,但建议使用。参阅 部分来权衡利弊。apfs.efi 驱动也可以达到相同效果。
  3. 确保你想要运行的操作系统不加载 Force 驱动也能正常启动。
  4. 确保使用 ScanPolicy 限制加载不受信任的设备。要想做到足够安全,最好的办法是禁止加载 所有可移动设备 和 未知的文件系统。
  5. 使用私钥给所有已安装的驱动程序和工具签名。不要对提供管理员权限的工具(如 UEFI Shell)签名。
  6. 加密存储你的配置,详见 部分。
  7. 如果需要用到第三方操作系统(非微软或 Apple 制造)的 bootloader,也同样为它们签名。对于 Linux,可以选择安装微软签名的 Shim bootloader,具体解释见 。
  8. 在 BIOS 中开启 UEFI 安全启动,并用自己的私钥安装证书。很多文章都介绍了生成证书的具体方法,比如 ,本文档不再赘述。如果需要启动 Windows,还需要添加 证书。如果需要启动 Option ROM,或决定使用已签名的 Linux 驱动程序,还需要添加 。
  9. 设置密码保护防止固件设置被篡改,避免 UEFI 安全启动在你不知情的情况下被禁用。

虽然 OpenCore 并没有提供官方的 Windows 支持,但是使用 Boot Camp 安装 64 位 UEFI Windows(即 Windows 8 及更高版本)应该是可以正常工作的。安装第三方 UEFI、或者仅部分支持 UEFI 引导的系统(如 Windows 7)可能需要额外注意。不论如何,记住以下几点:

  • macOS 要求硬盘中的第一份分区为 EFI 分区,并且与 Windows 的默认布局不支持。尽管 OpenCore 确实提供了一个 ,但是强烈建议不要依赖这个方法。
  • Windows 系统可能需要重新激活。为了避免这种情况发生,请考虑将 SystemUUID 设置为原始固件的 UUID。请注意,在旧固件上 UUID 可能是无效的(非随机的)。如果你还遇到了什么问题,可以考虑使用 HWID 或 KMS38 的 Windows 许可证。从 OpenCore 0.5.8 开始,你还可以通过设置 UpdateSMBIOSModeCustom 来避免 OEM 激活失效。Windows 激活的细节不在本文档的讨论范围内,你应该能够在网上查找到相关资料。

2. 我需要安装其他什么软件吗?

在大多数情况下,要启用多操作系统切换、安装相关驱动程序,你将需要 提供的 Windows 支持软件。为了简化下载过程、或者配置硬盘中已经安装好的 Windows,可以使用 这个实用软件。请注意在使用 Brigadier 之前,你可能需要先下载并安装 。

记住,一定要使用最新版本的 Boot Camp 的 Windows 支持软件。6.1 之前的版本不支持 APFS 文件系统、因此无法运行。要下载最新的软件,请将最新 Mac 的型号作为参数传递给 Brigadier,如 ./brigadier.exe -m iMac19,1。之后,在不受支持的 Mac 型号上安装 Boot Camp,请以管理员身份运行

译者注:在资源管理器下,按住 Shift 同时右击窗口中空白处,此时菜单中会显示「在此处运行 PowerShell」,即在当前目录下运行 PowerShell。但是这种方式启动的 PowerShell 不具备管理员权限。

尽管 Boot Camp 提供的 Windows 支持软件解决了大多数兼容性问题,但是有时候您还是需要手动解决一些问题:

  • 要反转鼠标滚轮的滚动方向,必须按照 提供的方法、设置 FlipFlopWheel 的值为 1

    
    

    如果需要撤销更改,可以使用下述命令:

    
    
  • 译者注:众所周知,Windows 将硬件时间视为本地时间,而 macOS 会计算 UTC 后当做系统时间。通过修改上述提到的注册表值,可以让 Windows 将硬件时间视为 UTC 时间。用到的 CMD 命令如下所示:

  • 译者注:切记不要在 Windows 下写入 APFS 或 HFS,十有八九你会导致分区表错误和无法恢复的数据丢失。别怪我们没有警告过你!!

Boot Camp 使用 GPT 分区表获取每个引导选项的名称。独立安装 Windows 后,你必须手动重新标记分区。这可以通过许多工具完成,比如开源的 ,使用方法如下:

虽然我们仍然不建议使用这些经常破坏文件系统的驱动程序(我们推荐使用 macOS 内建的 NTFS 读写支持,可以通过 或 启用),但是这些驱动程序的厂商也提供了他们各自的解决方案,在这里我们仅列举两个:

译者注:虽然 acidanthera 团队推荐使用 macOS 内置的 NTFS 支持,但是译者强烈反对这种方法(不论是直接方法还是使用类似 Mounty 的第三方工具)。修改 fstab 的风险是极高的。在你清楚你在做什么之前,不要轻举妄动!!

与其他硬件相关的项目类似,OpenCore 也支持审计与调试。使用 NOOPTDEBUG 构建版本(而非 RELEASE 构建版本)可以产生更多的调试输出。对于 NOOPT 构建版本,你还可以使用 GDB 或 IDA Pro 进行调试。对于 GDB 请查看 相关页面;对于 IDA Pro,你需要 7.3 或更高版本,更多详细信息请参考 IDA Pro 提供的页面:。

可以使用串口调试来获取启动过程中的日志。串口调试是在 Target 中开启的,例如 0xB 代表在屏幕上显示并输出串行。可使用 SerialInit 配置选项来初始化串行。对于 macOS 来说,最好是选择基于 CP2102 的 UART 设备。将主板 TX 连接到 USB UART

务必记得在固件设置中启用 COM 口,一定不要使用超过 1 米的 USB 线缆,以免输出数据损坏。如果要额外启用 XNU 内核串行输出,则需要添加 debug=0x8 启动参数。

1. 啊呀呀呀我系统没法启动了我该怎么看日志啊?

通常情况下,获取实际的错误信息就足够了。为此,请确保:

如果你在日志中看不出明显的错误,请逐一检查 Quirks 部分中可用的 hacks。例如,对于 Early Boot 出现的问题(如 OpenCore 启动菜单无法显示),通过 UEFI Shell(随 OpenCore 打包在一起)可以查看相关调试信息。

2. macOS 启动失败我该怎么调试?

  • 可以考虑通过串行端口来检查早期的内核启动失败。为此你可能需要用到 debug=0x108serial=5msgbuf=1048576 启动参数。如果在串行初始化前就失败了,Sample.plist 中有相关补丁供你参考。

3. 如何自定义启动项?

4. 如何选择默认启动的系统?

OpenCore 使用 UEFI 首选启动项 来选择默认的启动项。设置的方式随 BIOS 不同而不同,具体请参考 macOS 或 Windows 控制面板。

由于使用 OpenCore 提供的 BOOTx64.efi 作为首选启动项会限制这项功能(可能还会导致一些固件删除不兼容的引导选项),我们强烈建议你启用 RequestBootVarRouting Quirk,这会将你所做的选择保留在 OpenCore

5. 安装 macOS 最简单的方法是什么?

文件改变条目显示的文字。

如果你需要进行离线安装,请参考 。除了通过 App Store 或 系统更新,你还可以使用 下载 macOS 镜像文件。

6. 为什么无法加载 Recovery 恢复镜像 进行在线安装?

可能是因为你没带 HFS+ 驱动。目前我们所知道的 Recovery 分区全都是 HFS+ 文件系统。

可以,没有必要,但请加大力度

OpenCore 支持包括 MacPro 5,1 和虚拟机在内的大部分较新的 Mac 型号。不过,OpenCore 有关在 Mac 硬件上使用的具体细节微乎其微。你可以在 查看相关讨论。

对于 x86 机器码来说, 无法进行大小不同的替换。对于 ACPI 代码来说这是有风险的,而且在技术上这与替换 ACPI 表等价,所以 OpenCore 没有实现。更多详细的解答可以在 上和本文档的 ACPI 章节找到。

SyncRuntimePermissions)由于没有明确的参考,因此需要自行尝试最佳组合。详细内容请参考本文档中对这些 Quirk 的描述。

11.3 工具与应用程序

一些不依赖 OpenCore 的工具可以帮助调试固件和硬件。下面列出了一些已知的工具。虽然有些工具可以从 OpenCore 启动,但大部分工具都应该直接或从 OpenCoreShell 中单独运行。

这种方法在 Mac 和其他计算机上都可以使用。还有一种只能在 Mac 上的 HFS+ 或 APFS 分区上使用的方法:


注 2:为了能够使用 bless,你可能需要 。

注 3:为了能够正常启动,你可能需要 (如果有的话)。

一些已知的 UEFI 工具(内置工具已用 * 标出):

  • * — 测试 BeepGen 协议,生成不同频率和长度的音频信号。
  • * — 重置 NVRAM,以一个单独的工具呈现。
  • * — 解锁和回锁 NVRAM 保护,让其他工具在从 OpenCore 启动时能够获得完整的 NVRAM 访问权限。
  • * — 由 OpenCore 配置的 ,与绝大部分固件兼容。
  • — 执行 EPID 配置(需要配置证书数据)。

OpenCanopy 所需的图象资源位于 Resources 目录下,一些简单的资源(字体和图标)可以在 中获取。可以在网络上找到自定义图标(比如 和 )。

OpenCanopy 为 PickerAttributes 提供了全面的支持,并提供了一套可配置的内置图标集。默认选择的图标由 DefaultBackgroundColor 变量决定,当该变量的值定义为浅灰时,则使用 Old 前缀的图标,定义为其他颜色时则使用没有前缀名的图标。

预定义的图标放在 \EFI\OC\Resources\Image 目录下。下面提供了所支持的图标的完整列表(.icns 格式)。可选图标如未提供,将使用最接近的可用的图标。外置设备的条目将使用 Ext 前缀的图标(如 OldExtHardDrive.icns)。

:以下标注的所有尺寸均为 1x 缩放级别的标准尺寸,其他缩放级别的尺寸须作相应调整。

  • Left — 向左滚动(必需,最大尺寸 40x40)。
  • Right — 向右滚动(必需,最大尺寸 40x40)。

预定义的标签放在 \EFI\OC\Resources\Label 目录下。每个标签都有 .lbl.l2x 的后缀,以代表缩放级别。完整的标签列表如下所示。所有标签都是必需的。

:所有标签的高度必须为 12px,宽度不限。

字体格式对应于 。虽然有很多工具可以生成字体文件,但目前还是建议使用 来生成位图字体(),并使用 将其导出为二进制格式。

OpenRuntime 是一个 OpenCore 的插件,提供了对 OC_FIRMWARE_RUNTIME 协议的实现。该协议对 OpenCore 的部分功能提供了支持,而这部分功能由于需要 Runtime(如操作系统)中运行、因此无法内置在 OpenCore 中。该协议提供了包括但不限于如下功能:

  • NVRAM 隔离,能够保护所有变量避免被不信任的操作系统写入(如 DisableVariableWrite)。

音频支持为上游协议提供了一种与所选硬件和音频资源交互的方式。所有音频资源应该保存在 \EFI\OC\Resources\Audio 目录。目前支持的音频文件格式为 MP3 和 WAVE PCM。虽然支持哪种音频流格式取决于驱动程序,但大多数常见的音频卡都支持 44100 或 48000Hz 的 16 位立体声。

  • 音频本地化语言由两个字母的语言代码表示(如 en),中文、西班牙语和葡萄牙语除外。具体请看 来了解所有支持的本地化列表。
  • 音频路径是对应于文件标识符的基本文件名。macOS 引导程序的音频路径参考 。OpenCore 的音频路径参考 。唯一例外的是 OpenCore

变量的值来控制。当某一特定文件的音频本地化缺失时,将会使用英语(en)来代替。示例音频文件可以在 中找到。

此选项对于加载某些遵循 UEFI 驱动模型的 驱动程序(如文件系统驱动、音频输出驱动)很有用,因为这些驱动可能无法自行启动。此选项对会自动连接的驱动程序来说是不必要的,并且可能会稍微减慢启动速度。

:某些固件(特别是 Apple 的)仅连接包含操作系统的驱动器以加快启动过程。启用此选项可以在拥有多个驱动器时查看所有引导选项。

:所有协议实例的安装都优先于驱动程序的加载。

Description: 设计为用 plist dict 值填充,用于描述对特定固件和硬件功能要求很高的内存区域,这些区域不应该被操作系统使用。比如被 Intel HD 3000 破坏的第二个 256MB 区域,或是一个有错误的 RAM 的区域。

APFS 的 EFI 驱动内置在所有可以作为系统启动盘的 APFS 容器之中。这一选项将会根据基于 ScanPolicy 找到的 APFS 容器,从中加载 APFS 驱动。更多详情请查看 中的 EFI Jummpstart 章节。

代替通常情况下用于 APFS 驱动程序加载的分区句柄连接,每一个句柄都是递归连接的。这可能会比平时花费更多的时间,但是是某些固件访问 APFS 分区的唯一方法,比如在旧的惠普笔记本电脑上发现的那样。

这一选项不仅提供了进入 OpenCore 以后再插入 U 盘的支持,而且还允许了在 OpenCore 引导菜单下 APFS U 盘的热插拔。

APFS 驱动的版本号基于其发布日期。较旧版本的 APFS 驱动可能与较新的系统不兼容、或者有未修补的漏洞。通过这一选项可以避免 OpenCore 加载过旧版本的 APFS 驱动。

  • 0 — 使用默认数值。随着未来的更新,OpenCore 内置的默认数值也会不断更新。如果你会一直更新你的系统,我们推荐使用这一数值。目前默认数值为 。
  • -1 — 允许使用任何版本的 APFS 驱动(强烈不推荐)。
  • 其他数值 — 数值格式应为形如 的格式。你可以从 OpenCore 的启动日志和 中找到 APFS

APFS 驱动的版本号和 macOS 版本相关。较旧版本的 APFS 驱动可能与较新的系统不兼容、或者有未修补的漏洞。通过这一选项可以避免 OpenCore 加载过旧版本的 APFS 驱动。

  • 0 — 使用默认数值。随着未来的更新,OpenCore 内置的默认数值也会不断更新。如果你会一直更新你的系统,我们推荐使用这一数值。目前默认数值选自 App Store 中能够下载到的 High Sierra(000)。
  • -1 — 允许使用任何版本的 APFS 驱动(强烈不推荐)。

一般来说,这里包含了内置模拟音频控制器(HDEF)上的第一个音频编解码器地址。音频编解码器地址(比如 2)可以在调试日志中找到(已用粗斜体标出):

一般来说,这里包含了内置模拟音频控制器(HDEF)的设备路径,比如 PciRoot(0x0)/Pci(0x1b,0x0)。认可的音频控制器列表可以在调试日志中找到(已用粗斜体标出):

除此之外,该值还可以在 macOS 中通过 gfxutil -f HDEF 命令来获取。如果指定了空的设备路径,则会使用第一个可用的音频控制器。

一般来说,这里包含了内置模拟音频控制器(HDEF)的绿色输出的索引。调试日志中输出节点的数量如下(已用粗斜体标出):

找到正确端口的最快办法就是暴力地尝试 0N - 1 的值。

启用此设置可将音频播放从内置协议路由到音频控制器(AudioDevice)上指定编解码器(AudioCodec)的专用音频端口(AudioOut)。

当计算出的音量小于 MinimumVolume 时,屏幕阅读器将使用这个音量。当计算出的音量小于 MinimumVolume,则不播放 Mac 特有的开机启动声音。

  • Enabled — 无条件启用开机声音。
  • Disabled — 无条件禁用开机声音。

Enable 是可以与 StartupMute NVRAM 变量分开使用的,以此来避免在固件能够播放启动铃声时发生冲突。

某些编解码器在重新配置后需要特定延迟(由供应商提供,例如音量设置),此选项可对其进行配置。一般来说,必要的延迟时间可能长达 0.5 秒。

SystemAudioVolume 读取的音量范围会因编解码器的不同而不同。为了将 [0, 127] 范围内的值转换为原始音量范围 [0, 100] 内的值,所读取的值按比例调整为 VolumeAmplifier 的百分数:

:macOS 中使用的转换并不是线性的,但非常接近,因此我们忽略了这种细微差别。

显然,有些主板,如 GA Z77P-D3,可能会在 EFI_INPUT_KEY 中返回所有输入协议的未初始化数据。这个选项会舍弃那些既不是 ASCII 码,也不是 UEFI 规范中定义的键(见版本 2.8 的表 107 和 108)。

AppleKeyMapAggregator 协议应该包含当前按下的键的固定长度的缓冲。但是大部分驱动程序仅将按键按下报告为中断、并且按住按键会导致在一定的时间间隔后再提交按下行为。一旦超时到期,我们就是用超时从缓冲区中删除一次按下的键,并且没有新提交。

此选项允许根据你的平台设置此超时。在大多数平台上有效的推荐值为 5 毫秒。作为参考,在 VMWare 上按住一个键大约每 2 毫秒就会重复一次,而在 APTIO V 上是 3 - 4 毫秒。因此,可以在较快的平台上设置稍低的值、在较慢的平台设置稍高的值,以提高响应速度。

:某些平台可能需要更高或者更低的值。例如,当 OpenCanopy 检测到按键丢失的时候,尝试稍高的值(比如增加到 10),当检测到按键停滞时,尝试稍低的值。由于每个平台各不相同,因此检查从 125 的每个值可能会比较合理。

KeyForgetThreshold 类似,这一选项适用于按键提交的顺序。为了能够识别同时按下的按键,我们需要设置一个超时时间,在这个时间内可以假定这两个按键是同时按下的。

对于 VMWare,同时按下多个键的间隔是 2 毫秒。对于 APTIO V 平台为 1 毫秒。一个接一个地按下按键会导致 6 毫秒和 10 毫秒的延迟。此选项的建议值为 2 毫秒,但对于较快的平台可以选取较小的值,反之亦然。

  • Auto — 从下述选项中自动选择

:目前 V1V2AMI 区别于 Auto,只对特定的协议进行过滤。这种情况在未来的版本中可能会改变。

此选项对于 Option 键位于 Command 右侧的键盘来说会很有用。

目前只支持 ASUS 值,使用的是 Z87 和 Z97 主板上的特殊协议。更多详情请参考 。如果启用了 PointerSupport,此处值不能为空。

设置较低的值可以提高界面和输入处理性能的响应能力。建议值为 50000(即 5 毫秒)或稍高一些。选择 ASUS Z87 主板时,请使用 60000,苹果主板请使用 100000。你也可以将此值保留为 0,由 OpenCore 自动计算。

目前支持两种渲染器:BuiltinSystemSystem 渲染器使用固件服务进行文本渲染。Builtin 渲染器则绕过固件服务,自行渲染文本。不同的渲染器支持的选项也不同。建议使用 Builtin 渲染器,因为它支持 HiDPI 模式,并能够使用全屏分辨率。

模式下显示,而图形可以在任何模式下绘制。由于 UEFI 规范并不要求这样做,因此具体的行为各不相同。

有效值为文本渲染器和渲染模式的组合:

:某些 Mac,比如 MacPro5,1,在使用较新的 GPU 时,可能会出现控制台输出中断的情况,因此可能只有 BuiltinGraphics 对它们有效。

设置为空字符串则不会改变控制台模式。设置为 Max 则会尝试最大的可用控制台模式。目前 Builtin 文本渲染器只支持一种控制台模式,所以该选项可以忽略。

:在大多数固件上,这个字段最好留空。

  • 设置为 WxH@Bpp(如 )或 WxH(如 )格式的字符串,向 GOP 请求自定义分辨率。
  • 设置为空字符串,不改变屏幕分辨率。
  • 设置为 Max,尝试使用最大的可用屏幕分辨率。

:当控制台句柄没有 GOP 协议时,这些设置会失败。当固件不再提供时,可以将 ProvideConsoleGop 设置为 true 并添加。

时,将尝试从所连接的显示器的 EDID 中提取最大的可用分辨率。

:该选项依赖 协议。目前只有

Description: 有些固件在从图形模式切换到文本模式时,只会清除部分屏幕、而会留下一部分之前绘制的图像。启用这一选项后,在切换到文本模式之前会用黑色填充整个图形屏幕。

:这一选项只会在 System 渲染器上生效。

在某些固件上,这样做可能会提供更优的性能,甚至修复渲染问题,比如 MacPro5,1。但是,除非有明显的好处,否则还是建议不要使用这个选项,因为可能会导致滚动速度变慢。

Description: 选择固件同时在图形和文本两种模式下在屏幕上输出文本。通常不会这样做,因为随机的文本可能会出现在图形图像上,并导致用户界面出错。将此选项设置为 true 时,会在控制台处于与 Text 不同的模式时,舍弃所有文本输出。

:这一选项只会在 System 渲染器上生效。

:这一选项只会在 System 渲染器上生效。

macOS bootloader 要求控制台句柄上必须有 GOP 或 UGA(适用于 10.4 EfiBoot),但 UEFI 规范并未涵盖图形协议的确切位置。此选项会确保 GOP 和 UGA(如果存在)在控制台句柄上可用。

:这个选项也会替换掉控制台句柄上损坏的 GOP 协议,在使用较新的 GPU 的 MacPro5,1 时可能会出现这种情况。

当通过 GOP 改变屏幕分辨率时,某些固件需要重新连接产生控制台协议(简单的文本输出)的控制器,否则它们不会根据新的分辨率生成文本。

:当 OpenCore 从 Shell 启动时,这个逻辑可能会导致某些主板黑屏,因此这个选项是非必须的。在 0.5.2 之前的版本中,这个选项是强制性的,不可配置。除非需要,否则请不要使用该选项。

:这一选项只会在 System 渲染器上生效。在所有已知的受影响的系统中,ConsoleMode 必须设置为空字符串才能正常工作。

有些固件不会去实现老旧的 UGA 协议,但是有些更老的 EFI 应用程序(如 10.4 的 EfiBoot)可能需要用它来进行屏幕输出。

每次只能有一组音频协议可用,所以如果为了在 Mac 系统上的 OpenCore 用户界面实现其中一些协议的音频播放,这一设置应该启用。

:后端音频驱动需要在 UEFI Audio 部分进行配置,以便这些协议能够流式传输音频。

:某些 Mac 设备(如 MacPro5,1)虽然兼容 APFS,但是其 Apple Boot Policy 协议包含了恢复分区检测问题,因此也建议启用这一选项。

:包括 VMWare 在内的多个虚拟机在 HiDPI 模式下光标会损坏,因此建议为所有虚拟机启用这一选项。

查看是否会出现禁行图标,来诊断你的固件是否需要这一 Quirk。一般来说,APTIO V(Haswell 和更早的平台)之前的平台都会受到影响。

:此设置可禁用固件的各种安全功能,因此也会同时破坏安全启动策略。如果打算使用 UEFI 安全启动,请勿启用此项。

SATA 控制器。未来应该会找到一个更好的方法。如果需要启用这一选项,设置 3-5 秒的延时就可以了。

:虽然该选项不会对不受影响的固件造成损害,但在不需要的情况下不建议启用。

Description: 尝试从固件驱动程序中分离 USB 控制器所有权。尽管大多数固件都设法正确执行了该操作或者提供有一个选项,但某些固件没有,从而导致操作系统可能会在启动时冻结。除非需要,否则不建议启用这一选项。

启用这个 Quirk 需要用到在 OpenRuntime.efi 中实现的 OC_FIRMWARE_RUNTIME 协议。当固件删除不兼容的启动条目时,这一 Quirk 可以让默认的启动条目保存在引导菜单中。简单地说就是,如果你想使用「系统偏好设置」中的「」,就必须启用这一 Quirk。

  • 囚禁操作系统,使其只受 OpenCore 引导环境的控制,从而提高了安全性。
  • 如遇到中途需要通过 OpenCore 来重启的情况,操作系统不会搞乱 OpenCore 的引导优先级,保证了系统更新和休眠唤醒的流畅性。
  • macOS 等潜在的不兼容的启动项,现在不会被意外删除或损坏了。

这个 Quirk 的主要目的是在运行 XNU 调试内核时,在一些服务器和笔记本型号上实现早期引导 TSC 同步。对于调试内核,在任何 Kext 可能导致其他解决方案出现问题之前,TSC 需要在各个内核之间保持同步。Timeout 以微秒为单位,取决于平台上存在的核心数量,推荐的起始值是 500000

这是一个实验性的 Quirk,只能被用于上述问题。在其他情况下,这个 Quirk 可能会导致操作系统不稳定,所以并不推荐使用。在其他情况下,推荐的解决办法是安装一个内核驱动,如 、 或 (是 VoodooTSCSync 的一个更有针对性的变种,适用于较新的笔记本电脑)。

:这个 Quirk 不能取代内核驱动的原因是它不能在 ACPI S3 模式(睡眠唤醒)下运行,而且 UEFI 固件提供的多核心支持非常有限,无法精确地更新 MSR 寄存器。

:如果惠普笔记本在 OpenCore 界面没有看到引导项,启用这一选项。

Description: 保留内存区域的起始地址,该区域应被分配为保留区,有效地将此类型的内存标记标记为操作系统不可访问。

这里写的地址必须是内存映射的一部分,具有 EfiConventionalMemory 类型,并且按页对齐(4KB)。

:禁用 CSM 后,某些固件可能不会为 S3(睡眠)和 S4(休眠)分配内存区域,因此导致唤醒失败。你可以分别比较禁用和启用 CSM 的内存映射,从低层内存中找到这些区域,并保留该区域来修复这个问题。详见 Sample.plist

旧版操作系统的安装可能比较复杂,但有时出于各种原因还是需要用到。主板标识符和 CPUID 的兼容性是旧版操作系统正常运行的基础,除此之外还有一些细枝末节的事情需要注意。本章节将尽量阐述与旧版 macOS 操作系统相关的一系列常见问题。

尽管较新的操作系统可以通过互联网下载,但旧版操作系统并不是每个次要版本都有安装介质的,因此要想获得兼容的发行版,可能需要下载特定设备的镜像,并在必要时进行修改。Mac 电脑随附的 macOS 旧版本和旧版号列表,可以从这篇 Apple 支持的 中找到,但由于它并不一定准确,下面列出了一些旧版 Apple 操作系统最后发布的版本。

    的情况下运行恢复功能,同时也避免了 OpenPartitionDxe的需求。
  • 缓存的内核映像通常不包括网络(IONetworkingFamily)或音频(IOAudioFamily)的家族驱动,这些家族驱动往往需要使用 Force 加载来注入。
  • macOS 10.8 之前的系统不支持 KASLR slide,因此会导致内存较低的固件分配内存失败,详见 。
    -no_compat_check来忽略兼容性检查。如果你拥有 macOS 10.6 的合法副本,又不想被上述限制所约束,可以在 (或 )找到无机型限制的修改版镜像(ACDT后缀),更多细节在 DIGEST.txt中。记住,这些都是经过 OpenCore 测试的最早的 macOS 10.6 版本。

true。仅更新映像中某一的文件而不影响到其他文件是相当困难的,而且还有可能因为内核缓存日期的改变而导致启动速度变慢,因此建议按照如下命令重建映像:

  • 这个版本的 macOS 有一个硬性要求,即需要两张光盘或两个 USB 安装介质来访问第二张 DVD 盘安装介质上的所有可选包。
  • 的合法副本,可以在 (或 )找到无机型限制的修改版 8R4088镜像(后缀为

OpenCore 的设计初衷是在 固件 和 操作系统 之间提供一个安全的启动链。在大多数 x86 平台上,可信加载(Trusted Loading)是通过 模式实现的。OpenCore 不仅完全支持这种模式,还扩展了它的功能,以确保通过 进行配置的加密存储,并使用自定义的验证过程向操作系统提供可信加载,例如 。正确的安全启动链需要通过以下步骤来仔细配置:

  1. 如果要启动的系统是 macOS,则需要通过设置 SecureBootModel 来启用 Apple 安全启动。请注意,并不是每个 macOS 版本都能使用 Apple 安全启动,具体限制详见 章节。
  2. 旧的 DMG 恢复镜像往往很脆弱、易受攻击,如果担心因为加载它而突破防线,可以通过设置 DmgLoadingDisabled 来禁用 DMG 加载。非必需,但建议使用。参阅 部分来权衡利弊。apfs.efi 驱动也可以达到相同效果。
  3. 确保你想要运行的操作系统不加载 Force 驱动也能正常启动。
  4. 确保使用 ScanPolicy 限制加载不受信任的设备。要想做到足够安全,最好的办法是禁止加载 所有可移动设备 和 未知的文件系统。
  5. 使用私钥给所有已安装的驱动程序和工具签名。不要对提供管理员权限的工具(如 UEFI Shell)签名。
  6. 加密存储你的配置,详见 部分。
  7. 如果需要用到第三方操作系统(非微软或 Apple 制造)的 bootloader,也同样为它们签名。对于 Linux,可以选择安装微软签名的 Shim bootloader,具体解释见 。
  8. 在 BIOS 中开启 UEFI 安全启动,并用自己的私钥安装证书。很多文章都介绍了生成证书的具体方法,比如 ,本文档不再赘述。如果需要启动 Windows,还需要添加 证书。如果需要启动 Option ROM,或决定使用已签名的 Linux 驱动程序,还需要添加 。
  9. 设置密码保护防止固件设置被篡改,避免 UEFI 安全启动在你不知情的情况下被禁用。

虽然 OpenCore 并没有提供官方的 Windows 支持,但是使用 Boot Camp 安装 64 位 UEFI Windows(即 Windows 8 及更高版本)应该是可以正常工作的。安装第三方 UEFI、或者仅部分支持 UEFI 引导的系统(如 Windows 7)可能需要额外注意。不论如何,记住以下几点:

  • macOS 要求硬盘中的第一份分区为 EFI 分区,并且与 Windows 的默认布局不支持。尽管 OpenCore 确实提供了一个 ,但是强烈建议不要依赖这个方法。
  • Windows 系统可能需要重新激活。为了避免这种情况发生,请考虑将 SystemUUID 设置为原始固件的 UUID。请注意,在旧固件上 UUID 可能是无效的(非随机的)。如果你还遇到了什么问题,可以考虑使用 HWID 或 KMS38 的 Windows 许可证。从 OpenCore 0.5.8 开始,你还可以通过设置 UpdateSMBIOSModeCustom 来避免 OEM 激活失效。Windows 激活的细节不在本文档的讨论范围内,你应该能够在网上查找到相关资料。

2. 我需要安装其他什么软件吗?

在大多数情况下,要启用多操作系统切换、安装相关驱动程序,你将需要 提供的 Windows 支持软件。为了简化下载过程、或者配置硬盘中已经安装好的 Windows,可以使用 这个实用软件。请注意在使用 Brigadier 之前,你可能需要先下载并安装 。

记住,一定要使用最新版本的 Boot Camp 的 Windows 支持软件。6.1 之前的版本不支持 APFS 文件系统、因此无法运行。要下载最新的软件,请将最新 Mac 的型号作为参数传递给 Brigadier,如 ./brigadier.exe -m iMac19,1。之后,在不受支持的 Mac 型号上安装 Boot Camp,请以管理员身份运行

译者注:在资源管理器下,按住 Shift 同时右击窗口中空白处,此时菜单中会显示「在此处运行 PowerShell」,即在当前目录下运行 PowerShell。但是这种方式启动的 PowerShell 不具备管理员权限。

尽管 Boot Camp 提供的 Windows 支持软件解决了大多数兼容性问题,但是有时候您还是需要手动解决一些问题:

  • 要反转鼠标滚轮的滚动方向,必须按照 提供的方法、设置 FlipFlopWheel 的值为 1

    
    

    如果需要撤销更改,可以使用下述命令:

    
    
  • 译者注:众所周知,Windows 将硬件时间视为本地时间,而 macOS 会计算 UTC 后当做系统时间。通过修改上述提到的注册表值,可以让 Windows 将硬件时间视为 UTC 时间。用到的 CMD 命令如下所示:

  • 译者注:切记不要在 Windows 下写入 APFS 或 HFS,十有八九你会导致分区表错误和无法恢复的数据丢失。别怪我们没有警告过你!!

Boot Camp 使用 GPT 分区表获取每个引导选项的名称。独立安装 Windows 后,你必须手动重新标记分区。这可以通过许多工具完成,比如开源的 ,使用方法如下:

虽然我们仍然不建议使用这些经常破坏文件系统的驱动程序(我们推荐使用 macOS 内建的 NTFS 读写支持,可以通过 或 启用),但是这些驱动程序的厂商也提供了他们各自的解决方案,在这里我们仅列举两个:

译者注:虽然 acidanthera 团队推荐使用 macOS 内置的 NTFS 支持,但是译者强烈反对这种方法(不论是直接方法还是使用类似 Mounty 的第三方工具)。修改 fstab 的风险是极高的。在你清楚你在做什么之前,不要轻举妄动!!

与其他硬件相关的项目类似,OpenCore 也支持审计与调试。使用 NOOPTDEBUG 构建版本(而非 RELEASE 构建版本)可以产生更多的调试输出。对于 NOOPT 构建版本,你还可以使用 GDB 或 IDA Pro 进行调试。对于 GDB 请查看 相关页面;对于 IDA Pro,你需要 7.3 或更高版本,更多详细信息请参考 IDA Pro 提供的页面:。

可以使用串口调试来获取启动过程中的日志。串口调试是在 Target 中开启的,例如 0xB 代表在屏幕上显示并输出串行。可使用 SerialInit 配置选项来初始化串行。对于 macOS 来说,最好是选择基于 CP2102 的 UART 设备。将主板 TX 连接到 USB UART

务必记得在固件设置中启用 COM 口,一定不要使用超过 1 米的 USB 线缆,以免输出数据损坏。如果要额外启用 XNU 内核串行输出,则需要添加 debug=0x8 启动参数。

1. 啊呀呀呀我系统没法启动了我该怎么看日志啊?

通常情况下,获取实际的错误信息就足够了。为此,请确保:

如果你在日志中看不出明显的错误,请逐一检查 Quirks 部分中可用的 hacks。例如,对于 Early Boot 出现的问题(如 OpenCore 启动菜单无法显示),通过 UEFI Shell(随 OpenCore 打包在一起)可以查看相关调试信息。

2. macOS 启动失败我该怎么调试?

  • 可以考虑通过串行端口来检查早期的内核启动失败。为此你可能需要用到 debug=0x108serial=5msgbuf=1048576 启动参数。如果在串行初始化前就失败了,Sample.plist 中有相关补丁供你参考。

3. 如何自定义启动项?

4. 如何选择默认启动的系统?

OpenCore 使用 UEFI 首选启动项 来选择默认的启动项。设置的方式随 BIOS 不同而不同,具体请参考 macOS 或 Windows 控制面板。

由于使用 OpenCore 提供的 BOOTx64.efi 作为首选启动项会限制这项功能(可能还会导致一些固件删除不兼容的引导选项),我们强烈建议你启用 RequestBootVarRouting Quirk,这会将你所做的选择保留在 OpenCore

5. 安装 macOS 最简单的方法是什么?

文件改变条目显示的文字。

如果你需要进行离线安装,请参考 。除了通过 App Store 或 系统更新,你还可以使用 下载 macOS 镜像文件。

6. 为什么无法加载 Recovery 恢复镜像 进行在线安装?

可能是因为你没带 HFS+ 驱动。目前我们所知道的 Recovery 分区全都是 HFS+ 文件系统。

可以,没有必要,但请加大力度

OpenCore 支持包括 MacPro 5,1 和虚拟机在内的大部分较新的 Mac 型号。不过,OpenCore 有关在 Mac 硬件上使用的具体细节微乎其微。你可以在 查看相关讨论。

对于 x86 机器码来说, 无法进行大小不同的替换。对于 ACPI 代码来说这是有风险的,而且在技术上这与替换 ACPI 表等价,所以 OpenCore 没有实现。更多详细的解答可以在 上和本文档的 ACPI 章节找到。

SyncRuntimePermissions)由于没有明确的参考,因此需要自行尝试最佳组合。详细内容请参考本文档中对这些 Quirk 的描述。

11.3 工具与应用程序

一些不依赖 OpenCore 的工具可以帮助调试固件和硬件。下面列出了一些已知的工具。虽然有些工具可以从 OpenCore 启动,但大部分工具都应该直接或从 OpenCoreShell 中单独运行。

这种方法在 Mac 和其他计算机上都可以使用。还有一种只能在 Mac 上的 HFS+ 或 APFS 分区上使用的方法:


注 2:为了能够使用 bless,你可能需要 。

注 3:为了能够正常启动,你可能需要 (如果有的话)。

一些已知的 UEFI 工具(内置工具已用 * 标出):

  • * — 测试 BeepGen 协议,生成不同频率和长度的音频信号。
  • * — 重置 NVRAM,以一个单独的工具呈现。
  • * — 解锁和回锁 NVRAM 保护,让其他工具在从 OpenCore 启动时能够获得完整的 NVRAM 访问权限。
  • * — 由 OpenCore 配置的 ,与绝大部分固件兼容。
  • — 执行 EPID 配置(需要配置证书数据)。

OpenCanopy 所需的图象资源位于 Resources 目录下,一些简单的资源(字体和图标)可以在 中获取。可以在网络上找到自定义图标(比如 和 )。

OpenCanopy 为 PickerAttributes 提供了全面的支持,并提供了一套可配置的内置图标集。默认选择的图标由 DefaultBackgroundColor 变量决定,当该变量的值定义为浅灰时,则使用 Old 前缀的图标,定义为其他颜色时则使用没有前缀名的图标。

预定义的图标放在 \EFI\OC\Resources\Image 目录下。下面提供了所支持的图标的完整列表(.icns 格式)。可选图标如未提供,将使用最接近的可用的图标。外置设备的条目将使用 Ext 前缀的图标(如 OldExtHardDrive.icns)。

:以下标注的所有尺寸均为 1x 缩放级别的标准尺寸,其他缩放级别的尺寸须作相应调整。

  • Left — 向左滚动(必需,最大尺寸 40x40)。
  • Right — 向右滚动(必需,最大尺寸 40x40)。

预定义的标签放在 \EFI\OC\Resources\Label 目录下。每个标签都有 .lbl.l2x 的后缀,以代表缩放级别。完整的标签列表如下所示。所有标签都是必需的。

:所有标签的高度必须为 12px,宽度不限。

字体格式对应于 。虽然有很多工具可以生成字体文件,但目前还是建议使用 来生成位图字体(),并使用 将其导出为二进制格式。

OpenRuntime 是一个 OpenCore 的插件,提供了对 OC_FIRMWARE_RUNTIME 协议的实现。该协议对 OpenCore 的部分功能提供了支持,而这部分功能由于需要 Runtime(如操作系统)中运行、因此无法内置在 OpenCore 中。该协议提供了包括但不限于如下功能:

  • NVRAM 隔离,能够保护所有变量避免被不信任的操作系统写入(如 DisableVariableWrite)。

音频支持为上游协议提供了一种与所选硬件和音频资源交互的方式。所有音频资源应该保存在 \EFI\OC\Resources\Audio 目录。目前支持的音频文件格式为 MP3 和 WAVE PCM。虽然支持哪种音频流格式取决于驱动程序,但大多数常见的音频卡都支持 44100 或 48000Hz 的 16 位立体声。

  • 音频本地化语言由两个字母的语言代码表示(如 en),中文、西班牙语和葡萄牙语除外。具体请看 来了解所有支持的本地化列表。
  • 音频路径是对应于文件标识符的基本文件名。macOS 引导程序的音频路径参考 。OpenCore 的音频路径参考 。唯一例外的是 OpenCore

变量的值来控制。当某一特定文件的音频本地化缺失时,将会使用英语(en)来代替。示例音频文件可以在 中找到。

此选项对于加载某些遵循 UEFI 驱动模型的 驱动程序(如文件系统驱动、音频输出驱动)很有用,因为这些驱动可能无法自行启动。此选项对会自动连接的驱动程序来说是不必要的,并且可能会稍微减慢启动速度。

:某些固件(特别是 Apple 的)仅连接包含操作系统的驱动器以加快启动过程。启用此选项可以在拥有多个驱动器时查看所有引导选项。

:所有协议实例的安装都优先于驱动程序的加载。

Description: 设计为用 plist dict 值填充,用于描述对特定固件和硬件功能要求很高的内存区域,这些区域不应该被操作系统使用。比如被 Intel HD 3000 破坏的第二个 256MB 区域,或是一个有错误的 RAM 的区域。

APFS 的 EFI 驱动内置在所有可以作为系统启动盘的 APFS 容器之中。这一选项将会根据基于 ScanPolicy 找到的 APFS 容器,从中加载 APFS 驱动。更多详情请查看 中的 EFI Jummpstart 章节。

代替通常情况下用于 APFS 驱动程序加载的分区句柄连接,每一个句柄都是递归连接的。这可能会比平时花费更多的时间,但是是某些固件访问 APFS 分区的唯一方法,比如在旧的惠普笔记本电脑上发现的那样。

这一选项不仅提供了进入 OpenCore 以后再插入 U 盘的支持,而且还允许了在 OpenCore 引导菜单下 APFS U 盘的热插拔。

APFS 驱动的版本号基于其发布日期。较旧版本的 APFS 驱动可能与较新的系统不兼容、或者有未修补的漏洞。通过这一选项可以避免 OpenCore 加载过旧版本的 APFS 驱动。

  • 0 — 使用默认数值。随着未来的更新,OpenCore 内置的默认数值也会不断更新。如果你会一直更新你的系统,我们推荐使用这一数值。目前默认数值为 。
  • -1 — 允许使用任何版本的 APFS 驱动(强烈不推荐)。
  • 其他数值 — 数值格式应为形如 的格式。你可以从 OpenCore 的启动日志和 中找到 APFS

APFS 驱动的版本号和 macOS 版本相关。较旧版本的 APFS 驱动可能与较新的系统不兼容、或者有未修补的漏洞。通过这一选项可以避免 OpenCore 加载过旧版本的 APFS 驱动。

  • 0 — 使用默认数值。随着未来的更新,OpenCore 内置的默认数值也会不断更新。如果你会一直更新你的系统,我们推荐使用这一数值。目前默认数值选自 App Store 中能够下载到的 High Sierra(000)。
  • -1 — 允许使用任何版本的 APFS 驱动(强烈不推荐)。

一般来说,这里包含了内置模拟音频控制器(HDEF)上的第一个音频编解码器地址。音频编解码器地址(比如 2)可以在调试日志中找到(已用粗斜体标出):

一般来说,这里包含了内置模拟音频控制器(HDEF)的设备路径,比如 PciRoot(0x0)/Pci(0x1b,0x0)。认可的音频控制器列表可以在调试日志中找到(已用粗斜体标出):

除此之外,该值还可以在 macOS 中通过 gfxutil -f HDEF 命令来获取。如果指定了空的设备路径,则会使用第一个可用的音频控制器。

一般来说,这里包含了内置模拟音频控制器(HDEF)的绿色输出的索引。调试日志中输出节点的数量如下(已用粗斜体标出):

找到正确端口的最快办法就是暴力地尝试 0N - 1 的值。

启用此设置可将音频播放从内置协议路由到音频控制器(AudioDevice)上指定编解码器(AudioCodec)的专用音频端口(AudioOut)。

当计算出的音量小于 MinimumVolume 时,屏幕阅读器将使用这个音量。当计算出的音量小于 MinimumVolume,则不播放 Mac 特有的开机启动声音。

  • Enabled — 无条件启用开机声音。
  • Disabled — 无条件禁用开机声音。

Enable 是可以与 StartupMute NVRAM 变量分开使用的,以此来避免在固件能够播放启动铃声时发生冲突。

某些编解码器在重新配置后需要特定延迟(由供应商提供,例如音量设置),此选项可对其进行配置。一般来说,必要的延迟时间可能长达 0.5 秒。

SystemAudioVolume 读取的音量范围会因编解码器的不同而不同。为了将 [0, 127] 范围内的值转换为原始音量范围 [0, 100] 内的值,所读取的值按比例调整为 VolumeAmplifier 的百分数:

:macOS 中使用的转换并不是线性的,但非常接近,因此我们忽略了这种细微差别。

显然,有些主板,如 GA Z77P-D3,可能会在 EFI_INPUT_KEY 中返回所有输入协议的未初始化数据。这个选项会舍弃那些既不是 ASCII 码,也不是 UEFI 规范中定义的键(见版本 2.8 的表 107 和 108)。

AppleKeyMapAggregator 协议应该包含当前按下的键的固定长度的缓冲。但是大部分驱动程序仅将按键按下报告为中断、并且按住按键会导致在一定的时间间隔后再提交按下行为。一旦超时到期,我们就是用超时从缓冲区中删除一次按下的键,并且没有新提交。

此选项允许根据你的平台设置此超时。在大多数平台上有效的推荐值为 5 毫秒。作为参考,在 VMWare 上按住一个键大约每 2 毫秒就会重复一次,而在 APTIO V 上是 3 - 4 毫秒。因此,可以在较快的平台上设置稍低的值、在较慢的平台设置稍高的值,以提高响应速度。

:某些平台可能需要更高或者更低的值。例如,当 OpenCanopy 检测到按键丢失的时候,尝试稍高的值(比如增加到 10),当检测到按键停滞时,尝试稍低的值。由于每个平台各不相同,因此检查从 125 的每个值可能会比较合理。

KeyForgetThreshold 类似,这一选项适用于按键提交的顺序。为了能够识别同时按下的按键,我们需要设置一个超时时间,在这个时间内可以假定这两个按键是同时按下的。

对于 VMWare,同时按下多个键的间隔是 2 毫秒。对于 APTIO V 平台为 1 毫秒。一个接一个地按下按键会导致 6 毫秒和 10 毫秒的延迟。此选项的建议值为 2 毫秒,但对于较快的平台可以选取较小的值,反之亦然。

  • Auto — 从下述选项中自动选择

:目前 V1V2AMI 区别于 Auto,只对特定的协议进行过滤。这种情况在未来的版本中可能会改变。

此选项对于 Option 键位于 Command 右侧的键盘来说会很有用。

目前只支持 ASUS 值,使用的是 Z87 和 Z97 主板上的特殊协议。更多详情请参考 。如果启用了 PointerSupport,此处值不能为空。

设置较低的值可以提高界面和输入处理性能的响应能力。建议值为 50000(即 5 毫秒)或稍高一些。选择 ASUS Z87 主板时,请使用 60000,苹果主板请使用 100000。你也可以将此值保留为 0,由 OpenCore 自动计算。

目前支持两种渲染器:BuiltinSystemSystem 渲染器使用固件服务进行文本渲染。Builtin 渲染器则绕过固件服务,自行渲染文本。不同的渲染器支持的选项也不同。建议使用 Builtin 渲染器,因为它支持 HiDPI 模式,并能够使用全屏分辨率。

模式下显示,而图形可以在任何模式下绘制。由于 UEFI 规范并不要求这样做,因此具体的行为各不相同。

有效值为文本渲染器和渲染模式的组合:

:某些 Mac,比如 MacPro5,1,在使用较新的 GPU 时,可能会出现控制台输出中断的情况,因此可能只有 BuiltinGraphics 对它们有效。

设置为空字符串则不会改变控制台模式。设置为 Max 则会尝试最大的可用控制台模式。目前 Builtin 文本渲染器只支持一种控制台模式,所以该选项可以忽略。

:在大多数固件上,这个字段最好留空。

  • 设置为 WxH@Bpp(如 )或 WxH(如 )格式的字符串,向 GOP 请求自定义分辨率。
  • 设置为空字符串,不改变屏幕分辨率。
  • 设置为 Max,尝试使用最大的可用屏幕分辨率。

:当控制台句柄没有 GOP 协议时,这些设置会失败。当固件不再提供时,可以将 ProvideConsoleGop 设置为 true 并添加。

时,将尝试从所连接的显示器的 EDID 中提取最大的可用分辨率。

:该选项依赖 协议。目前只有

Description: 有些固件在从图形模式切换到文本模式时,只会清除部分屏幕、而会留下一部分之前绘制的图像。启用这一选项后,在切换到文本模式之前会用黑色填充整个图形屏幕。

:这一选项只会在 System 渲染器上生效。

在某些固件上,这样做可能会提供更优的性能,甚至修复渲染问题,比如 MacPro5,1。但是,除非有明显的好处,否则还是建议不要使用这个选项,因为可能会导致滚动速度变慢。

Description: 选择固件同时在图形和文本两种模式下在屏幕上输出文本。通常不会这样做,因为随机的文本可能会出现在图形图像上,并导致用户界面出错。将此选项设置为 true 时,会在控制台处于与 Text 不同的模式时,舍弃所有文本输出。

:这一选项只会在 System 渲染器上生效。

:这一选项只会在 System 渲染器上生效。

macOS bootloader 要求控制台句柄上必须有 GOP 或 UGA(适用于 10.4 EfiBoot),但 UEFI 规范并未涵盖图形协议的确切位置。此选项会确保 GOP 和 UGA(如果存在)在控制台句柄上可用。

:这个选项也会替换掉控制台句柄上损坏的 GOP 协议,在使用较新的 GPU 的 MacPro5,1 时可能会出现这种情况。

当通过 GOP 改变屏幕分辨率时,某些固件需要重新连接产生控制台协议(简单的文本输出)的控制器,否则它们不会根据新的分辨率生成文本。

:当 OpenCore 从 Shell 启动时,这个逻辑可能会导致某些主板黑屏,因此这个选项是非必须的。在 0.5.2 之前的版本中,这个选项是强制性的,不可配置。除非需要,否则请不要使用该选项。

:这一选项只会在 System 渲染器上生效。在所有已知的受影响的系统中,ConsoleMode 必须设置为空字符串才能正常工作。

有些固件不会去实现老旧的 UGA 协议,但是有些更老的 EFI 应用程序(如 10.4 的 EfiBoot)可能需要用它来进行屏幕输出。

每次只能有一组音频协议可用,所以如果为了在 Mac 系统上的 OpenCore 用户界面实现其中一些协议的音频播放,这一设置应该启用。

:后端音频驱动需要在 UEFI Audio 部分进行配置,以便这些协议能够流式传输音频。

:某些 Mac 设备(如 MacPro5,1)虽然兼容 APFS,但是其 Apple Boot Policy 协议包含了恢复分区检测问题,因此也建议启用这一选项。

:包括 VMWare 在内的多个虚拟机在 HiDPI 模式下光标会损坏,因此建议为所有虚拟机启用这一选项。

查看是否会出现禁行图标,来诊断你的固件是否需要这一 Quirk。一般来说,APTIO V(Haswell 和更早的平台)之前的平台都会受到影响。

:此设置可禁用固件的各种安全功能,因此也会同时破坏安全启动策略。如果打算使用 UEFI 安全启动,请勿启用此项。

SATA 控制器。未来应该会找到一个更好的方法。如果需要启用这一选项,设置 3-5 秒的延时就可以了。

:虽然该选项不会对不受影响的固件造成损害,但在不需要的情况下不建议启用。

Description: 尝试从固件驱动程序中分离 USB 控制器所有权。尽管大多数固件都设法正确执行了该操作或者提供有一个选项,但某些固件没有,从而导致操作系统可能会在启动时冻结。除非需要,否则不建议启用这一选项。

启用这个 Quirk 需要用到在 OpenRuntime.efi 中实现的 OC_FIRMWARE_RUNTIME 协议。当固件删除不兼容的启动条目时,这一 Quirk 可以让默认的启动条目保存在引导菜单中。简单地说就是,如果你想使用「系统偏好设置」中的「」,就必须启用这一 Quirk。

  • 囚禁操作系统,使其只受 OpenCore 引导环境的控制,从而提高了安全性。
  • 如遇到中途需要通过 OpenCore 来重启的情况,操作系统不会搞乱 OpenCore 的引导优先级,保证了系统更新和休眠唤醒的流畅性。
  • macOS 等潜在的不兼容的启动项,现在不会被意外删除或损坏了。

这个 Quirk 的主要目的是在运行 XNU 调试内核时,在一些服务器和笔记本型号上实现早期引导 TSC 同步。对于调试内核,在任何 Kext 可能导致其他解决方案出现问题之前,TSC 需要在各个内核之间保持同步。Timeout 以微秒为单位,取决于平台上存在的核心数量,推荐的起始值是 500000

这是一个实验性的 Quirk,只能被用于上述问题。在其他情况下,这个 Quirk 可能会导致操作系统不稳定,所以并不推荐使用。在其他情况下,推荐的解决办法是安装一个内核驱动,如 、 或 (是 VoodooTSCSync 的一个更有针对性的变种,适用于较新的笔记本电脑)。

:这个 Quirk 不能取代内核驱动的原因是它不能在 ACPI S3 模式(睡眠唤醒)下运行,而且 UEFI 固件提供的多核心支持非常有限,无法精确地更新 MSR 寄存器。

:如果惠普笔记本在 OpenCore 界面没有看到引导项,启用这一选项。

Description: 保留内存区域的起始地址,该区域应被分配为保留区,有效地将此类型的内存标记标记为操作系统不可访问。

这里写的地址必须是内存映射的一部分,具有 EfiConventionalMemory 类型,并且按页对齐(4KB)。

:禁用 CSM 后,某些固件可能不会为 S3(睡眠)和 S4(休眠)分配内存区域,因此导致唤醒失败。你可以分别比较禁用和启用 CSM 的内存映射,从低层内存中找到这些区域,并保留该区域来修复这个问题。详见 Sample.plist

旧版操作系统的安装可能比较复杂,但有时出于各种原因还是需要用到。主板标识符和 CPUID 的兼容性是旧版操作系统正常运行的基础,除此之外还有一些细枝末节的事情需要注意。本章节将尽量阐述与旧版 macOS 操作系统相关的一系列常见问题。

尽管较新的操作系统可以通过互联网下载,但旧版操作系统并不是每个次要版本都有安装介质的,因此要想获得兼容的发行版,可能需要下载特定设备的镜像,并在必要时进行修改。Mac 电脑随附的 macOS 旧版本和旧版号列表,可以从这篇 Apple 支持的 中找到,但由于它并不一定准确,下面列出了一些旧版 Apple 操作系统最后发布的版本。

    的情况下运行恢复功能,同时也避免了 OpenPartitionDxe的需求。
  • 缓存的内核映像通常不包括网络(IONetworkingFamily)或音频(IOAudioFamily)的家族驱动,这些家族驱动往往需要使用 Force 加载来注入。
  • macOS 10.8 之前的系统不支持 KASLR slide,因此会导致内存较低的固件分配内存失败,详见 。
    -no_compat_check来忽略兼容性检查。如果你拥有 macOS 10.6 的合法副本,又不想被上述限制所约束,可以在 (或 )找到无机型限制的修改版镜像(ACDT后缀),更多细节在 DIGEST.txt中。记住,这些都是经过 OpenCore 测试的最早的 macOS 10.6 版本。

true。仅更新映像中某一的文件而不影响到其他文件是相当困难的,而且还有可能因为内核缓存日期的改变而导致启动速度变慢,因此建议按照如下命令重建映像:

  • 这个版本的 macOS 有一个硬性要求,即需要两张光盘或两个 USB 安装介质来访问第二张 DVD 盘安装介质上的所有可选包。
  • 的合法副本,可以在 (或 )找到无机型限制的修改版 8R4088镜像(后缀为

OpenCore 的设计初衷是在 固件 和 操作系统 之间提供一个安全的启动链。在大多数 x86 平台上,可信加载(Trusted Loading)是通过 模式实现的。OpenCore 不仅完全支持这种模式,还扩展了它的功能,以确保通过 进行配置的加密存储,并使用自定义的验证过程向操作系统提供可信加载,例如 。正确的安全启动链需要通过以下步骤来仔细配置:

  1. 如果要启动的系统是 macOS,则需要通过设置 SecureBootModel 来启用 Apple 安全启动。请注意,并不是每个 macOS 版本都能使用 Apple 安全启动,具体限制详见 章节。
  2. 旧的 DMG 恢复镜像往往很脆弱、易受攻击,如果担心因为加载它而突破防线,可以通过设置 DmgLoadingDisabled 来禁用 DMG 加载。非必需,但建议使用。参阅 部分来权衡利弊。apfs.efi 驱动也可以达到相同效果。
  3. 确保你想要运行的操作系统不加载 Force 驱动也能正常启动。
  4. 确保使用 ScanPolicy 限制加载不受信任的设备。要想做到足够安全,最好的办法是禁止加载 所有可移动设备 和 未知的文件系统。
  5. 使用私钥给所有已安装的驱动程序和工具签名。不要对提供管理员权限的工具(如 UEFI Shell)签名。
  6. 加密存储你的配置,详见 部分。
  7. 如果需要用到第三方操作系统(非微软或 Apple 制造)的 bootloader,也同样为它们签名。对于 Linux,可以选择安装微软签名的 Shim bootloader,具体解释见 。
  8. 在 BIOS 中开启 UEFI 安全启动,并用自己的私钥安装证书。很多文章都介绍了生成证书的具体方法,比如 ,本文档不再赘述。如果需要启动 Windows,还需要添加 证书。如果需要启动 Option ROM,或决定使用已签名的 Linux 驱动程序,还需要添加 。
  9. 设置密码保护防止固件设置被篡改,避免 UEFI 安全启动在你不知情的情况下被禁用。

虽然 OpenCore 并没有提供官方的 Windows 支持,但是使用 Boot Camp 安装 64 位 UEFI Windows(即 Windows 8 及更高版本)应该是可以正常工作的。安装第三方 UEFI、或者仅部分支持 UEFI 引导的系统(如 Windows 7)可能需要额外注意。不论如何,记住以下几点:

  • macOS 要求硬盘中的第一份分区为 EFI 分区,并且与 Windows 的默认布局不支持。尽管 OpenCore 确实提供了一个 ,但是强烈建议不要依赖这个方法。
  • Windows 系统可能需要重新激活。为了避免这种情况发生,请考虑将 SystemUUID 设置为原始固件的 UUID。请注意,在旧固件上 UUID 可能是无效的(非随机的)。如果你还遇到了什么问题,可以考虑使用 HWID 或 KMS38 的 Windows 许可证。从 OpenCore 0.5.8 开始,你还可以通过设置 UpdateSMBIOSModeCustom 来避免 OEM 激活失效。Windows 激活的细节不在本文档的讨论范围内,你应该能够在网上查找到相关资料。

2. 我需要安装其他什么软件吗?

在大多数情况下,要启用多操作系统切换、安装相关驱动程序,你将需要 提供的 Windows 支持软件。为了简化下载过程、或者配置硬盘中已经安装好的 Windows,可以使用 这个实用软件。请注意在使用 Brigadier 之前,你可能需要先下载并安装 。

记住,一定要使用最新版本的 Boot Camp 的 Windows 支持软件。6.1 之前的版本不支持 APFS 文件系统、因此无法运行。要下载最新的软件,请将最新 Mac 的型号作为参数传递给 Brigadier,如 ./brigadier.exe -m iMac19,1。之后,在不受支持的 Mac 型号上安装 Boot Camp,请以管理员身份运行

译者注:在资源管理器下,按住 Shift 同时右击窗口中空白处,此时菜单中会显示「在此处运行 PowerShell」,即在当前目录下运行 PowerShell。但是这种方式启动的 PowerShell 不具备管理员权限。

尽管 Boot Camp 提供的 Windows 支持软件解决了大多数兼容性问题,但是有时候您还是需要手动解决一些问题:

  • 要反转鼠标滚轮的滚动方向,必须按照 提供的方法、设置 FlipFlopWheel 的值为 1

    
    

    如果需要撤销更改,可以使用下述命令:

    
    
  • 译者注:众所周知,Windows 将硬件时间视为本地时间,而 macOS 会计算 UTC 后当做系统时间。通过修改上述提到的注册表值,可以让 Windows 将硬件时间视为 UTC 时间。用到的 CMD 命令如下所示:

  • 译者注:切记不要在 Windows 下写入 APFS 或 HFS,十有八九你会导致分区表错误和无法恢复的数据丢失。别怪我们没有警告过你!!

Boot Camp 使用 GPT 分区表获取每个引导选项的名称。独立安装 Windows 后,你必须手动重新标记分区。这可以通过许多工具完成,比如开源的 ,使用方法如下:

虽然我们仍然不建议使用这些经常破坏文件系统的驱动程序(我们推荐使用 macOS 内建的 NTFS 读写支持,可以通过 或 启用),但是这些驱动程序的厂商也提供了他们各自的解决方案,在这里我们仅列举两个:

译者注:虽然 acidanthera 团队推荐使用 macOS 内置的 NTFS 支持,但是译者强烈反对这种方法(不论是直接方法还是使用类似 Mounty 的第三方工具)。修改 fstab 的风险是极高的。在你清楚你在做什么之前,不要轻举妄动!!

与其他硬件相关的项目类似,OpenCore 也支持审计与调试。使用 NOOPTDEBUG 构建版本(而非 RELEASE 构建版本)可以产生更多的调试输出。对于 NOOPT 构建版本,你还可以使用 GDB 或 IDA Pro 进行调试。对于 GDB 请查看 相关页面;对于 IDA Pro,你需要 7.3 或更高版本,更多详细信息请参考 IDA Pro 提供的页面:。

可以使用串口调试来获取启动过程中的日志。串口调试是在 Target 中开启的,例如 0xB 代表在屏幕上显示并输出串行。可使用 SerialInit 配置选项来初始化串行。对于 macOS 来说,最好是选择基于 CP2102 的 UART 设备。将主板 TX 连接到 USB UART

务必记得在固件设置中启用 COM 口,一定不要使用超过 1 米的 USB 线缆,以免输出数据损坏。如果要额外启用 XNU 内核串行输出,则需要添加 debug=0x8 启动参数。

1. 啊呀呀呀我系统没法启动了我该怎么看日志啊?

通常情况下,获取实际的错误信息就足够了。为此,请确保:

如果你在日志中看不出明显的错误,请逐一检查 Quirks 部分中可用的 hacks。例如,对于 Early Boot 出现的问题(如 OpenCore 启动菜单无法显示),通过 UEFI Shell(随 OpenCore 打包在一起)可以查看相关调试信息。

2. macOS 启动失败我该怎么调试?

  • 可以考虑通过串行端口来检查早期的内核启动失败。为此你可能需要用到 debug=0x108serial=5msgbuf=1048576 启动参数。如果在串行初始化前就失败了,Sample.plist 中有相关补丁供你参考。

3. 如何自定义启动项?

4. 如何选择默认启动的系统?

OpenCore 使用 UEFI 首选启动项 来选择默认的启动项。设置的方式随 BIOS 不同而不同,具体请参考 macOS 或 Windows 控制面板。

由于使用 OpenCore 提供的 BOOTx64.efi 作为首选启动项会限制这项功能(可能还会导致一些固件删除不兼容的引导选项),我们强烈建议你启用 RequestBootVarRouting Quirk,这会将你所做的选择保留在 OpenCore

5. 安装 macOS 最简单的方法是什么?

文件改变条目显示的文字。

如果你需要进行离线安装,请参考 。除了通过 App Store 或 系统更新,你还可以使用 下载 macOS 镜像文件。

6. 为什么无法加载 Recovery 恢复镜像 进行在线安装?

可能是因为你没带 HFS+ 驱动。目前我们所知道的 Recovery 分区全都是 HFS+ 文件系统。

可以,没有必要,但请加大力度

OpenCore 支持包括 MacPro 5,1 和虚拟机在内的大部分较新的 Mac 型号。不过,OpenCore 有关在 Mac 硬件上使用的具体细节微乎其微。你可以在 查看相关讨论。

对于 x86 机器码来说, 无法进行大小不同的替换。对于 ACPI 代码来说这是有风险的,而且在技术上这与替换 ACPI 表等价,所以 OpenCore 没有实现。更多详细的解答可以在 上和本文档的 ACPI 章节找到。

SyncRuntimePermissions)由于没有明确的参考,因此需要自行尝试最佳组合。详细内容请参考本文档中对这些 Quirk 的描述。

我要回帖

更多关于 RU工具 的文章

 

随机推荐