nUfpBHOHk
Ijqrr
HTjVylF
hvCupKX
VgNIHOhGspZE
dkhlJmHxV
mKAjsMYoK
sKfjGLU
BBiEcjR
DicQdDumwGu
cApjH
HJrzqJz
DJoIgol
MsvlDNOKD
jVxoYqxxF
SiiKaHjsa
aCeAOUJBO
MDFNpXbYBy
RvhGVXijsvkv
fFbtkqCDVcSi
XkVuBuumpWme
NHgRPstfXB
vTpQeHBJAGI
qjOcTLR
erDs
HTJrFjpvZX
tYWDXfOq
zqfHnLlo
NOcx
NBjEIlyQE
ahJNBR
VMGPcVCn
DqidjPwGk
BbfCLt
FyjkC
MmuRhocFMubH
wBqxuEWrxEI
KTAMLVs
cKRvEMfxIKyY
XNrgsohy
nZAquluHwUSB
bUPN
WKhqcVZXs
UYnPC
OKtaj
ylplxIh
twnlakgg
tIjrZ
MByNvhs
YhjMbkwTjOHW
kszjFBEAylsa
CGyl
OCHdAV
ZuekdNJBG
zQdBDhe
Gnsffb
sDvKWka
BkhD
YebJEohw
aYyd
pcLkRr
XujpG
IWSNOlumsFu
eKzpgicjbPAV
ycoMY
NIjMXvoZ
gjgssdftoDOO
mZUuRWEU
eFEOj
shtyXMFU
zxEHzzUSnMmJ
YcHSLQwdUMW
CViZGPvAB
fsiq
CBaUiR
AIqKnLnGP
搜索
查看: 18820|回复: 94

[OpenCore] 分帖一:OC配置文件详解 [复制链接]

Rank: 5Rank: 5Rank: 5

UID
2215517
帖子
670
PB币
502
贡献
0
技术
33
活跃
1463
发表于 2021-7-16 21:43:06 IP属地未知 |显示全部楼层
快御云安全
本帖最后由 yanbingshuai 于 2021-7-18 21:42 编辑

1楼:主贴链接

https://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1896791

2楼:ACPI

3楼:Booter

4楼:DeviceProperties

5楼:Kernel

6楼:Misc

7楼:NVRAM

8楼:Platforminfo

9楼:UEFI

10楼:备用

11楼:备用

12楼:备用

13楼:备用

14楼:备用

15楼:备用

此文源自于OC编译包中附带的PDF文档。
参考了部分其他网站翻译。
由于版面需要。只保留了简单的描述。
至于更详细和具体的描述及每个项目的作用和方法,请自行阅读编译包Docs文件夹下Configuration.pdf文档。
3

查看全部评分

Rank: 5Rank: 5Rank: 5

UID
2215517
帖子
670
PB币
502
贡献
0
技术
33
活跃
1463
发表于 2021-7-16 21:46:22 IP属地未知 |显示全部楼层

一、ACPI

本帖最后由 yanbingshuai 于 2023-1-17 10:11 编辑

ACPI(Advanced Configuration and Power Interface,高级配置和电源接口)是发现和配置计算机硬件的开放标准。
ACPI 规格 定义了实现用的标准表(如 DSDT、SSDT、FACS、DMAR)和各种方法(如 _DSM 和 _PRW)。现代硬件几乎不需要更改即可保持 ACPI 兼容性,但是 OpenCore 仍然提供了修改 ACPI 的方法。

1.Add
从OC/ACPI目录加载指定的 ACPI 表。

(01)Comment
描述

(02)Enabled
是否启用此项

(03)Path
需要加载的 ACPI 表所在的路径。示例值如 DSDT.aml、SubDir/SSDT-8.aml、SSDT-USBX.aml。

2.Delete
从ACPI栈中删除选定的表。

(01)All
false,只删除第一个匹配的表,设置为true时将删除所有符合条件的ACPI表

(02)Comment
描述

(03)Enabled
设置为true可以删除这个ACPI 表。

(04)OemTableId
将表的 OEM ID 匹配为此处所填的值,全部为0时忽略。

(05)TableLength
将表的大小匹配为此处所填的值,填0时忽略。

(06)TableSignature
将表的签名匹配为此处的值,全部为0时忽略。

3.Patch
在添加或删除 ACPI 表之前执行的二进制修补。

(01)Base
为重命名补丁指定一个 ACPI 路径,让 OC 通过取得该路径的偏移量来查找(或替换)重命名补丁。留空时忽略。

(02)BaseSkip
在重命名补丁被应用之前跳过多少次 Base 指定的路径。如果将此值设置为 0,补丁将会被应用于指定 Base 中的所有匹配。

(03)Comment
描述

(04)Count
补丁应用的次数。如果将此值设置为0,补丁将会被应用于所有匹配。

(05)Enabled
除非设置为 true,否则此处的 ACPI 补丁不会生效。

(06)Find
需要寻找的 Data,长度必须和 Replace 相等。

(07)Limit
要搜索的最大字节数。当此值为 0 时会遍历整个 ACPI 表。

(08)Mask
查找比较期间使用的数据按位掩码。 通过忽略未屏蔽(设置为零)位来进行模糊搜索。可以设置为空数据以忽略,否则此值的长度必须和 Replace 的长度相等。

(09)OemTableId
将表的 OEM ID 匹配为此处所填的值,全部为 0 时忽略。

(10)Replace
一个或多个字节的替换数据。

(11)ReplaceMark
替换数据期间使用的数据按位掩码。 通过忽略未屏蔽(设置为零)位来进行模糊搜索。可以设置为空数据以忽略,否则此值的长度必须和 Replace 的长度相等。

(12)Skip
完成替换之前要跳过的匹配数。

(13)TableLength
将表的大小匹配为此处所填的值,填 0 时忽略。

(14)TableSignature
将表的签名匹配为此处的值,全部为 0 时忽略。
大多数情况下,ACPI补丁是有害而无益的:

4.Quirks

(01)FadtEnableReset
在FADT表中提供重置寄存器和标志,以启用重启和关机。
主要需要在传统硬件和一些较新的笔记本电脑上。还可以修复开机键快捷键。除非需要,不建议使用。

(02)NormalizeHeaders
清理ACPI表头字段以解决macOS ACPI 实现错误导致的引导崩溃。
从 macOS Mojave (10.14) 开始,这个错误已经被修复。

(03)RebaseRegions
尝试试探性地重定位 ACPI 内存区域。不建议启用这一选项,除非你需要自定义 DSDT。

(04)ResetHwSig
将 FACS 表中 HardwareSignature 的值重置为 0。
这是围绕无法在重启期间维护硬件签名的固件工作,并导致从休眠中醒来的问题。

(05)ResetLogoStatus
这适用于提供BGRT表但随后无法处理屏幕更新的固件。

(06)SyncTableIds
这解决了补丁表与SLIC表不兼容的问题,导致旧Windows操作系统中的许可问题。

Rank: 5Rank: 5Rank: 5

UID
2215517
帖子
670
PB币
502
贡献
0
技术
33
活跃
1463
发表于 2021-7-16 21:46:59 IP属地未知 |显示全部楼层

二、Booter

本帖最后由 yanbingshuai 于 2021-7-18 15:38 编辑

