一些不依赖 OpenCore 的工具可以帮助调试固件和硬件。下面列出了一些已知的工具。虽然有些工具可以从 OpenCore 启动,但大部分工具都应该直接或从 OpenCoreShell
中单独运行。
这种方法在 Mac 和其他计算机上都可以使用。还有一种只能在 Mac 上的 HFS+ 或 APFS 分区上使用的方法:
注 2:为了能够使用 bless
,你可能需要 。
注 3:为了能够正常启动,你可能需要 (如果有的话)。
一些已知的 UEFI 工具(内置工具已用 *
标出):
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 中。该协议提供了包括但不限于如下功能:
DisableVariableWrite
)。
音频支持为上游协议提供了一种与所选硬件和音频资源交互的方式。所有音频资源应该保存在 \EFI\OC\Resources\Audio
目录。目前支持的音频文件格式为 MP3 和 WAVE PCM。虽然支持哪种音频流格式取决于驱动程序,但大多数常见的音频卡都支持 44100 或 48000Hz 的 16 位立体声。
en
),中文、西班牙语和葡萄牙语除外。具体请看 来了解所有支持的本地化列表。
变量的值来控制。当某一特定文件的音频本地化缺失时,将会使用英语(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 驱动(强烈不推荐)。
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
)的绿色输出的索引。调试日志中输出节点的数量如下(已用粗斜体标出):
找到正确端口的最快办法就是暴力地尝试 0
到 N - 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
),当检测到按键停滞时,尝试稍低的值。由于每个平台各不相同,因此检查从 1
到 25
的每个值可能会比较合理。
与 KeyForgetThreshold
类似,这一选项适用于按键提交的顺序。为了能够识别同时按下的按键,我们需要设置一个超时时间,在这个时间内可以假定这两个按键是同时按下的。
对于 VMWare,同时按下多个键的间隔是 2 毫秒。对于 APTIO V 平台为 1 毫秒。一个接一个地按下按键会导致 6 毫秒和 10 毫秒的延迟。此选项的建议值为 2 毫秒,但对于较快的平台可以选取较小的值,反之亦然。
Auto
— 从下述选项中自动选择
注:目前 V1
、V2
和 AMI
区别于 Auto
,只对特定的协议进行过滤。这种情况在未来的版本中可能会改变。
此选项对于 Option
键位于 Command
右侧的键盘来说会很有用。
目前只支持 ASUS
值,使用的是 Z87 和 Z97 主板上的特殊协议。更多详情请参考 。如果启用了 PointerSupport
,此处值不能为空。
设置较低的值可以提高界面和输入处理性能的响应能力。建议值为 50000
(即 5 毫秒)或稍高一些。选择 ASUS Z87 主板时,请使用 60000
,苹果主板请使用 100000
。你也可以将此值保留为 0
,由 OpenCore 自动计算。
目前支持两种渲染器:Builtin
和 System
。System
渲染器使用固件服务进行文本渲染。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。
这个 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
加载来注入。
-no_compat_check
来忽略兼容性检查。如果你拥有 macOS 10.6 的合法副本,又不想被上述限制所约束,可以在 (或 )找到无机型限制的修改版镜像(ACDT
后缀),更多细节在 DIGEST.txt
中。记住,这些都是经过 OpenCore 测试的最早的 macOS 10.6 版本。
true
。仅更新映像中某一的文件而不影响到其他文件是相当困难的,而且还有可能因为内核缓存日期的改变而导致启动速度变慢,因此建议按照如下命令重建映像:
8R4088
镜像(后缀为
OpenCore 的设计初衷是在 固件 和 操作系统 之间提供一个安全的启动链。在大多数 x86 平台上,可信加载(Trusted Loading)是通过 模式实现的。OpenCore 不仅完全支持这种模式,还扩展了它的功能,以确保通过 进行配置的加密存储,并使用自定义的验证过程向操作系统提供可信加载,例如 。正确的安全启动链需要通过以下步骤来仔细配置:
SecureBootModel
来启用 Apple 安全启动。请注意,并不是每个 macOS 版本都能使用 Apple 安全启动,具体限制详见 章节。
DmgLoading
为 Disabled
来禁用 DMG 加载。非必需,但建议使用。参阅 部分来权衡利弊。apfs.efi
驱动也可以达到相同效果。
Force
驱动也能正常启动。
ScanPolicy
限制加载不受信任的设备。要想做到足够安全,最好的办法是禁止加载 所有可移动设备 和 未知的文件系统。
虽然 OpenCore 并没有提供官方的 Windows 支持,但是使用 Boot Camp 安装 64 位 UEFI Windows(即 Windows 8 及更高版本)应该是可以正常工作的。安装第三方 UEFI、或者仅部分支持 UEFI 引导的系统(如 Windows 7)可能需要额外注意。不论如何,记住以下几点:
UpdateSMBIOSMode
为 Custom
来避免 OEM 激活失效。Windows 激活的细节不在本文档的讨论范围内,你应该能够在网上查找到相关资料。
在大多数情况下,要启用多操作系统切换、安装相关驱动程序,你将需要 提供的 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 也支持审计与调试。使用 NOOPT
或 DEBUG
构建版本(而非 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
启动参数。
通常情况下,获取实际的错误信息就足够了。为此,请确保:
如果你在日志中看不出明显的错误,请逐一检查 Quirks
部分中可用的 hacks。例如,对于 Early Boot 出现的问题(如 OpenCore 启动菜单无法显示),通过 UEFI Shell
(随 OpenCore 打包在一起)可以查看相关调试信息。
debug=0x108
、serial=5
和 msgbuf=1048576
启动参数。如果在串行初始化前就失败了,Sample.plist 中有相关补丁供你参考。
OpenCore 使用 UEFI 首选启动项 来选择默认的启动项。设置的方式随 BIOS 不同而不同,具体请参考 macOS 或 Windows 控制面板。
由于使用 OpenCore 提供的 BOOTx64.efi
作为首选启动项会限制这项功能(可能还会导致一些固件删除不兼容的引导选项),我们强烈建议你启用 RequestBootVarRouting
Quirk,这会将你所做的选择保留在 OpenCore
文件改变条目显示的文字。
如果你需要进行离线安装,请参考 。除了通过 App Store 或 系统更新,你还可以使用 下载 macOS 镜像文件。
可能是因为你没带 HFS+ 驱动。目前我们所知道的 Recovery 分区全都是 HFS+ 文件系统。
可以,没有必要,但请加大力度
OpenCore 支持包括 MacPro 5,1 和虚拟机在内的大部分较新的 Mac 型号。不过,OpenCore 有关在 Mac 硬件上使用的具体细节微乎其微。你可以在 查看相关讨论。
对于 x86 机器码来说, 无法进行大小不同的替换。对于 ACPI 代码来说这是有风险的,而且在技术上这与替换 ACPI 表等价,所以 OpenCore 没有实现。更多详细的解答可以在 上和本文档的 ACPI 章节找到。
SyncRuntimePermissions
)由于没有明确的参考,因此需要自行尝试最佳组合。详细内容请参考本文档中对这些 Quirk 的描述。
一些不依赖 OpenCore 的工具可以帮助调试固件和硬件。下面列出了一些已知的工具。虽然有些工具可以从 OpenCore 启动,但大部分工具都应该直接或从 OpenCoreShell
中单独运行。
这种方法在 Mac 和其他计算机上都可以使用。还有一种只能在 Mac 上的 HFS+ 或 APFS 分区上使用的方法:
注 2:为了能够使用 bless
,你可能需要 。
注 3:为了能够正常启动,你可能需要 (如果有的话)。
一些已知的 UEFI 工具(内置工具已用 *
标出):
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 中。该协议提供了包括但不限于如下功能:
DisableVariableWrite
)。
音频支持为上游协议提供了一种与所选硬件和音频资源交互的方式。所有音频资源应该保存在 \EFI\OC\Resources\Audio
目录。目前支持的音频文件格式为 MP3 和 WAVE PCM。虽然支持哪种音频流格式取决于驱动程序,但大多数常见的音频卡都支持 44100 或 48000Hz 的 16 位立体声。
en
),中文、西班牙语和葡萄牙语除外。具体请看 来了解所有支持的本地化列表。
变量的值来控制。当某一特定文件的音频本地化缺失时,将会使用英语(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 驱动(强烈不推荐)。
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
)的绿色输出的索引。调试日志中输出节点的数量如下(已用粗斜体标出):
找到正确端口的最快办法就是暴力地尝试 0
到 N - 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
),当检测到按键停滞时,尝试稍低的值。由于每个平台各不相同,因此检查从 1
到 25
的每个值可能会比较合理。
与 KeyForgetThreshold
类似,这一选项适用于按键提交的顺序。为了能够识别同时按下的按键,我们需要设置一个超时时间,在这个时间内可以假定这两个按键是同时按下的。
对于 VMWare,同时按下多个键的间隔是 2 毫秒。对于 APTIO V 平台为 1 毫秒。一个接一个地按下按键会导致 6 毫秒和 10 毫秒的延迟。此选项的建议值为 2 毫秒,但对于较快的平台可以选取较小的值,反之亦然。
Auto
— 从下述选项中自动选择
注:目前 V1
、V2
和 AMI
区别于 Auto
,只对特定的协议进行过滤。这种情况在未来的版本中可能会改变。
此选项对于 Option
键位于 Command
右侧的键盘来说会很有用。
目前只支持 ASUS
值,使用的是 Z87 和 Z97 主板上的特殊协议。更多详情请参考 。如果启用了 PointerSupport
,此处值不能为空。
设置较低的值可以提高界面和输入处理性能的响应能力。建议值为 50000
(即 5 毫秒)或稍高一些。选择 ASUS Z87 主板时,请使用 60000
,苹果主板请使用 100000
。你也可以将此值保留为 0
,由 OpenCore 自动计算。
目前支持两种渲染器:Builtin
和 System
。System
渲染器使用固件服务进行文本渲染。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。
这个 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
加载来注入。
-no_compat_check
来忽略兼容性检查。如果你拥有 macOS 10.6 的合法副本,又不想被上述限制所约束,可以在 (或 )找到无机型限制的修改版镜像(ACDT
后缀),更多细节在 DIGEST.txt
中。记住,这些都是经过 OpenCore 测试的最早的 macOS 10.6 版本。
true
。仅更新映像中某一的文件而不影响到其他文件是相当困难的,而且还有可能因为内核缓存日期的改变而导致启动速度变慢,因此建议按照如下命令重建映像:
8R4088
镜像(后缀为
OpenCore 的设计初衷是在 固件 和 操作系统 之间提供一个安全的启动链。在大多数 x86 平台上,可信加载(Trusted Loading)是通过 模式实现的。OpenCore 不仅完全支持这种模式,还扩展了它的功能,以确保通过 进行配置的加密存储,并使用自定义的验证过程向操作系统提供可信加载,例如 。正确的安全启动链需要通过以下步骤来仔细配置:
SecureBootModel
来启用 Apple 安全启动。请注意,并不是每个 macOS 版本都能使用 Apple 安全启动,具体限制详见 章节。
DmgLoading
为 Disabled
来禁用 DMG 加载。非必需,但建议使用。参阅 部分来权衡利弊。apfs.efi
驱动也可以达到相同效果。
Force
驱动也能正常启动。
ScanPolicy
限制加载不受信任的设备。要想做到足够安全,最好的办法是禁止加载 所有可移动设备 和 未知的文件系统。
虽然 OpenCore 并没有提供官方的 Windows 支持,但是使用 Boot Camp 安装 64 位 UEFI Windows(即 Windows 8 及更高版本)应该是可以正常工作的。安装第三方 UEFI、或者仅部分支持 UEFI 引导的系统(如 Windows 7)可能需要额外注意。不论如何,记住以下几点:
UpdateSMBIOSMode
为 Custom
来避免 OEM 激活失效。Windows 激活的细节不在本文档的讨论范围内,你应该能够在网上查找到相关资料。
在大多数情况下,要启用多操作系统切换、安装相关驱动程序,你将需要 提供的 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 也支持审计与调试。使用 NOOPT
或 DEBUG
构建版本(而非 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
启动参数。
通常情况下,获取实际的错误信息就足够了。为此,请确保:
如果你在日志中看不出明显的错误,请逐一检查 Quirks
部分中可用的 hacks。例如,对于 Early Boot 出现的问题(如 OpenCore 启动菜单无法显示),通过 UEFI Shell
(随 OpenCore 打包在一起)可以查看相关调试信息。
debug=0x108
、serial=5
和 msgbuf=1048576
启动参数。如果在串行初始化前就失败了,Sample.plist 中有相关补丁供你参考。
OpenCore 使用 UEFI 首选启动项 来选择默认的启动项。设置的方式随 BIOS 不同而不同,具体请参考 macOS 或 Windows 控制面板。
由于使用 OpenCore 提供的 BOOTx64.efi
作为首选启动项会限制这项功能(可能还会导致一些固件删除不兼容的引导选项),我们强烈建议你启用 RequestBootVarRouting
Quirk,这会将你所做的选择保留在 OpenCore
文件改变条目显示的文字。
如果你需要进行离线安装,请参考 。除了通过 App Store 或 系统更新,你还可以使用 下载 macOS 镜像文件。
可能是因为你没带 HFS+ 驱动。目前我们所知道的 Recovery 分区全都是 HFS+ 文件系统。
可以,没有必要,但请加大力度
OpenCore 支持包括 MacPro 5,1 和虚拟机在内的大部分较新的 Mac 型号。不过,OpenCore 有关在 Mac 硬件上使用的具体细节微乎其微。你可以在 查看相关讨论。
对于 x86 机器码来说, 无法进行大小不同的替换。对于 ACPI 代码来说这是有风险的,而且在技术上这与替换 ACPI 表等价,所以 OpenCore 没有实现。更多详细的解答可以在 上和本文档的 ACPI 章节找到。
SyncRuntimePermissions
)由于没有明确的参考,因此需要自行尝试最佳组合。详细内容请参考本文档中对这些 Quirk 的描述。
一些不依赖 OpenCore 的工具可以帮助调试固件和硬件。下面列出了一些已知的工具。虽然有些工具可以从 OpenCore 启动,但大部分工具都应该直接或从 OpenCoreShell
中单独运行。
这种方法在 Mac 和其他计算机上都可以使用。还有一种只能在 Mac 上的 HFS+ 或 APFS 分区上使用的方法:
注 2:为了能够使用 bless
,你可能需要 。
注 3:为了能够正常启动,你可能需要 (如果有的话)。
一些已知的 UEFI 工具(内置工具已用 *
标出):
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 中。该协议提供了包括但不限于如下功能:
DisableVariableWrite
)。
音频支持为上游协议提供了一种与所选硬件和音频资源交互的方式。所有音频资源应该保存在 \EFI\OC\Resources\Audio
目录。目前支持的音频文件格式为 MP3 和 WAVE PCM。虽然支持哪种音频流格式取决于驱动程序,但大多数常见的音频卡都支持 44100 或 48000Hz 的 16 位立体声。
en
),中文、西班牙语和葡萄牙语除外。具体请看 来了解所有支持的本地化列表。
变量的值来控制。当某一特定文件的音频本地化缺失时,将会使用英语(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 驱动(强烈不推荐)。
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
)的绿色输出的索引。调试日志中输出节点的数量如下(已用粗斜体标出):
找到正确端口的最快办法就是暴力地尝试 0
到 N - 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
),当检测到按键停滞时,尝试稍低的值。由于每个平台各不相同,因此检查从 1
到 25
的每个值可能会比较合理。
与 KeyForgetThreshold
类似,这一选项适用于按键提交的顺序。为了能够识别同时按下的按键,我们需要设置一个超时时间,在这个时间内可以假定这两个按键是同时按下的。
对于 VMWare,同时按下多个键的间隔是 2 毫秒。对于 APTIO V 平台为 1 毫秒。一个接一个地按下按键会导致 6 毫秒和 10 毫秒的延迟。此选项的建议值为 2 毫秒,但对于较快的平台可以选取较小的值,反之亦然。
Auto
— 从下述选项中自动选择
注:目前 V1
、V2
和 AMI
区别于 Auto
,只对特定的协议进行过滤。这种情况在未来的版本中可能会改变。
此选项对于 Option
键位于 Command
右侧的键盘来说会很有用。
目前只支持 ASUS
值,使用的是 Z87 和 Z97 主板上的特殊协议。更多详情请参考 。如果启用了 PointerSupport
,此处值不能为空。
设置较低的值可以提高界面和输入处理性能的响应能力。建议值为 50000
(即 5 毫秒)或稍高一些。选择 ASUS Z87 主板时,请使用 60000
,苹果主板请使用 100000
。你也可以将此值保留为 0
,由 OpenCore 自动计算。
目前支持两种渲染器:Builtin
和 System
。System
渲染器使用固件服务进行文本渲染。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。
这个 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
加载来注入。
-no_compat_check
来忽略兼容性检查。如果你拥有 macOS 10.6 的合法副本,又不想被上述限制所约束,可以在 (或 )找到无机型限制的修改版镜像(ACDT
后缀),更多细节在 DIGEST.txt
中。记住,这些都是经过 OpenCore 测试的最早的 macOS 10.6 版本。
true
。仅更新映像中某一的文件而不影响到其他文件是相当困难的,而且还有可能因为内核缓存日期的改变而导致启动速度变慢,因此建议按照如下命令重建映像:
8R4088
镜像(后缀为
OpenCore 的设计初衷是在 固件 和 操作系统 之间提供一个安全的启动链。在大多数 x86 平台上,可信加载(Trusted Loading)是通过 模式实现的。OpenCore 不仅完全支持这种模式,还扩展了它的功能,以确保通过 进行配置的加密存储,并使用自定义的验证过程向操作系统提供可信加载,例如 。正确的安全启动链需要通过以下步骤来仔细配置:
SecureBootModel
来启用 Apple 安全启动。请注意,并不是每个 macOS 版本都能使用 Apple 安全启动,具体限制详见 章节。
DmgLoading
为 Disabled
来禁用 DMG 加载。非必需,但建议使用。参阅 部分来权衡利弊。apfs.efi
驱动也可以达到相同效果。
Force
驱动也能正常启动。
ScanPolicy
限制加载不受信任的设备。要想做到足够安全,最好的办法是禁止加载 所有可移动设备 和 未知的文件系统。
虽然 OpenCore 并没有提供官方的 Windows 支持,但是使用 Boot Camp 安装 64 位 UEFI Windows(即 Windows 8 及更高版本)应该是可以正常工作的。安装第三方 UEFI、或者仅部分支持 UEFI 引导的系统(如 Windows 7)可能需要额外注意。不论如何,记住以下几点:
UpdateSMBIOSMode
为 Custom
来避免 OEM 激活失效。Windows 激活的细节不在本文档的讨论范围内,你应该能够在网上查找到相关资料。
在大多数情况下,要启用多操作系统切换、安装相关驱动程序,你将需要 提供的 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 也支持审计与调试。使用 NOOPT
或 DEBUG
构建版本(而非 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
启动参数。
通常情况下,获取实际的错误信息就足够了。为此,请确保:
如果你在日志中看不出明显的错误,请逐一检查 Quirks
部分中可用的 hacks。例如,对于 Early Boot 出现的问题(如 OpenCore 启动菜单无法显示),通过 UEFI Shell
(随 OpenCore 打包在一起)可以查看相关调试信息。
debug=0x108
、serial=5
和 msgbuf=1048576
启动参数。如果在串行初始化前就失败了,Sample.plist 中有相关补丁供你参考。
OpenCore 使用 UEFI 首选启动项 来选择默认的启动项。设置的方式随 BIOS 不同而不同,具体请参考 macOS 或 Windows 控制面板。
由于使用 OpenCore 提供的 BOOTx64.efi
作为首选启动项会限制这项功能(可能还会导致一些固件删除不兼容的引导选项),我们强烈建议你启用 RequestBootVarRouting
Quirk,这会将你所做的选择保留在 OpenCore
文件改变条目显示的文字。
如果你需要进行离线安装,请参考 。除了通过 App Store 或 系统更新,你还可以使用 下载 macOS 镜像文件。
可能是因为你没带 HFS+ 驱动。目前我们所知道的 Recovery 分区全都是 HFS+ 文件系统。
可以,没有必要,但请加大力度
OpenCore 支持包括 MacPro 5,1 和虚拟机在内的大部分较新的 Mac 型号。不过,OpenCore 有关在 Mac 硬件上使用的具体细节微乎其微。你可以在 查看相关讨论。
对于 x86 机器码来说, 无法进行大小不同的替换。对于 ACPI 代码来说这是有风险的,而且在技术上这与替换 ACPI 表等价,所以 OpenCore 没有实现。更多详细的解答可以在 上和本文档的 ACPI 章节找到。
SyncRuntimePermissions
)由于没有明确的参考,因此需要自行尝试最佳组合。详细内容请参考本文档中对这些 Quirk 的描述。