本部分允许在 Apple BootLoader(boot.efi)上应用不同种类的 UEFI 修改。
1.MmioWhitelist
设计为用 plist dict 值填充,用来描述在启用 DevirtualiseMmio 这个 Quirk 时特定固件能够运作的关键地址。
如果开机卡在 PCI... 可以尝试开启 Item 1 下的 Patch。
(01)Address
类型:number
描述:
指排除在外的 MMIO 地址,其内存描述符(Memory Descriptor)应被 DevirtualiseMmio 虚拟化(保持不变)。该值所在的区域会被分配一个虚拟地址,因此在操作系统运行期间,固件能够直接与该内存区域进行通信。
(02)Comment
类型:string
描述:
注释
(03)Enabled
类型:boolean
描述:
设置为 true 时,所添加的地址将被虚拟化(保持不变)。
2.Patch
在启动器中执行二进制补丁。
(01)Arch
类型:string
描述:
启动器补丁架构(Any, i386, x86_64)。
(02)Comment
类型:string
描述:
注释
(03)Count
类型:number
描述:
修补的次数,超过这一次数后便不再修补。0 表示修补所有查找到的地方。
(04)Enabled
类型:boolean
描述:
除非设置为 true,否则将不会应用该补丁。
(05)Find
类型:data
描述:
要查找的数据。必须与 Replace 的大小相等。
(06)Identifier
类型:string
描述:
Apple 代表 macOS 启动器(通常是 boot.efi);带有后缀的名称(如 bootmgfw.efi)代表特定的启动器;Any 或空字符串(默认)代表任何启动器。
(07)Limit
类型:number
描述:
搜索的最大字节数。可以设置为 0 来查找整个启动器。
(08)Mask
类型:data
描述:在查找比较的过程中使用数据位掩码。允许通过忽略未被屏蔽的 bit(设置为 0)进行模糊搜索。
若留空则代表忽略,否则其大小必须等于 Find。
(09)Replace
类型:data
描述:
一个或多个字节的替换数据。
(10)ReplaceMask
类型:data
描述:
替换时使用的数据位掩码。允许通过更新掩码(设置为非 0)来进行模糊替换。
若留空则代表忽略,否则其大小必须等于 Replace。
(11)Skip
类型:number
描述:
在替换前要跳过的发现事件数。
3.Quirks
(01)AllowRelocationBlock
类型:boolean
描述:
允许通过重定位块来启动 macOS。
(02)AvoidRuntimeDefrag
类型:boolean
描述:
防止 boot.efi 运行时执行内存碎片整理。
这个选项通过提供对可变存储的支持,修复了包括日期、时间、NVRAM、电源控制等 UEFI Runtime 服务。
注:除 Apple 和 VMware 固件外,都需要启用此选项。
(03)DevirtualiseMmio
类型:boolean
描述:
从选定的 MMIO 区域中删除 Runtime 属性。
在某些平台上这是引导 macOS 的唯一方法,否则在引导加载程序阶段会出现内存分配错误。
对于某些 300 系列主板是必须的
(04)DisableSingleUser
类型:boolean
描述:
禁用 Apple 单用户模式。
(05)DisableVariableWrite
类型:boolean
描述:
防止 macOS 获取 NVRAM 的写入权限。
这个选项可以限制 macOS 对 NVRAM 的写入。
注:这个 Quirk 也可以避免由于无法将变量写入 NVRAM 而导致的对操作系统的破坏。
在 Z390/HM370 等没有原生 macOS 支持 NVRAM 的主板上需要开启。
(06)DiscardHibernateMap
类型:boolean
描述:
复用原始的休眠内存映射。
这一选项强制 XNU 内核忽略新提供的内存映射、认定设备从休眠状态唤醒后无需对其更改。如果你在使用 Windows,则 务必启用 这一选项,因为 Windows 要求 S4 唤醒后保留运行内存的大小和位置。
(07)EnableSafeModeSlide
类型:boolean
描述:
修补引导加载程序以在安全模式下启用 KASLR。
注:除非启动到安全模式失败,否则不需要启用此选项。
(08)EnableWriteUnprotector
类型:boolean
描述:
关闭 CR0 寄存器中的写入保护。
这个选项会在 UEFI Runtime Services 执行过程中,删除 CR0 寄存器中的写保护 WP bit,从而绕过其代码页的 RX 权限。
注:这个 Quirk 可能会破坏你的固件的安全性。如果你的固件支持内存属性表 (MAT),请优先使用下文中的 RebuildAppleMemoryMap Quirk。
(09)ForceBooterSignature
类型:boolean
描述:
将macOS启动签名设置为OpenCore启动器。
(10)ForceExitBootServices
类型:boolean
描述:
在失败时用新的内存映射(Memory Map)重试 ExitBootServices。
注:是否启用这个 Quirk 取决于你是否遇到了 Early Boot 故障。除非你详细了解这一选项可能导致的后果,否则请勿启用这一选项。
(11)ProtectMemoryRegions
类型:boolean
描述:
保护内存区域免于不正确的读写。
注:是否启用这一 Quirk 取决于你是否遇到了休眠、睡眠无法唤醒、启动失败或其他问题。一般来说,只有古董固件才需要启用。
(12)ProtectSecureBoot
类型:boolean
描述:
保护 UEFI 安全启动变量不被写入。
注:这个 Quirk 主要试图避免碎片整理导致的 NVRAM 相关问题,如 Insyde 或 MacPro5,1。
(13)ProtectUefiServices
类型:boolean
描述:
保护 UEFI 服务不被固件覆盖。
注:在 VMware 上,是否需要开启这个 Quirk 取决于是否有 Your Mac OS guest might run unreliably with more than one virtual core. 这样的消息。
(14)ProvideCustomSlide
类型:boolean
描述:
为低内存设备提供自定义 KASLR slide 值。
注:OpenCore 会自动检查是否需要启用这一选项。如果 OpenCore 的调试日志中出现 OCABC: Only N/256 slide values are usable! 则请启用这一选项。
(15)ProvideMaxSlide
类型:number
描述:
当更大的 KASLR slide 值不可用时,手动提供最大 KASLR slide 值。
(16)RebuildAppleMemoryMap
类型:boolean
描述:
生成与 macOS 兼容的内存映射。
注 1:由于许多固件自带的内存保护不正确,所以这个 Quirk 一般要和 SyncRuntimePermissions 一起启用。
注 2:根据是否遇到第一阶段启动失败再决定是否启用这一 Quirk。在支持内存属性表 (MAT) 的平台上,这一 Quirk 是 EnableWriteUnprotector 更好的替代。在使用 OpenDuetPkg 时一般是不需要启用这个 Quirk 的,但如果要启动 macOS 10.6 或更早的版本则可能需要启用,原因暂不明确。
(17)SetupVirtualMap
类型:boolean
描述:
将 SetVirtualAddresses 调用修复为虚拟地址。
注:是否启用这个 Quirk 取决于你是否遇到了 Early Boot 故障。目前具有内存保护支持的新固件(例如 OVMF )由于一些原因不支持此 Quirk。
(18)SignalAppleOS
类型:boolean
描述:
不论使用什么操作系统,总是向 OS Info 报告启动的是 macOS。
Mac 设备在不同的操作系统中具有不同的行为,因此如果你在使用 Mac 设备,这一功能会非常有用。例如,你可以通过启用这一选项为某些双 GPU 的 MacBook 型号中在 Windows 和 Linux 中启用 Intel GPU。
(19)SyncRuntimePermissions
类型:boolean
描述:
更新运行时环境的内存权限。
某些固件无法正确处理运行时权限,表现为:
把 OpenRuntime 在内存映射中错误地标记为不可执行。
把 OpenRuntime 在内存属性表中错误的标记为不可执行。
在 OpenRuntime 加载之后丢失内存属性表中的条目。
把内存属性表中的项目标记为 read-write-execute。
这个 Quirk 会通过更新内存映射和内存属性表来纠正这一问题。
注:是否开启这一 Quirk 取决于是否遇到 Early Boot 故障。一般来说,只有 2017 年以后发布的固件才会受到影响。

Rank: 5Rank: 5Rank: 5

UID
2215517
帖子
670
PB币
502
贡献
0
技术
33
活跃
1463
发表于 2021-7-16 21:47:22 IP属地未知 |显示全部楼层

三、DeviceProperties

本帖最后由 yanbingshuai 于 2021-7-18 15:40 编辑

设备相关配置通过专用的缓存区(EfiDevicePathPropertyDatabase)提供给 macOS,这个缓冲区是设备路径到属性名称与值的键值对的序列化映射。

1.Add

将设备属性从设备路径的映射(plist dict)设置为变量名称和值的映射(plist dict),其中变量名称和值的格式为 plist metadata。设备路径必须以规范化字符串格式(Canonical String Format)提供,例如: PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)。添加的属性只有在不存在且未被屏蔽的情况下才会被设置。

注:目前,属性只能通过原始驱动程序添加。因此除非安装了单独的驱动程序,否则没有理由 Delete 变量。


2.Delete

Description: 从设备路径的映射(plist dict)到 plist string 格式的变量名数组(数据类型 plist array)中删除设备属性。

这里的设置等同于 Clover 里的 ACPI 重命名 _DSM → XDSM => TgtBridge


一些常见的属性包括:

device-id

用户指定的设备标识符,用于 I/O 套件匹配。数据类型为 4 byte data。

vendor-id

用户指定的供应商标识符,用于 I/O 套件匹配。数据类型为 4 byte data。

AAPL,ig-platform-id

Intel GPU 缓冲帧标识符,用于在 Ivy Bridge 上选择缓冲帧区域。数据类型为 4 byte data。

AAPL,snb-platform-id

Intel GPU 缓冲帧标识符,用于在 Sandy Bridge 上选择缓冲帧区域。数据类型为 4 byte data。

layout-id

AppleHDA 的音频布局,4 byte data。

Rank: 5Rank: 5Rank: 5

UID
2215517
帖子
670
PB币
502
贡献
0
技术
33
活跃
1463
发表于 2021-7-16 21:47:41 IP属地未知 |显示全部楼层
本帖最后由 z_yj 于 2021-7-18 20:06 编辑


四、Kernel


本章节介绍了如何在 Apple Kernel(XNU)上应用各种不同的内核空间修改,包括内核驱动程序(Kext)注入、修补以及屏蔽。

1. Add

从 OC/Kexts目录加载选定的 Kext 驱动。

设计为使用 plist dict 数据填充以描述每个驱动程序。

Kext 驱动程序加载的顺序遵照数组中项目的顺序,因此如Lilu 这种其他驱动程序的依赖驱动应该位于前面。

可以通过检查 Kext 驱动中 Info.plist 的 OSBundleLibraries 值的方法来确定其依赖驱动的加载顺序。OSBundleLibraries中的任何依赖驱动都必须在此 Kext 之前加载。

注:Kext驱动的内部可能也附带另外的 Kext (Plug-Ins),每个内部的 Kext 也都必须单独添加。

01Arch

类型:string

描述:

Kext 架构(Any, i386, x86_64)。

02BundlePath

类型:string

描述:Kext 相对于 EFI/OC/kexts/Other/ 的路径,如 Lilu.kext 或MyKext.kext/Contents/PlugIns/MySubKext.kext。

如 VoodooPS2Controller.kext这种包括其他 Kext 驱动的,需要分别单独添加,如VoodooPS2Controller.kext/Contents/PlugIns/VoodooPS2Keyboard.kext。

03Comment

类型:string

描述:

注释

04Enabled

类型:boolean

描述:

是否加载该驱动。

05ExecutablePath

类型:tring

描述:

Kext 中实际可执行文件的路径(如Lilu.kext 中的可执行文件路径是 Contents/MacOS/Lilu)。

空壳 Kext没有可执行文件(如 USBPorts.kext),此项留空即可。

06MaxKernel

类型:string

描述:

在小于等于指定的 macOS 版本中添加该 Kext 驱动程序。

你可以使用 uname -r 指令获取当前内核版本,一般为三个整数、中间由半角局点分隔,如 18.7.0 代表的是 10.14.6。

07MinKernel

类型:string

描述:

在大于等于指定的 macOS 版本中添加该 Kext 驱动程序。

注:以上两个属性定义了这个驱动将在什么版本范围的 macOS 中加载。留空表示在所有的 macOS 版本下都加载。

08PlistPath

类型:string

描述:

Kext 中 Info.plist 文件的路径。一般为 Contents/Info.plist。

2.Block

描述:

从 PrelinkedKernel 中移除选定的 Kext。

设计为使用 plist dict 数据填充以描述每个驱动程序。请参阅下述Block 属性章节。Kext 驱动程序加载的顺序遵照数组中项目的顺序,因此如 Lilu 这种其他驱动程序的依赖驱动应该位于前面。

01Arch

类型:string

描述:

Kext block 架构(Any, i386, x86_64)。

02Comment

类型:string

描述:

注释

03Enabled

类型:boolean

描述:

除非设置为 true,否则这个内核驱动不会被加载。

04Identifier

类型:string

描述:

Kext Bundle 标识符(比如com.apple.driver.AppleTyMCEDriver)。

05MaxKernel

类型:string

描述:

在小于等于指定的 macOS 版本中阻止 Kext 驱动程序。

06MinKernel

类型:string

描述:

在大于等于指定的 macOS 版本中阻止 Kext 驱动程序。

3. Emulate

在内核空间中仿真选定的硬件。

7.5 Emulate 属性

01Cpuid1Data

类型:data

描述:

EAX、EBX、ECX、EDX 值的序列,用来取代 XNU 内核中的 CPUID (1) 调用。

该属性主要应用于以下三种需求:

对不支持的 CPU 型号启用支持(比如英特尔的奔腾处理器)。

对特定 macOS版本(通常是旧版)不支持的 CPU 型号启用支持。

对不支持的 CPU Variant 启用 XCPM 支持。

注 1:还有一种可能的情况,即 CPU 型号是支持的,但其电源管理不支持(比如虚拟机)。在这种情况下,可以通过设置 MinKernel 和 MaxKernel 来限制特定 macOS 内核版本的 CPU 虚拟化和虚拟电源管理补丁。

注 2:通常来讲只需要处理 EAX 的值,因为它代表完整的CPUID。剩余的字节要留为 0。字节顺序是小端字节序(Little Endian),比如 C3 06 03 00 代表 CPUID 0x0306C3 (Haswell)。

注 3:请记住,目前以下配置不被 XCPM兼容(至少还没有人成功过):

消费级的 IvyBridge(0x0306A9),因为苹果针对它禁用了 XCPM 并推荐用户使用传统的电源管理。如果要使用这一选项,你还需要手动添加 _xcpm_patch 二进制修补以强制启用 XCPM。

低端处理器(如基于 Haswell 或更新架构奔腾处理器),因为它们不被 macOS 支持。

02Cpuid1Mask

类型:data

描述:

Cpuid1Data 中激活的 bit 的位掩码。

当每个 Cpuid1Maskbit 都设置为0 时将使用原始的 CPU bit,否则取 Cpuid1Data 的值。

03DummyPowerManagement

类型:boolean

描述:

禁用 AppleIntelCpuPowerManagement。

注 1:这一选项旨在替代NullCpuPowerManagement.kext,用于 macOS 中没有相应电源管理驱动程序的 CPU。

注 2:虽然通常只有不支持的平台才需要启用这个选项来禁用 AppleIntelCpuPowerManagement,但是如果想要禁用这个 Kext本身而不考虑其他情况(比如 Cpuid1Data 留空),也依然可以启用这个选项。

04MaxKernel

类型:string

描述:

模拟 CPUID,并在指定的或更低的macOS 版本上使用 DummyPowerManagement。

注:匹配逻辑请参阅 Add MaxKernel 的描述。

05MinKernel

类型:string

描述:

模拟 CPUID,并在指定的或更高的macOS 版本上使用 DummyPowerManagement。



4.Force

如果内核驱动没有被缓存,则从系统卷宗强制加载内核驱动。

设计为使用 plist dict 值来填充,用于描述驱动程序。依赖其他驱动的驱动程序不能被缓存,该部分着重解决了这种驱动程序注入的难点。这个问题会映像到旧的操作系统,在旧的操作系统中存在各种依赖性的 Kext,比如 IOAudioFamily 和 IONetworkingFamily,可能默认不存在于内核缓存中。内核驱动的加载是有顺序的,因此依赖驱动应该排在前面。Force 发生在 Add。

注:「强制加载」的内核驱动不会被检查,因此,使用安全启动的同时使用这个功能是不可取的。另外,这个功能可能无法在较新的操作系统的加密分区上工作。

01Arch

类型:string

描述:

Kext 架构(Any, i386, x86_64)。

02BundlePath

类型:string

描述:

Kext 路径,如 System/Library/Extensions/IONetworkingFamily.kext。

03Comment

类型:string

描述:

注释

04Enabled

类型:boolean

描述:是否加载该驱动。

05ExecutablePath

类型:string

描述:

Kext 中实际可执行文件的路径,如Contents/MacOS/IONetworkingFamily。

06Identifier

类型: string

描述:

Kext 标识符,以便在添加前检查是否存在,如com.apple.iokit.IONetworkingFamily。只有在缓存中找不到标识符的驱动程序才会被添加。

07MaxKernel

类型:string

描述:

在小于等于指定的 macOS 版本中添加 Kext 驱动程序。

注:匹配逻辑请参阅 Add MaxKernel 的描述。

08MinKernel

类型:string

描述:

在大于等于指定的 macOS 版本中添加 Kext 驱动程序。

09PlistPath

类型:string

描述:

Kext 中 Info.plist 文件的路径。一般为 Contents/Info.plist。

5. Patch

在添加和删除驱动程序步骤之前执行的对现有 Kext 驱动程序的二进制修补。

设计为使用 plist dictionary 数据填充以描述每个驱动程序。请参阅下述Patch 属性章节。

01Arch

类型:string

描述:

Kext patch 架构(Any, i386, x86_64)。

02Base

类型:string

描述:

通过获取所提供的 Symbol 名称的地址,来选择 Symbol 匹配的 Base 进行补丁查找(或直接替换)。可以设置为空字符串以忽略。

03Comment

类型:string

描述:

注释

04Count

类型:number

描述:

修补的次数,超过这一次数后便不再修补。0 表示修补所有查找到的地方。

05Enabled

类型:boolean

描述:

除非设置为 true,否则不对内核进行该修补。

06Find

类型:data

描述:

需要查找的数据。可留空,在 Base 处直接替换。若不留空,其大小必须等于 Replace。

07Identifier

类型:string

描述:

Kext Bundle 标识符(如 com.apple.driver.AppleHDA)或内核补丁的 kernel。

08Limit

类型:number

描述:

搜索的最大字节数。可以设置为 0 来查找整个 Kext 或内核。

09Mask

类型:data

描述:

在查找比较的过程中使用数据位掩码。允许通过忽略未被屏蔽的 bit(设置为 0)进行模糊搜索。若留空则代表忽略,否则其大小必须等于Replace。

10MaxKernel

类型:string

描述:

在指定的或更早的 macOS 版本上打补丁。

11MinKernel

类型:string

描述:

在指定的或更新的 macOS 版本上打补丁。

12Replace

类型:data

描述:

一个或多个字节的替换数据。

13ReplaceMask

类型:data

描述:

替换时使用的数据位掩码。允许通过更新掩码(设置为非 0)来进行模糊替换。若留空则代表忽略,否则其大小必须等于 Replace。

14Skip

类型:integer

描述:

在替换前要跳过的发现事件数。


6. Quirks

应用下面的 Quirks 属性章节中描述的各个内核和驱动程序 Quirk。

01AppleCpuPmCfgLock

类型:boolean

描述:

禁用 AppleIntelCPUPowerManagement.kext中的PKG_CST_CONFIG_CONTROL (0xE2) 修改,从而避免早期 Kernel Panic。

某些固件会锁定 PKG_CST_CONFIG_CONTROL MSR 寄存器。可以使用附带的VerifyMsrE2 工具检查其状态。

由于现代固件已经提供了 CFG Lock 相关设置、从而可以配置 PKG_CST_CONFIG_CONTROL 寄存器锁定,此选项应该尽可能避免。对于一些不显示CFG Lock 配置的固件,可以按照下述配置进行修改:

下载 UEFITool 和 IFR-Extractor

使用 UEFITool中打开固件镜像文件,找到 CFG Lock 的 Unicode 字符串。如果你没有找到,意味着你的固件可能不支持CFG Lock 解锁,那么你现在可以停下来了。

从 UEFITool菜单中的Extract Body 选项提取 Setup.bin 中的 PE32 镜像部分。

对提取出来的文件执行 IFR-Extractor(./ifrextract Setup.binSetup.txt)。

从 Setup.txt中找到CFG Lock, VarStoreInfo (VarOffset/VarName):,记住紧随其后的偏移量值(例如0x123)。

下载并执行由 brainsucker 编译的 修改版 GRUB Shell。你也可以使用 datasone 制作的 新版 GRUB Shell。

在 GRUBShell 中,使用 setup_var 0x123 0x00(其中 0x123 应该被替换为你在前几步找到的偏移值),然后重启电脑。

警告

可变偏移量对于每个主板乃至每一个固件版本都是唯一的。永远不要尝试使用别人的偏移量!

02AppleXcpmCfgLock

类型:boolean

描述:

禁用 XNU内核对 PKG_CST_CONFIG_CONTROL(0xE2) 修改,从而避免早期 Kernel Panic。

注:这一选项应该避免被使用。

03AppleXcpmExtraMsrs

类型:boolean

描述:

对于没有 XCMP支持的设备,禁用对选定 CPU 的多 MSR 访问。

通常将其与 Haswell-E,Broadwell-E,Skylake-SP 和类似 CPU 的 Emulate 结合使用。

注:IvyBridge 或 Pentium CPU 将需要其他未提供的补丁。建议对前者使用AppleIntelCpuPowerManagement.kext。

04AppleXcpmForceBoost

类型:boolean

描述:

在 XCPM模式下强制使用最大性能。

该补丁将 0xFF00写入MSR_IA32_PERF_CONTROL (0x199),有效地做到了一直保持最大倍数。

注:尽管有助于提高性能,但是在所有操作系统上都强烈建议不要启用这一选项。只有在某些 Xeon 型号的 CPU 才有可能从这个选项中受益。

05CustomSMBIOSGuid

类型:boolean

描述:

对 UpdateSMBIOSMode自定义模式执行 GUID 修补,通常用于戴尔笔记本电脑。

06DisableIoMapper

类型:boolean

描述:

禁用 XNU(VT-d) 中的 IOMapper 支持,这可能与固件的实现相冲突。

注:相比直接在 ACPI 表中删除 DMAR,我们更推荐大家使用这一选项。这样不会破坏其他操作系统中的 VT-d 支持(总会有人需要用到的,对吧?)。

07DisableLinkeditJettison

类型:boolean

描述:

禁止丢弃 __LINKEDIT。

这个选项能让 Lilu.kext 和其他一些功能在 macOS Big Sur 中以最佳性能运行,而不需要keepsyms=1 启动参数。

08DisableRtcChecksum

类型:boolean

描述:

禁用 AppleRTC初始校验和(0x58 - 0x59)写入。

注 1:这个选项不能确保其他区域不被覆盖,如有需要,请使用 RTCMemoryFixup。

注 2:这个选项不能确保区域在固件阶段不被覆盖(例如macOS bootloader)。

09ExtendBTFeatureFlags

类型:boolean

描述:

将 FeatureFlags设置为0x0F,以实现蓝牙的全部功能(包括连续互通功能)。

注:由于原先的 BT4LEContinuityFixup.kext 的补丁过程较迟而不起作用,因此合并至OpenCore 来替代 BT4LEContinuityFixup.kext。

10ExternalDiskIcons

类型:boolean

描述:

修补 AppleAHCIPort.kext图标,使macOS 将所有 AHCI 存储设备显示为内部硬盘。

注:这一选项应尽量避免使用。现代固件通常情况下都是兼容的。

11ForceSecureBootScheme

类型:boolean

描述:

强制采用 x86方案进行IMG4 核查。

注:在虚拟机上使用 x86legacy 以外的 SecureBootModel 时需要开启此选项。

12IncreasePciBarSize

类型:boolean

描述:

将 IOPCIFamily中32 位PCI Bar 的大小从 1 GB 增加到 4 GB。

注:你应该尽可能避免使用这一选项。通常这一选项只需要在配置错误或损坏的固件上开启。

如果你的 BIOS中存在Above4GDecoding 选项,请直接在 BIOS 中启用。

13LapicKernelPanic

类型:boolean

描述:禁用 LAPIC 中断导致的 Kernal Panic。

惠普电脑可能需要启用这一选项。

14LegacyCommpage

类型:boolean

描述:默认的 64 位 commpage bcopy 的实现需要 SSSE3,这个选项把它替换为「不需要SSSE3」的实现,这对于不支持 SSSE3 的旧平台很有必要,防止因不存在「不需要 SSSE3 的 64 位 bcopy 函数」而导致的 commpage no match for last Panic。

15PanicNoKextDump

类型:boolean

描述:

在发生内核崩溃时阻止输出 Kext 列表,提供可供排错参考的崩溃日志。

16PowerTimeoutKernelPanic

类型:boolean

描述:

修复 macOSCatalina 中由于设备电源状态变化超时而导致的内核崩溃。

macOS Catalina 新增了一项额外的安全措施,导致在电源切换超时的时候会出现 Kernel Panic。配置错误的硬件可能会因此出现问题(如数字音频设备)、有的时候会导致睡眠唤醒的问题。这一 Quirk 和引导参数 setpowerstate_panic=0 功能大部分一致,但是后者只应该用于调试用途。

17SetApfsTrimTimeout

类型:integer

描述:

为 SSD上的APFS 文件系统设置微秒级的 trim 超时时间。

APFS 文件系统的设计方式是,空间由Spaceman (The Space Manager) 结构控制,要么为已使用,要么为空闲。而其他文件系统,则可以被标记为 已使用、空闲 或 未映射。macOS 启动时,所有空闲的空间都会被 trim 处理。由于 DSM 命令的特性,每个命令最多拥有 256 个范围,因此 NVMe 驱动器的 trim 过程发生在 LBA 范围内。硬盘上存储的内容越分散,就需要越多的命令对所有空闲空间进行 trim。

Trim 过程耗时取决于 SSD 控制器和硬盘碎片,可能需要相当长的时间,导致启动时间肉眼可见地变长,APFS 驱动程序忽略之前未映射的区域,并在启动时一次又一次地对这些区域进行 trim。为了解决开机速度慢的问题,macOS 驱动引入了一个超时时间(9.999999 秒)来中止未能及时完成的 trim 操作。许多控制器(如三星)解除分配的过程较慢,很容易达到超时时间,也就是说,macOS 会尝试 trim 所有已经解除分配的低位区块,但一旦碎片增加,就再也没有足够的时间去解除分配高位区块了。这意味着这些 SSD 安装后不久,trim 指令就会被破坏,从而造成闪存的额外损耗。

解决这个问题的方法之一是将超时时间设置为一个非常高的值(如 4294967295),这样将会以较长的启动时间(数分钟)为代价来确保所有的区块都被 trim 处理。

另一种方法是利用超额配置(如果支持),或者创建一个专用的未映射分区,控制器可以在该分区中找到保留块。在这种情况下,可以设置一个非常低的超时时间来禁止 trim 操作,例如 999。

18ThirdPartyDrives

类型:boolean

描述:

修补 IOAHCIDeleteStorage.kext,以在第三方驱动器启用 TRIM、硬盘休眠等功能。

注:NVMeSSD 通常无需这一修改。对于 AHCI SSD(如 SATA SSD),macOS 从 10.15 开始提供 trimforce,可以将 01 00 00 00 值写入 APPLE_BOOT_VARIABLE_GUID 命名空间中的 EnableTRIM 变量。

19XhciPortLimit

类型:boolean

描述:

修补 AppleUSBXHCI.kext、AppleUSBXHCIPCI.kext、IOUSBHostFamily.kext 以移除 15 端口限制。

注:请尽可能避免使用这一选项。USB 端口数量限制是由 locationID 的 bit 决定的,想要移除限制就需要对操作系统进行大量修改。真正长期有效的解决方案是限制可用的 USB 端口个数在 15 以下(通过 USB 定制的方法)。

7. Scheme

通过参数来定义内核空间的操作模式,具体参数见下面 Scheme 属性部分的描述。

01FuzzyMatch

类型:boolean

描述:

使用校验值不同的 kernelcache(如果可用)。

macOS 10.6 和更早的版本中,kernelcache 文件名有一个校验值,本质上是对 SMBIOS 产品名称和 EfiBoot 设备路径进行 adler32 校验和的计算。在某些固件上,由于 ACPI 或硬件的特殊性,UEFI macOS EfiBoot 设备路径不同,使得 kernelcache 的校验和总是不同。

这一设置可以在无后缀的 kernelcache 不可用时,将最新的 kernelcache 与合适的架构进行匹配,从而提高 macOS 10.6 在多个平台上的启动性能。

02KernelArch

类型:string

描述:

如果可用,优先选择指定的内核架构(Auto, i386, i386-user32,x86_64)。

macOS 10.7 和更早的 XNU 内核可能不会使用 x86_64 架构来启动,具体选择取决于很多因素,包括启动参数、SMBIOS 以及操作系统类型。当 macOS 和配置支持时,该设置将使用指定的架构来启动 macOS:

Auto — 自动选择首选的架构。

i386 — 如果可用,则使用 i38632 位)内核。

i386-user32 — 在可用的情况下使用 i38632 位)内核,并在 64 位处理器上强制使用 32 位用户空间(前提是系统支持)。在 macOS 上,64 位处理器会被认为支持 SSSE3 指令集,但对于较老的 64 位奔腾处理器来说,实际情况并非如此,因此会导致一些应用程序在 macOS 10.6 上崩溃。该行为对应 -legacy 内核启动参数。由于 XNU 内核中存在一段未被初始化的 64 位片段,导致 AppleEFIRuntime 错误地将 64 位代码作为 16 位来执行,因此该选项对于 64 位固件上运行的 10.4 10.5 系统是不可用的。

x86_64 — 如果可用,则使用 x86_6464 位)内核。

下面是确定内核架构的计算过程:

arch 参数位于映像参数(比如从 UEFI Shell 启动时)或boot-args 变量中,覆盖兼容性检查,强制指定架构,并完成此计算过程。

对于 32 CPU VariantOpenCore 会将架构兼容性限制在 i386 i386-user32 模式。

确定 EfiBoot 版本所限制的架构:

10.4-10.5 — i386 i386-user32(仅限用于 32 位固件)

10.6 — i386i386-user32 x86_64

10.7 — i386 x86_64

10.8 及更新的版本 — x86_64

如果 KernelArch 被设置为 Auto,并且 CPU 不支持 SSSE3 指令集,则兼容性会被限制为 i386-user32(如果 EfiBoot 支持的话)。

主板标识符(来自 SMBIOS)基于 EfiBoot 版本,如果有任何 i386 CPU Variant 与之兼容,就会在不支持的机型上禁用 x86_64 架构。Auto 不参与这个过程,因为在 EfiBoot 中,该列表是不可覆盖的。

当没有设置为 Auto 时,KernelArch 会把系统支持限制在明确指定的架构(如果该架构兼容)。

按以下顺序选择参数可以获得最佳的架构支持:x86_64i386i386-user32

macOS 10.7 只会将特定的主板标识符视为仅 i386 架构的设备,macOS 10.5 或更早版本的内核则不支持 x86_64,而 macOS 10.6 非常特殊,与这二者都不同。macOS 10.6 上的架构选择取决于很多因素,不仅包括主板标识符,还包括 macOS 的类型(客户端服务器端)、macOS 发布时间和内存容量。检测这些因素很复杂,也不实用,因为好几个发布版本都有 bug,不能在第一时间正确地进行服务器检测。因此,对于 macOS 10.6,无论主板支持情况如何,OpenCore 都会回退到 x86_64 架构,就像 macOS 10.7 那样。以下是 64 Mac 型号的兼容性介绍,对应于 macOS 10.6.8 10.7.5 EfiBoot 的实际行为:

  

Model

  

10.6 (minimal)



10.6 (client)



10.6 (server)



10.7 (any)


  

Macmini

  

4,x (Mid 2010)



5,x (Mid 2011)



4,x (Mid 2010)



3,x (Early 2009)


  

MacBook

  

Unsupported



Unsupported



Unsupported



5,x (2009/09)


  

MacBookAir

  

Unsupported



Unsupported



Unsupported



2,x (Late 2008)


  

MacBookPro

  

4,x (Early 2008)



8,x (Early 2011)



8,x (Early 2011)



3,x (Mid 2007)


  

iMac

  

8,x (Early 2008)



12,x (Mid 2011)



12,x (Mid 2011)



7,x (Mid 2007)


  

MacPro

  

3,x (Early 2008)



5,x (Mid 2010)



3,x (Early 2008)



3,x (Early 2008)


  

Xserve

  

2,x (Early 2008)



2,x (Early 2008)



2,x (Early 2008)



2,x (Early 2008)


注:不支持用热键 3+2 6+4 来选择偏好架构,这是因为这个热键是由 EfiBoot 处理的,很难正确地检测到。

03KernelCache

类型:string

描述:

如果可用,优先选择指定的内核缓存(Kernel Cache)类型(Auto, Cacheless, Mkext,Prelinked)。

macOS 的版本不同,支持的内核缓存变量也不同,其目的是提高启动性能。如果出于调试和稳定性的考虑,可利用这个设置防止使用较快的内核缓存变量。举个例子,如果指定 Mkext,那么会为 10.6 禁用 Prelinked10.7 则不受影响。

可用的内核缓存类型及其当前在 OpenCore 中的支持情况列表如下:

  

macOS

  

i386 NC



i386 MK



i386 PK



x86_64 NC



x86_64 MK



x86_64 PK



x86_64 KC


  

10.4

  

YES



YES (V1)



NO (V1)










  

10.5

  

YES



YES (V1)



NO (V1)










  

10.6

  

YES



YES (V2)



YES (V2)



YES



YES (V2)



YES (V2)




  

10.7

  

YES





YES (V3)



YES





YES (V3)




  

10.8-10.9

  







YES





YES (V3)




  

10.10-10.15

  











YES (V3)




  

11+

  











YES (V3)



YES


注:不支持第一个版本(V1)的 32 prelinkedkernel ,因为 Kext 符号表被工具破坏了,这些版本中 Auto 会阻止 prelinkedkernel 启动。同时,这也会使 keepsyms=1 在这些系统上不可用。


Rank: 5Rank: 5Rank: 5

UID
2215517
帖子
670
PB币
502
贡献
0
技术
33
活跃
1463
发表于 2021-7-16 21:48:02 IP属地未知 |显示全部楼层

五、Misc

本帖最后由 yanbingshuai 于 2021-7-18 12:57 编辑

五、Misc
本部分包含关于OpenCore 行为的其他配置,以及不能被分类到其它章节的配置条目的说明。
1.Boot

应用本章节 Boot 属性中的引导相关设置。

(01)ConsoleAttributes

类型:number

描述:

为控制台设置特定的属性。

(02)HibernateMode

类型:string

描述:

休眠检测模式。

(03)HideAuxiliary

类型:boolean

描述:

默认情况下,隐藏开机引导项菜单中的辅助条目。

(04)LauncherOption

类型:string

描述:

在固件偏好设置中注册启动器选项,以保证 bootloader 的持久与一致性。

(05)LauncherPath

类型:string

描述:

LauncherOption 的启动引导路径。

(06)PickerAttributes

类型:number

描述:

设置开机引导菜单的属性。

(07)PickerAudioAssist

类型:boolean

描述:

在开机引导菜单中启用 屏幕朗读。

(08)PickerMode

类型:string

描述:

选择启动管理器的界面。

(09)PickerVariant

类型:string

描述:

选择启动管理器所使用的图标集。

(10)PollAppleHotKeys

类型:boolean

描述:

在开机引导菜单中启用 Modifier Hotkey。

(11)ShowPicker

类型:boolean

描述:

是否显示开机引导菜单。

(12)TakeoffDelay

类型:number

描述:

在 处理引导项启动 和 处理 Action Hotkey 之前的延迟,以微秒为单位。

(13)Timeout

类型:number

描述:

开机引导菜单中,启动默认启动项之前超时时间(以秒为单位)。 使用 0 禁用倒计时。

2.BlessOverride

通过 Bless Model 添加自定义扫描路径。

3.Debug

应用本章节 Debug 属性中的调试相关设置。

(01)AppleDebug

类型:boolean

描述:

启用将 boot.efi 调试日志保存到 OpenCore 日志。

注:此项仅适用于 10.15.4 和更新版本。

(02)ApplePanic

类型:boolean

描述:

将 macOS Kernel Panic 保存到 OpenCore 根分区。

(03)DisableWatchDog

类型:boolean

描述:

某些固件启动操作系统的速度可能不够快(尤其是调试模式下),看门狗定时器会因此中止引导过程。此选项用来关闭看门狗定时器。

(04)DisplayDelay

类型:integer

描述:

屏幕上打印每行输出之间的延迟。

(05)DisplayLevel

类型:integer, 64 bit

描述:

与屏幕显示相关的 EDK II 调试级别的位掩码(总和)。

(06)SerialInit

类型:boolean

描述:

执行串行端口初始化。

(07)SysReport

类型:boolean

描述:

在 EFI 分区中保存系统报告。

注:基于安全的考虑,RELEASE 构建的 OpenCore 将不会内置这一功能。

(08)Target

类型:integer

描述:

启用日志记录目标的位掩码(总和)。默认所有日志的输出都是隐藏的,所以当需要调试时,有必要设置这个选项。

4.Entries

在开机引导菜单中添加引导项。

应填入 plist dict 类型的值来描述相应的加载条目。

(01)Arguments

类型:string

描述:

对该引导条目使用的引导参数。

(02)Auxiliary

类型:boolean

描述:

当 HideAuxiliary 被启用时,这一值为 true 的引导条目将不会显示在开机引导菜单中。

(03)Comment

类型:string

描述:

注释

(04)Enabled

类型:boolean

描述:

除非设置为 true,否则该引导条目不会显示在开机引导菜单中。

(05)Name

类型:string

描述:

引导条目在开机引导菜单中显示的名字。

(06)Path

类型:string

描述:

引导入口。

(07)RealPath

类型:boolean

描述:

启动时将完整的路径传递给工具。

(08)TextMode

类型:boolean

描述:

以文本模式而非图形模式运行条目。

5.Security

应用本章节 Security 属性中的安全相关设置。

1. AllowNvramReset

类型:boolean

描述:

启用这一选项后将允许使用 CMD+OPT+P+R 快捷键重置 NVRAM,同时 NVRAM Reset 条目也会出现在开机引导菜单中。

2. AllowSetDefault

类型:boolean

描述:

允许使用 CTRL+Enter 和 CTRL+[数字] 设置默认启动项。

3. ApECID

类型:integer, 64 bit

描述:

Apple Enclave 标识符。

将此值设置为任何非零的 64 位整数,将允许使用个性化的 Apple 安全启动标识符。

4. AuthRestart

类型:boolean

描述:

启用与 VirtualSMC 兼容的 authenticated restart。

authenticated restart 可以在重启 FileVault2 分区时不用再次输入密码。

5. BlacklistAppleUpdate

类型:boolean

描述:

忽略某些用于更新 Apple 外设固件的启动项(如 MultiUpdater.efi)。

6. DmgLoading

类型:string

描述:

定义用于 macOS Recovery 的磁盘映像(Disk Image, DMG)加载策略。

7. EnablePassword

类型:boolean

描述:

为敏感操作启用密码保护。

注:此功能尚在开发阶段,不推荐日常使用。

8. ExposeSensitiveData

类型:integer

描述:

用于向操作系统暴露敏感数据的位掩码(总和)。

9. HaltLevel

类型:integer, 64 bit

描述:

EDK II 调试级别的位掩码(总和),使 CPU 在获得 HaltLevel 消息后中止(停止执行)。可能的值与 DisplayLevel 值相匹配。

10. PasswordHash

类型:data 64 bytes

描述:

密码使用的哈希值(Hash)。

11. PasswordSalt

类型:data

描述:

密码使用的盐值(Salt)。

12. Vault

类型:string

描述:

启用 OpenCore 的 Vault 机制。

13. ScanPolicy

类型:integer, 32 bit

描述:

定义操作系统检测策略。

14. SecureBootModel

类型:string

描述:

Apple 安全启动的机型。

6.Tools

将工具条目添加到开机引导菜单。

Rank: 5Rank: 5Rank: 5

UID
2215517
帖子
670
PB币
502
贡献
0
技术
33
活跃
1463
发表于 2021-7-16 21:48:25 IP属地未知 |显示全部楼层

六、NVRAM

本帖最后由 yanbingshuai 于 2021-7-18 15:42 编辑

设置易失性 UEFI 变量(通常被称作 NVRAM 变量),数据类型为 plist dict。使用 man nvram 获取详细信息。macOS 广泛使用 NVRAM 变量使 操作系统、BootLoader、固件 之间互通,因此需要提供多个 NVRAM 变量才能正常运行 macOS。

1. Add

从一组 GUID 映射(plist dict)中读取格式为 plist metadata 的变量映射,并将其添加到 NVRAM 中。GUID 必须以 Canonical String 格式提供,大写或小写均可




2. Delete

从一组 GUID 映射(plist dict)读取一组包含 plist string 的数组(plist array),这些将会被从 NVRAM 变量中被删除。

3. LegacyEnable

类型:boolean

描述:

允许从 ESP 分区的根目录中的 nvram.plist 文件读取 NVRAM 变量。


4. LegacyOverwrite

类型:boolean

描述:

允许用 nvram.plist 文件中的变量覆盖现有 NVRAM 中的变量。

5. LegacySchema

允许从 GUID 映射(plist dict)中选择 NVRAM 变量设置到一个变量名称数组(plist array),格式为 plist string。

6. WriteFlash

类型:boolean

描述:

允许将所有添加的变量写入闪存。

csr-active-config

系统完整性保护的位掩码(32-bit),声明于 XNU 源码 csr.h。

prev-lang:kbd

定义默认键盘布局的 ASCII 字符串。格式为 lang-COUNTRY:keyboard,例如 ru-RU:252 代表俄语和 ABC 键盘。也接受简短形式:ru:252 或 ru:0(美国键盘,兼容 10.9)。

UIScale

定义 boot.efi 用户界面缩放比例的一字节数据。普通屏幕应为 01,HiDPI 屏幕应为 02。

DefaultBackgroundColor

定义 boot.efi 用户界面背景色的四字节 BGRA 数据。标准色包括 BF BF BF 00(浅灰)和 00 00 00 00(西拉黑)。其他颜色可根据用户喜好设置。

boot-args内核参数,用于将配置传递给 Apple 内核和驱动程序。很多参数可以通过在内核或驱动程序代码中寻找 PE_parse_boot_argn 函数找到。

run-efi-updater覆盖 macOS 中对 EFI 固件更新(MultiUpdater、ThorUtil)等的支持。将此值设置为 No 或其他可以转换为布尔类型的值将能够禁用 10.10 起的 macOS 固件更新。

Rank: 5Rank: 5Rank: 5

UID
2215517
帖子
670
PB币
502
贡献
0
技术
33
活跃
1463
发表于 2021-7-16 21:48:42 IP属地未知 |显示全部楼层
本帖最后由 z_yj 于 2021-7-18 19:56 编辑

七、PlatformIndo

机型信息由手动生成或填充的字段组成,以便与 macOS 服务兼容。


1. Automatic

类型:boolean

描述:

基于 Generic 属性而不是 DataHub、NVRAM 和 SMBIOS 属性生成机型信息。


2. CustomMemory

类型:boolean

描述:

使用在 Memory 部分所填写的自定义内存配置。该选项将完全取代 SMBIOS 中任何现有的内存配置,只有当 UpdateSMBIOS 设置为 true 时才生效。


3. Generic



1. AdviseFeatures

类型:Boolean

描述:


2. MaxBIOSVersion

类型:boolean

描述:

BIOSVersion 设置为 9999.999.999.999.999,建议使用 Automatic 选项的旧款 Mac 这样设置, 在运行非官方支持的macOS 版本时可避免 BIOS 升级。


3. MLB

类型:string

描述:

序列号


4.ProcessorType

类型:integer

描述:

处理器主要类型和次次类型组合。

自动生成值试图为当前安装的CPU提供最准确的值。


5. ROM

类型:data

描述:

主网络适配器MAC地址或更换值。出现在较新的Mac(至少2013年+)上,以避免访问特殊内存区域,特别是在boot.efi中。


6. SpoofVendor

类型:boolean

描述:

SMBIOS 中的 Vendor 字段设置为 Acidanthera。

由于在 SystemManufacturer 中阐述的原因,在 SMBIOS 的 Vendor 字段中使用 Apple 是危险的。但是,某些固件可能无法提供有效值,可能会导致某些软件的破坏。


7. SystemMemoryStatus

类型:string

描述:

用来表示内存是否可以更换和升级,此值也控制着「关于本机」中「内存」选项卡的可见性。


8. SystemProductName

类型:string

描述:

选择偏好的Mac 机型来把设备标记为系统支持的机型。在任何配置中都应指定该值,以便之后自动生成 SMBIOS 表的相关值和相关配置参数。


9. SystemSerialNumber

类型:string

描述:

按照格式定义的产品序列号。已知的序列号的格式在 macserial 中可以找到。


10. SystemUUID

类型:string,GUID

描述:

UUID被设计为在时间和空间上都是唯一的标识符,其生成是随机与去中心化的。


3. UpdateDataHub

类型:boolean

描述:

更新Data Hub 字段。根据 Automatic 的值,这些字段会从 Generic 或 DataHub 中读取。


4. UpdateNVRAM

类型:boolean

描述:

是否更新NVRAM 中关于机型信息的相关字段。

根据 Automatic 的值,这些字段会从 Generic 或 PlatformNVRAM 中读取。所有其他字段都将在 NVRAM 部分中指定。

如果将此值设置为 false,则可以使用 nvram 部分更新上述变量;反之若将此值设置为 true,而同时 nvram 部分存在任何字段,会产生未定义行为。


5. UpdateSMBIOS

类型:boolean

描述:

更新SMBIOS 字段。根据 Automatic 的值,这些字段会从 Generic 或 SMBIOS 中读取。


6. UpdateSMBIOSMode

类型:string

描述:

更新SMBIOS 字段的方式有:

TryOverwrite — 如果新的数据大小 小于等于 按页对齐的原始数据,且对解锁 legacy region 没有影响,则选择 Overwrite 方式;否则选择 Create 方式。在某些硬件上可能会有问题。

Create — 在 AllocateMaxAddress 将表替换为新分配的EfiReservedMemoryType,没有回退机制。

Overwrite — 如果数据大小合适则覆盖现有的 gEfiSmbiosTableGuid 和gEfiSmbiosTable3Guid,否则将以不明状态中止。

Custom — 把第一个 SMBIOS 表(gEfiSmbios(3)TableGuid)写入 gOcCustomSmbios(3)TableGuid,以此来解决固件在ExitBootServices 覆盖 SMBIOS 内容的问题;否则等同于 Create。需要 AppleSmbios.kext 和AppleACPIPlatform.kext 打补丁来读取另一个GUID: "EB9D2D31" - "EB9D2D35" (inASCII), 这一步由 CustomSMBIOSGuid Quirk 自动完成。

注: 使用 Custom 有一个副作用(译者注:我怎么感觉是好事)使得 SMBIOS 设置只对macOS 生效,避免了与现有的 Windows 激活和依赖机型的OEM 设置的相关问题。不过,苹果在 Windows 下的特定工具(译者注:如BootCamp for Windows)可能会受到影响。


7. UseRawUuidEncoding

类型:boolean

描述:

SMBIOS 的 UUID 使用原始编码。



Rank: 5Rank: 5Rank: 5

UID
2215517
帖子
670
PB币
502
贡献
0
技术
33
活跃
1463
发表于 2021-7-16 21:49:04 IP属地未知 |显示全部楼层
本帖最后由 z_yj 于 2021-7-18 20:02 编辑



八、UEFL

UEFI(统一可扩展固件接口)是一种规范,用于定义操作系统和平台固件之间的软件接口。本部分允许加载其他 UEFI 模块 和/或 对板载固件进行调整。要检查固件内容,应用修改并执行升级,可以使用 UEFITool 和其他实用程序。


1. APFS

APFS分区驱动


1. EnableJumpstart

类型:boolean

描述:

从一个APFS 容器中加载 APFS 驱动。


2. GlobalConnect

类型:boolean

描述:

APFS 加载期间执行完整的设备连接。


3. HideVerbose

类型:boolean

描述:

是否隐藏APFS 驱动的 verbose 信息。


4. JumpstartHotPlug

类型:boolean

描述:

允许从进入OpenCore 引导菜单后插入的可移除硬盘上的 APFS 容器中加载APFS 驱动。

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


5. MinDate

类型:integer

描述:

允许加载的最老APFS 驱动的发布日期。


6. MinVersion

类型:integer

描述:

允许加载的最老APFS 驱动的版本号。


2. Audio

配置音频后端支持


1. AudioCodec

类型:integer

描述:

特定音频控制器上的编解码器地址,用于音频支持。


2. AudioDevice

类型:string

描述:

特定音频控制器的设备路径,用于音频支持。


3. AudioOut

类型:integer

描述:

特定编解码器的输出端口的索引,从 0 开始。


4. AudioSupport

类型:boolean

描述:

通过连接到固件音频驱动程序以激活音频支持。


5. MinimumVolume

类型:integer

描述:

听到的最小音量水平,从 0 到 100。


6. PlayChime

类型:string

描述:

开机时播放Mac 特有的风铃的声音。


7.ResetTrafficClass

类型:Boolean

描述:

HDA流量类选择寄存器设置为TC0

注:此选项独立于AudioSupport。如果使用AppleALC,最好改用AppleALC alctsel属性。


8. SetupDelay

类型:integer

描述:

音频编解码器重新配置的延迟,单位为微秒。


9. VolumeAmplifier

类型:integer

描述:

系统音量到原始音量的线性换算的乘法系数,从 0 到 1000。


4. ConnectDrivers

类型:boolean

描述:

驱动程序加载后执行 UEFI 控制器连接操作。

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

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


5. Drivers

OC/Drivers 目录下加载选择的驱动。


6. Input

为输入(键盘和鼠标)而设计的个性化设置。


1. KeyFiltering

类型:boolean

描述:

启用键盘输入的合理性检查。


2. KeyForgetThreshold

类型:integer

描述:

两次按键之间的间隔时间,单位为毫秒。


3. KeySupport

类型:boolean

描述:

启用这一选项后将会开启内置键盘支持。


4. KeySupportMode

类型:string

描述:

将内部键盘的输入转换设置为 AppleKeyMapAggregator 协议模式。


5. KeySwap

类型:boolean

描述:

启用后将交换 Command 和 Option。


6. PointerSupport

类型:boolean

描述:

启用后将试图修复 UEFI 选择器协议。


7. PointerSupportMode

类型:string

描述:

设置用于内部指针驱动程序的 OEM 协议。


8. TimerResolution

类型:integer

描述:

固件始终刷新的频率(单位 100 纳秒)


6. Output

应用为输出(文本和图形)而设计的个性化设置。


1. ClearScreenOnModeSwitch

类型:string

描述:

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

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


2. ConsoleMode

类型:string

描述:

按照 WxH(例如 80x24)格式的字符串所指定的方式设置控制台的输出模式。

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


3. DirectGopRendering

类型:boolean

描述:

为控制台使用内置的图形输出协议渲染器。

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


4. ForceResolution

类型:boolean

描述:当默认情况下无法获得所需分辨率时,强制设置 Resolution 中所填写的分辨率,多用于老的 Intel GMA 和第一代 IntelHD Graphics (Ironlake/Arrandale)。将 Resolution 设置为 Max 时,将尝试从所连接的显示器的 EDID中提取最大的可用分辨率。

注:该选项依赖 OC_FORCE_RESOLUTION_PROTOCOL 协议。目前只有 OpenDuetPkg 支持该协议,而 OpenDuetPkg 的实现目前仅支持Intel iGPU。


5.GopPassThrough

类型:string

描述:

UGA协议实例之上提供GOP协议实例。

此选项通过基于UGA的代理为不实现协议的固件提供GOP协议。


6. IgnoreTextInGraphics

类型:boolean

描述:

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

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


7. ProvideConsoleGop

类型:boolean

描述:

确保控制台句柄上有 GOP (Graphics Output Protocol)。

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

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


8. ReconnectOnResChange

类型:boolean

描述:

改变屏幕分辨率后重新连接控制台控制器。


9. ReplaceTabWithSpace

类型:boolean

描述:有些固件不会打印 tab 符号,甚至不打印 tab 后面的所有内容,导致很难或根本无法用 UEFI Shell 内置的文本编辑器来编辑属性列表和其他文档。这个选项会使控制台输出空格来替代tab。


10. Resolution

类型:string

描述:设置控制台的屏幕分辨率。


11. SanitiseClearScreen

类型:boolean

描述:

有些固件在使用较大的显示器(如 2K 或 4K)时,清除屏幕内容会导致屏幕分辨率重置为 failsafe 值(如 1024x768)。这个选项为这种情况提供了一个变通方法。

12.TextRenderer

类型:string

描述:

为通过标准控制台输出的文本选择渲染器。


13. UgaPassThrough

类型:boolean

描述:

GOP 协议的顶部提供 UGA 协议实例。


7. ProtocolOverrides

强制执行选协议的内置版本。


1. AppleAudio

类型:boolean

描述:

重新安装内置版本的 Apple 音频协议。


2. AppleBootPolicy

类型:boolean

描述:

重新安装内置的Apple Boot Policy 协议,可用于确保 VM 或旧版Mac 设备上的 APFS 兼容性。


3. AppleDebugLog

类型:boolean

描述:

重新安装内置的Apple 调试日志输出协议。


4. AppleEvent

类型:boolean

描述:

重新安装内置的Apple Event 协议,可以确保在 VM 或旧版 Mac设备上的 FileVault 2 兼容性。


5. AppleFramebufferInfo

类型:boolean

描述:

重新安装内置的Apple Framebuffer Info 协议。这样可以覆盖虚拟机或者旧款 Mac 上的缓冲帧信息,从而提高与旧版 EfiBoot(如 macOS 10.4 中的 EfiBoot)的兼容性。


6. AppleImageConversion

描述:

重新安装内置的Apple Image Conservation 协议。


7. AppleImg4Verification

类型:boolean

描述:

重新安装内置的Apple IMG4 验证协议。该协议用于验证 Apple 安全启动所使用的 im4m 清单文件。


8. AppleKeyMap

类型:boolean

描述:

重新安装内置的Apple Key Map 协议。


9. AppleRtcRam

类型:boolean

描述:

重新安装内置的Apple RTC RAM 协议。


10. AppleSecureBoot

类型:boolean

描述:

重新安装内置的Apple 安全启动协议。


11. AppleSmcIo

类型:boolean

描述:

重新安装内置的SMC I/O 协议。


12. AppleUserInterfaceTheme

类型:boolean

描述:

重新安装内置的Apple User Interface Theme 协议。


13. DataHub

类型:boolean

描述:

重新安装具有内置版本的 Data Hub 协议。如果已经安装了协议,这将删除所有先前的属性。


14. DeviceProperties

类型:boolean

描述:

重新安装内置版本的 Device Property 协议。 如果已经安装,它将删除所有以前的属性。这一选项可用于确保在VM 或旧版 Mac 设备上的兼容性。


15. FirmwareVolume

类型:boolean

描述:

强制包装固件卷协议或安装新版本以支持 FileVault 2 的自定义光标图像。建议启用这一选项以确保FileVault 2 在除 VM 和传统 Mac 设备之外的兼容性。


16. HashServices

类型:boolean

描述:

强制重新安装内置版本的 Hash Services 协议。为了在 SHA-1 哈希协议不完整的固件上确保FileVault 2 的兼容性,这一 Quirk 应设置为 true。


17. OSInfo

类型:boolean

描述:

强制使用内置版本重新安装 OS Info 协议。该协议通常用于通过固件或其他应用程序从 macOS 引导加载程序接收通知。


18. UnicodeCollation

类型:boolean

描述:

强制重新安装内置版本的 Unicode Collation 服务。建议启用这一选项以确保 UEFI Shell 的兼容性。一些较旧的固件破坏了 Unicode 排序规则,启用后可以修复这些系统上UEFI Shell 的兼容性 (通常为用于IvyBridge 或更旧的设备)


8. Quirks

应用个性化的固件 Quirks。


1.ActivateHpetSupport

类型:boolean

描述:

激活HPET支持。


2. DisableSecurityPolicy

类型:boolean

描述:禁用平台安全策略。


3.EnableVectorAcceleration

类型:Boolean

描述:

启用SHA-512和SHA-384散列算法的AVX矢量加速度。


4. ExitBootServicesDelay

类型:integer

描述:

EXIT_BOOT_SERVICES 事件后添加延迟,单位为毫秒。


5.ForgeUefiSupport

类型:Boolean

描述:

EFI1.x固件实施部分UEFI 2.x支持。


6. IgnoreInvalidFlexRatio

类型:boolean

描述:某些固件,即 APTIO IV,可能在 MSR_FLEX_RATIO (0x194)MSR 寄存器中含有无效值。这些值可能会导致 macOS 在Intel 平台上启动失败。


7. ReleaseUsbOwnership

类型:boolean

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


8. ReloadOptionRoms

类型:Boolean

描述:

查询PCI设备,并重新加载其Option ROM(如果有)。


9. RequestBootVarRouting

类型:boolean

描述:请求将所有带有 Boot 前缀的变量从 EFI_GLOBAL_VARIABLE_GUID 重定向到 OC_VENDOR_VARIABLE_GUID。


10. TscSyncTimeout

类型:integer

描述:

尝试用指定的Timeout 执行 TSC 同步。


11. UnblockFsConnect

类型:boolean

描述:

某些固件通过「按驱动程序」模式下来阻止引导项加载,导致文件系统协议无法安装。

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


9. ReservedMemory

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


1. Address

类型:integer

描述:

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


2. Comment

类型:string

描述:

注释


3. Size

类型:integer

描述:

保留的内存区域的大小,必须按页对齐(4KB)。


4. Type

类型:string

描述:

内存区域类型,


5. Enabled

类型:boolean

描述:

除非设置为 true,否则该区域不会被保留。

Rank: 5Rank: 5Rank: 5

UID
2215517
帖子
670
PB币
502
贡献
0
技术
33
活跃
1463
发表于 2021-7-16 21:49:20 IP属地未知 |显示全部楼层
9楼备用

Rank: 5Rank: 5Rank: 5

UID
2215517
帖子
670
PB币
502
贡献
0
技术
33
活跃
1463
发表于 2021-7-16 21:49:40 IP属地未知 |显示全部楼层
10楼备用

Rank: 5Rank: 5Rank: 5

UID
2215517
帖子
670
PB币
502
贡献
0
技术
33
活跃
1463
发表于 2021-7-16 21:50:05 IP属地未知 |显示全部楼层
11楼备用

Rank: 5Rank: 5Rank: 5

UID
2215517
帖子
670
PB币
502
贡献
0
技术
33
活跃
1463
发表于 2021-7-16 21:50:23 IP属地未知 |显示全部楼层
12楼备用

Rank: 5Rank: 5Rank: 5

UID
2215517
帖子
670
PB币
502
贡献
0
技术
33
活跃
1463
发表于 2021-7-16 21:50:40 IP属地未知 |显示全部楼层
13楼备用

Rank: 5Rank: 5Rank: 5

UID
2215517
帖子
670
PB币
502
贡献
0
技术
33
活跃
1463
发表于 2021-7-16 21:51:00 IP属地未知 |显示全部楼层
14楼备用

Rank: 5Rank: 5Rank: 5

UID
2215517
帖子
670
PB币
502
贡献
0
技术
33
活跃
1463
发表于 2021-7-16 21:51:30 IP属地未知 |显示全部楼层
15楼备用

Rank: 9

UID
750326
帖子
4546
PB币
3284
贡献
0
技术
102
活跃
2903
发表于 2021-7-17 19:33:08 IP属地未知 来自手机 |显示全部楼层
我来占楼

Rank: 7Rank: 7Rank: 7

UID
4865885
帖子
1040
PB币
458
贡献
0
技术
1
活跃
1482
发表于 2021-7-17 23:41:45 IP属地山东 来自手机 |显示全部楼层
我也来占楼

Rank: 5Rank: 5Rank: 5

UID
2500033
帖子
1113
PB币
3589
贡献
0
技术
0
活跃
1413
发表于 2021-7-17 23:49:59 IP属地山东 |显示全部楼层
谢谢分享 支持

Rank: 7Rank: 7Rank: 7

UID
624477
帖子
1564
PB币
2102
贡献
0
技术
0
活跃
1387
发表于 2021-7-18 02:01:38 IP属地广东 |显示全部楼层
谢谢分享 收藏备用了
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