1介绍
本文档提供关于 OpenCore 用户配置文件格式的信息,用于设置 macOS 操作系统的正确功能。
1.1已知缺陷
有关 OpenCore 问题,请参考 Acidanthera
bug 跟踪器。目前该文件有以下条目未完成:•并非所有 NVRAM 变量都被正确描述(例如 boot-args)。
2通用术语
•plist – ASCII 属性列表格式的子集,用 XML 编写,也称为 XML
plist 格式版本 1。统一类型标识符(UTI): com.apple.property-list。plist 由 plist 对象组成,它们是
组合成一个层次结构。由于 plist 格式定义不明确,所有的定义都是这样
只有在 plist 通过运行 plutil -lint 被认为是有效的之后,才可以应用文档。外部引用:
https://www.apple.com/DTDs/PropertyList-1.0.dtd plutil。
•plist 类型 - plist 集合 (plist 数组,plist 字典,plist 键) 和基本类型(plist 字符串,plist 数据,plist 日期,plist 布尔值,plist 整数,plist 实数)。
•plist 对象 - plist 类型的明确实现,可以解释为值。
•plist array—类数组集合,符合数组。由零个或多个 plist 对象组成。
类映射 (关联数组) 集合,符合 dict,由 0 个或多个 plist 键组成。
•plist key - 包含一个名为 plist
key 的 plist 对象,与 key 一致。由
可打印的 7 位 ASCII 字符。
•plist 字符串 - 可打印的 7 位 ASCII 字符串,符合字符串。•plist
data – base64 编码的 blob,符合数据。
•plist date – ISO-8601 date,符合日期,不支持。
•plist boolean - 逻辑状态对象,无论是真 (1) 或假(0),符合真和假。
•plist 整数——可能以 10 为底的带符号整数,符合整数。适用于 2 的补码表示中的 64 位无符号整数,除非在特定的 plist 对象描述中显式地提到较小的有符号或无符号整数类型。
•plist 实数 - 浮点数,符合实数,不支持。
•plist 元数据——通过实现将值转换为数据。允许通过 plist 字符串, 在这种情况下, 结果是由一个以 null 结尾的字节序列(即 C 字符串),plist 整数, 在这种情况下, 结果是由 32 位小端字节字节序列在二进制补码表示,plist 布尔, 在这种情况下, 价值是一个字节:01 真 00 为假,plist 数据本身。所有其他的
类型或较大的整数调用未定义的行为。
3概述
3.1配置项
•OC 配置 - OpenCore 配置文件的 plist 格式命名为 config.plist。它必须提供可扩展的方式来配置 OpenCore,并被构造成位于根 plist 字典中的多个命名部分。这些部分允许具有 plist 数组或 plist 字典类型
在本文档的相应部分中进行了描述。
•有效密钥 - 本文档或其未来修订中描述的 OC 配置的 plist 密钥对象。除了显式描述的有效键之外,以 #符号开头的键 (例如#Hello) 也被认为是有效键,并表现为注释,有效地丢弃了它们的值,这仍然是有效 plist 对象所必需的。所有其他 plist 键都是无效的,它们的存在会导致未定义的行为。
•有效值——本文描述的 OC 配置的有效 plist 对象,与所有附加值匹配
特定 plist 对象描述中的需求(如果有的话)。
•无效值——本文档中描述的 OC 配置的有效 plist 对象属于其他 plist 类型,不符合特定 plist 对象描述中发现的附加要求 (如值范围),或在相应集合中缺失。无效值以一种未确定的方式(即,在重新引导时,值可能不相同) 读取该 plist 对象的任何可能值时,带有或不带有错误消息。当读取无效值等同于读取某些定义的有效值时,应用
与主机系统不兼容的值可能导致未定义的行为。
•可选值——本文档中描述的 OC 配置的有效值,在 OC 配置中不存在时,以特定 plist 对象描述中提供的特定定义方式读取(而不是无效值)。所有
其他无效值的情况仍然适用。除非显式地标记为可选值,否则任何其他值都是
如果缺少,则读取为无效值。
•致命行为——导致引导终止的行为。实现必须停止启动进程
直到下一个主机系统引导。执行冷重启或显示任何警告消息是允许的,但不是必需的。
•未定义行为——本文件未规定的行为。实现允许使用任何
措施包括但不限于致命行为,假设任何状态或值,或忽略,除非这些措施对系统安全产生负面影响。
3.2配置处理
如果找到 OC 配置,则保证它至少被处理一次。取决于 OpenCore 的引导
机制多个 OC 配置文件可能导致读取其中任何一个配置文件。磁盘上可能没有 OC 配置,在这种情况下,所有读取的值都遵循无效值和可选值的规则。
OC 配置有大小、嵌套和键数量限制。OC 配置大小不超过 16 mb。OC 配置不超过 8 个嵌套级别。OC 配置在每个 plist 对象中最多有 16384 个 XML 节点(即一个 plist 字典项被算作一对节点)。
读取格式错误的 OC 配置文件将导致未定义的行为。畸形 OC 配置的例子至少涵盖以下情况:
•文件不符合 plist
DTD
•在此文档中发现不支持或不符合 plist 对象的文件•违反大小、嵌套和键数量限制的文件
这是建议,但不需要中止加载畸形的 OC 配置,并继续作为没有 OC 配置
礼物。对于正向兼容性,建议但不要求实现警告使用
无效的值。解释无效值的建议实践应符合以下约定
适用:
类型值
plist 数据空数据(<data></data>)
类型值
plist 整数 0
(<integer>0</integer>)
plist
tristate False (< False />)
3.3配置结构
OC 配置被分成以下几个部分,这些部分在本文档的各个部分中进行了描述。默认情况下它
尝试不启用任何内容,并可选地为 plist dict 条目提供带 enable 属性的终止开关。在
一般情况下,配置是按照特定的方式编写的,用于将类似的操作分组到子节中:•Add 提供了对数据添加的支持。
•Block 支持数据删除或忽略。•Patch 支持数据修改。
•Quirks 支持特定的黑客攻击。
根配置条目包括以下内容:•ACPI
•DeviceProperties•Kernel
•杂项•NVRAM
•PlatformInfo•UEFI
注意 : 目前大多数属性都试图定义值,即使出于安全原因没有在配置中指定值。不应该依赖于此行为,并且必须在配置中正确指定所有字段。
3.4的目录结构
当使用目录引导时,使用的目录结构应遵循目录结构图上的描述。
可用条目包括:•BOOTx64.efi
初始启动程序,加载 OpenCore。efi,除非它已经作为驱动程序启动。•ACPI
用于存储 ACPI 节的补充 ACPI 信息的目录。•驱动程序
用于存储 UEFI 节的补充 UEFI 驱动程序的目录。•Kexts
用于存储内核节的补充内核信息的目录。•OpenCore.efi
主启动程序负责操作系统加载。•vault.plist
所有可能由 OC 配置加载的文件的散列。•config.plist
OC 配置。•vault.sig
vault.plist 签名。

3.5的贡献
OpenCore 可以编译为一个普通的 EDK
II 包与 UDK
2018。
唯一官方支持的工具链是 XCODE5。其他工具链也可以工作,但它们既不受支持,也不受支持
推荐。欢迎提供干净的补丁。请遵循 EDK
II C 代码风格。所需的外部包依赖项包括 EfiPkg、MacInfoPkg 和 OcSupportPkg。
要使用 XCODE5 编译,除了 Xcode 之外,还应该安装 NASM 和 MTOC。示例命令序列可能如下所示:
git克隆https://github.com/tianocore/edk2
-b UDK2018 UDK cd UDK
git克隆https://github.com/acidanthera/EfiPkg
git克隆https://github.com/acidanthera/MacInfoPkg
git克隆 https://github.com/acidanthera/OcSupportPkg
git 克隆 https://github.com/acidanthera/OpenCorePkg 源代码edksetup.sh
让– c BaseTools
构建 – X64 -b 发行版-t XCODE5 -p
OpenCorePkg/OpenCorePkg.dsc
清单 1: 编译命令
NOOPT 或 DEBUG 构建模式 (而不是 RELEASE) 可以生成更多的调试输出。使用 NOOPT 源代码级别
还可以使用 GDB 或 IDA Pro 进行调试。对于 GDB,检查 OcSupport 调试页面。对于 IDA
Pro,您将需要 IDA
Pro 7.3 或更新版本。
对于 IDE 的使用,Xcode 项目可以在存储库的根目录中找到。另一种方法可能是崇高的文本
与 EasyClangComplete 插件。添加与 UDK 根目录内容类似的.clang_complete 文件:
我 /
UefiPackages / MdePkg
我 /
UefiPackages / MdePkg / 包括
我 /
UefiPackages MdePkg / Include / X64 – i / UefiPackages / EfiPkg
我 /
UefiPackages / EfiPkg / 包括
我 /
UefiPackages EfiPkg / Include / X64 - 我 / UefiPackages / AptioFixPkg
/ 包括
我 /
UefiPackages / AppleSupportPkg / 包括我 / UefiPackages / OpenCorePkg
/ 包括
我 /
UefiPackages / OcSupportPkg / 包括
我 /
UefiPackages / IntelFrameworkPkg / 包括我 / UefiPackages / MacInfoPkg / 包括
-IInclude 透露
/ UefiPackages MdePkg / Include / Uefi.h
-fshort-wchar- wall
-Wextra
-Wno-unused-parameter -Wno-missing-braces
-Wno-missing-field-initializers
-Wno-tautological-compare
-Wno-sign-compare -Wno-varargs
-Wno-unused-const-variable
清单 2:ECC 配置
警告: 工具开发人员正在修改配置。
对于 opencore-version NVRAM 变量 ( 请参阅下面的 Debug
Properties 部分),如果列出的版本不受支持或预发布,则警告用户。OpenCore 配置可能会在不同版本之间发生变化,工具应确保其严格遵循本文档。
4
ACPI4.1 介绍
高级配置和电源接口 (Advanced Configuration and
Power Interface) 是一种用于发现和配置计算机硬件的开放标准。
4.2特性
1. 添加类型:plist 数组
默认值 : 空
说明: 从 OC/ACPI/Custom 目录加载选定的表。用于填充 plist
dict 值,描述每个块条目。
类型 :plist 数组
默认值 : 空
说明 : 从ACPI堆栈中删除选定的表。
用于填充 plist
dict 值,描述每个块条目。参见下面的块属性部分。3. 补丁
类型 :plist 数组
默认值 : 空
描述 : 在添加或删除表之前,在 ACPI 表中执行二进制补丁。
用于填充描述每个补丁条目的 plist 字典值。参见补丁属性部分在下面。4.
类型 :plist dict 类型
描述 : 应用在下面的 quirks 属性部分中描述的单个 ACPI 特性。
4.3添加属性
1.
评论
类型:plist 字符串默认值: 空字符串
描述 : 用于为条目提供人类可读引用的任意 ASCII 字符串。
2.
类型 :plist 布尔值默认值:false
描述: 除非设置为 true,否则不会添加这个 ACPI 表。3.
类型 :plist 字符串
默认值 : 空字符串
描述 : 文件路径被加载为 ACPI 表。示例值包括DSDT。
ACPI 表加载顺序遵循数组中的项顺序。所有 ACPI 表都从 OC/ACPI/Custom 目录加载。
注意 : 除了具有 DSDT 表标识符的表 ( 通过解析数据而不是通过文件名确定 ) 外,所有表都插入new
将表放入 ACPI 堆栈中。与其他方法不同,DSDT 执行 DSDT 表的替换。4.4 块属性
1.
类型 :plist 布尔值默认值:false
描述 : 如果设置为 true,将删除所有匹配条件的ACPI 表。否则只有第一匹配表。2.评论
类型:plist 字符串默认值: 空字符串
描述 : 用于为条目提供人类可读引用的任意 ASCII 字符串。
3. 启用
类型 :plist 布尔值默认值:false
描述: 除非设置为 true,否则不会删除这个 ACPI 表。4.
类型 :plist 数据,8字节默认值 : 全部为零
说明 : 匹配表 OEM ID 为等于这个值,除非所有为零。5.
类型:plist 整数默认值:0 描述: 将表大小匹配为等于这个值,除非为 0。6.
类型 :plist 数据,4字节默认值 : 全部为零
说明 : 匹配表签名,使其等于该值,除非全部为零。
4.5补丁属性1.
类型:plist 字符串默认值: 空字符串
描述 : 用于为条目提供人类可读引用的任意 ASCII 字符串。
2.数类型:plist 整数默认值:0
描述 : 应用补丁的次数。
类型 :plist 布尔值默认值 :false 说明: 这个 ACPI 补丁不会使用,除非设置为真。4.
类型 :plist 数据
默认值 : 空数据 说明: 数据查找。必须等于更换尺寸。
类型 :plist 整数默认值:0
描述 : 要搜索的最大字节数。
6.
类型:plist 数据默认值: 空数据
说明 : 查找比较过程中使用的数据位掩码。
7.
类型 :plist 数据,8字节默认值 : 全部为零说明 : 匹配表 OEM
ID 为等于这个值,除非所有为零。
类型:plist 数据默认值: 空数据
描述 : 替换一个或多个字节的数据。
类型 :plist 数据默认值 : 空数据
说明 : 数据位掩码在替换过程中使用。
非零位。可以设置为要忽略的空数据。否则必须等于替换大小。
类型 :plist 整数默认值:0
描述 : 在执行替换之前,要跳过已找到的事件的数量。
类型 :plist 整数默认值 :0 描述 : 将表大小匹配为等于这个值,除非为0。12. TableSignature
类型:
textttplist数据,4字节默认值 : 全部为零说明 : 匹配表签名,使其等于该值,除非全部为零。
•避免使用 ACPI 补丁重命名设备。这可能会导致不相关设备的重命名失败或执行不当
(例如 EC 和EC0)是不必要的,甚至无法在选择的表中重命名设备。
•除非绝对必要,否则避免修补 _OSI 以支持更高级别的功能集。
•尽可能避免不必要的更改,比如重命名_PWR 或_DSM。在一些情况下,补丁实际上是有意义的,包括:
•刷新 HPET(或其他设备)方法头,以避免_OSI 对遗留硬件的兼容性检查。
if
((OSFL () == 0)) {if (HPTE)…返回 (零) 内容可能总是被迫返回 0xF,用 A4 0A 0F A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3
A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3
A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3 A3
•要在 SSDT 中提供自定义方法实现,例如,报告膝上型电脑上的功能按键,可以使用 XQ11 补丁_Q11 替换原来的方法,使用一个虚拟名称。
h 源文件可以帮助理解 ACPI 操作码。4.6 怪癖属性
1.
类型:plist 布尔默认值: 假
说明 : 在FADT表中提供重置寄存器和标志,以便在遗留硬件上启用重启和关机。
2.
类型 :plist 布尔值默认值 :false 说明: 在启动 Windows 操作系统时禁用所有 ACPI 修改。
这个标志为那些使 ACPI 表与 Windows 不兼容,但现在就需要它的人实现了一个快速的解决方案。不推荐使用 ACPI 表,因为 ACPI 表必须与任何操作系统兼容,无论发生什么变化。
注意 : 这个选项将来可能会被删除。
类型 :plist 布尔值默认值:false
说明: 清除 ACPI 头字段,以解决 macOS
ACPI 实现导致引导崩溃的 bug。参考文献:Alex
James aka theracermaster 在 10.13 上调试 AppleACPIPlatform。
macOS莫哈韦沙漠(10.14)。4. RebaseRegions
类型 :plist 布尔值默认值:false
描述 : 尝试启发式地重新定位 ACPI 内存区域。
ACPI 表通常由底层固件实现动态生成。在位置无关代码中,ACPI 表可能包含用于设备配置的 MMIO 区域的物理地址,通常分组在区域中(例如 OperationRegion)。
有时会导致上述操作区域结构中地址的偏移。因此,对 ACPI 表应用任何形式的修改都是非常危险的。最合理的方法是尽可能少地更改 ACPI,并且尽量不替换任何表,尤其是 DSDT。
如果这是不可能的,那么至少尝试确保定制的 DSDT 基于最新的DSDT,或者删除受影响区域的写和读。
当没有其他帮助时,可以尝试通过修复 ACPI 地址来避免在 macOS 启动的 PCI 配置开始阶段出现停机。它不具有魔力,只适用于最常见的情况。
5
DeviceProperties5.1 介绍
设备配置提供给 macOS 一个专用的缓冲区,称为 efi
i icepropertydatabase。
属性数据可以用 gfxutil 调试。要获取当前属性数据,可以使用 macOS 中的以下命令:ioreg -lw0 -p IODeviceTree -n efi -r -x | grep
device-properties |
sed 的 / * < / /,/ >。
gfxutil
/ tmp / 设备属性。十六进制 /
tmp / 设备属性。plist
&& cat /tmp/ 设备属性
5.2特性
1.
类型:plist dict 类型描述: 设置设备属性,从 deivce 路径的映射 (plist
dict) 到变量名及其值的映射 (plist
dict) 的 plist 元数据格式。
注意: 当前属性只能由原始驱动程序 (以前) 添加,所以除非安装了单独的驱动程序,否则没有理由阻塞变量。2.
类型 :plist dict 类型描述 : 从deivce路径到数组的映射 (plist
dict) 中删除设备属性 (plist 数组)
plist字符串格式的变量名。5.3常见的属性
一些已知的属性包括:•device-id
用于 I / O 工具包匹配的用户指定的设备标识符。具有 4 字节数据类型。
用于 I/O 工具包匹配的用户指定的供应商标识符。
英特尔 GPU 帧缓冲区标识符用于帧缓冲区选择常青藤桥和更新。有 4 字节数据类型。
•apple, snb-platform-id
用于在 Sandy
Bridge 上选择 framebuffer 的 Intel GPU framebuffer 标识符。具有 4 字节数据类型。
音频布局用于 AppleHDA 布局选择。
6内核
6.1 介绍
本节允许对 Apple Kernel (XNU) 应用不同类型的内核空间修改。
目前提供驱动程序 (kext) 注入、内核和驱动程序补丁以及驱动程序阻塞。
6.2 特性 1. 添加
类型:plist 数组默认值: 空
说明: 从 OC/Kexts 目录加载选定的内核驱动程序。设计用来填充 plist
dict 值,描述每个驱动程序。
驱动程序加载顺序遵循数组中的项顺序,因此依赖项应该在它们之前写入
消费者。
2.
块类型:plist 数组
默认值: 空描述: 从预链接内核中删除选定的内核驱动程序。
设计用来填充 plist 字典值,描述每个被阻塞的驱动程序。
3.
类型:plist 数组默认值: 空
描述: 在添加和删除驱动程序之前,在内核和驱动程序中执行二进制补丁。
设计用来填充 plist 字典值,描述每个补丁。
类型:plist
dict 类型描述: 应用在下面的 quirks 属性部分中描述的单个内核和驱动程序怪癖。
6.3添加属性
1.
类型 :plist 字符串
默认值: 空字符串说明:Kext 包路径(如 Lilu)。kext 或 MyKext.kext / 内容 / 插件 / MySubKext.kext)。
类型:plist 字符串
默认值: 空字符串
描述: 用于为条目提供人类可读引用的任意 ASCII 字符串。是否使用此值由实现定义。
3.
类型 :plist 布尔值默认值:false
描述 : 除非设置为true,否则不会添加这个内核驱动程序。
类型:plist 字符串默认值: 空字符串
描述:Kext 相对于 bundle 的可执行路径(例如 content /MacOS/Lilu)。5.
类型 :plist 字符串
默认值 : 空字符串
说明 : 仅在选定的 macOS 版本上阻塞内核驱动程序。
6.
PlistPath 类型:plist 字符串
默认值 : 空字符串
描述 :Kext 信息。
6.4块属性
1. 评论
类型 :plist 字符串
默认值 : 空字符串
描述 : 用于为条目提供人类可读引用的任意 ASCII 字符串。是否使用此值由实现定义。2. 启用
类型 :plist 布尔值默认值:false
描述 : 除非设置为true,否则这个内核驱动程序不会被阻塞。
类型 :plist 字符串默认值 : 空字符串
描述:Kext 包标识符(例如 com.apple.driver.AppleTyMCEDriver)。4.
类型 :plist 字符串
默认值 : 空字符串 说明: 仅在选定的 macOS 版本上阻塞内核驱动程序。选择基于内核版本的前缀匹配,即 16.7.0 将匹配 macOS 10.12.6 和 16。
6.5补丁属性
1.
类型 :plist 字符串 默认值: 空字符串
描述 : 通过获取提供的符号名称的地址,选择符号匹配的基础进行补丁查找 ( 或立即替换)。
2.
类型 :plist 字符串默认值 : 空字符串
描述: 用于为条目提供人类可读引用的任意 ASCII 字符串。是否使用此值由实现定义。
3.
类型 :plist 整数默认值:0
描述 : 应用补丁的次数。将补丁应用于所有找到的事件。
类型 :plist 布尔值默认值:false
描述: 除非设置为 true,否则不会使用此内核补丁。5.
类型 :plist 数据
默认值 : 空数据
说明 : 数据查找。可设置为空,以便立即替换底座。
6. 标识符
类型 :plist 字符串
默认值 : 空字符串 描述:Kext 包标识符 (例如 com.apple.driver.AppleHDA) 或内核补丁的内核。7.
类型 :plist 整数默认值:0
描述 : 要搜索的最大字节数。
类型 :plist 数据 默认值: 空数据
说明 : 查找比较过程中使用的数据位掩码。
9.
类型 :plist 字符串默认值 : 空字符串
说明 : 只向选定的 macOS 版本添加内核驱动程序。
10. 取代
类型 :plist 数据
默认值 : 空数据
描述 : 替换一个或多个字节的数据。11.
类型:plist 数据默认值: 空数据
说明 : 数据位掩码在替换过程中使用。
非零位。
类型 :plist 整数默认值 :0 描述 : 在执行替换之前,要跳过已找到的事件的数量。
6.6 怪癖属性 1.
类型 :plist 布尔值默认值:false
说明 : 在AppleIntelCPUPowerManage-中禁用 PKG_CST_CONFIG_CONTROL
(0xE2) MSR 修改
表示“状态”。kext,当它被锁定无法写入时,通常会导致早期内核恐慌。
注意 : 尽可能避免使用此选项。现代固件提供 CFG 锁定设置,禁用
这样更干净。有关这个问题的更多细节可以在 VerifyMsrE2 注释中找到。2.
AppleXcpmCfgLock
类型 :plist 布尔值默认值:false
描述 : 在XNU内核中禁用 PKG_CST_CONFIG_CONTROL (0xE2) MSR 修改,当它被锁定不写时,通常会导致早期内核恐慌 (XCPM 电源管理)。
注意 : 尽可能避免使用此选项。现代固件提供 CFG 锁定设置,禁用
这样更干净。有关这个问题的更多细节可以在 VerifyMsrE2 注释中找到。3.ExternalDiskIcons
类型 :plist 布尔值默认值:false
描述 : 将图标类型补丁应用到 IOAHCIPort。kext 强制所有 AHCI 磁盘的内部磁盘图标。
注意 : 尽可能避免使用此选项。现代企业通常有兼容的 AHCI 控制器。4. ThirdPartyTrim
类型 :plist 布尔值默认值:false
描述 : 补丁 IOAHCIFamily。kext 强制削减 AHCI
ssd 上的命令支持。
注意 : 尽可能避免使用此选项。NVMe
ssd无需更改即可兼容。对于现代 macOS 版本上的AHCI ssd,有一个专用的内置实用程序称为trimforce。
5. XhciPortLimit
类型 :plist 布尔值默认值:false
描述 : 修补各种 kext
(AppleUSBXHCI)。kext AppleUSBXHCIPCI。删除USB 端口数限制为 15 个端口。
注意 : 尽可能避免使用此选项。USB端口限制是由所使用的比特数决定的
locationID 格式,如果不进行大量的操作系统修改,就不可能解决这个问题。唯一有效的解决方案是将使用的端口数量限制为 15 个(丢弃一些)。更多细节可以在 AppleLife.ru 上找到。
7 Misc
7.1介绍
本节包含 OpenCore 行为的杂项配置项,不涉及任何其他节
7.2特性
1. 引导
类型 :plist dict 类型
描述 : 应用下面 boot
Properties 部分描述的引导配置。2.
调试
类型 :plist dict 类型
描述 : 应用调试属性部分中描述的调试配置。3. 安全
类型 :plist dict 类型
描述 : 应用安全属性小节中描述的安全配置。
7.3启动属性
1. ConsoleMode
类型 :plist 字符串
默认值 : 空字符串
描述 : 按WxH(例如 80×24) 格式字符串指定的方式设置控制台输出模式。设置为空
字符串不更改控制台模式。设置为 Max 以尝试使用最大可用控制台模式。2.
ConsoleBehaviourOs
类型 :plist 字符串
默认值 : 空字符串
描述 : 在操作系统加载时设置控制台控制行为。
控制台控制是用于在文本和图形屏幕输出之间切换的传统协议。有些软件不提供它,但是选择操作系统需要它的存在,这就是 ProvideConsoleControl
UEFI quirk 的作用。
当控制台控件可用时,可以让 OpenCore 感知控制台控件,并为其设置不同的模式
操作系统启动器(ConsoleBehaviourOs),通常以图形模式运行,以及它自己的用户
接口(consoleui),通常以文本模式运行。可能的行为,设置为这些选项的值,包括:
•空字符串 - 不要修改控制台控制模式。•文本 - 切换到文本模式。
•图形 - 切换到图形模式。
切换到文本模式并保存它(需要 ProvideConsoleControl)。
ForceGraphics—切换到图形模式并保存它(需要 ProvideConsoleControl)。提示:
•除非是空操作,否则首先尝试将 ConsoleBehaviourOs 设置为图形,将 consolebehavior
ui 设置为文本。•在 APTIO IV (Haswell 和更早版本)上,通常将 ConsoleBehaviourOs 设置为 Graphics 和
consoleui 设置为 force etext 以避免视觉故障。
•在 APTIO V (Broadwell 和更新版本)上,将 ConsoleBehaviourOs 设置为 ForceGraphics,将 consolebehavior ui 设置为 Text,通常效果最好。
注意 : 对于选择固件实现,可能需要启用IgnoreTextInGraphics。3.ConsoleBehaviourUi
类型 :plist 字符串
默认值 : 空字符串
描述 : 在OpenCore用户界面加载时设置控制台控制行为。有关详细信息,请参考 ConsoleBehaviourOs 描述。
4. HideSelf
类型 :plist 布尔值默认值:false
描述 : 从引导选择器中隐藏自己的引导条目。这可能隐藏其他条目,例如,当在相同的卷上安装了另一个 UEFI OS 并且使用驱动程序引导时。
5. 决议
类型 :plist 字符串
默认值 : 空字符串
描述 : 按WxH@Bpp(例如 1920×1080@32) 或WxH指定设置控制台输出屏幕分辨率
(例如 1920×1080)格式化字符串。设置为空字符串,不改变屏幕分辨率。设置为 Max 以尝试使用最大可用屏幕分辨率。
注意 : 当控制台句柄没有 GOP 协议时,此操作将失败。当固件不提供它时,可以将 ProvideConsoleGop
UEFI quirk 设置为 true 来添加它。
6. ShowPicker
类型 :plist 布尔值默认值:false
说明 : 显示简单的引导选择程序,以允许选择引导条目。7. 超时
类型 :plist 整数,32位默认值:0
描述 : 在自动启动默认启动项之前,引导选择器中的超时 ( 以秒为单位)。
7.4调试属性
1. DisableWatchDog
类型 :plist 布尔值默认值:NO
说明 : 选择固件可能无法成功快速启动操作系统,尤其是在调试中
模式,这将导致监视犬计时器中止进程。这个选项关闭了看门狗定时器。2.
DisplayDelay
类型 :plist 整数默认值:0
描述 : 在屏幕上可见的打印行 ( 即控制台 ) 之后执行的毫秒延迟。3.DisplayLevel
类型 :plist 整数,64位默认值:0
说明 :EDK II 调试级位掩码 (sum) 显示在屏幕上。除非目标启用控制台 (屏幕上) 打印,否则屏幕上的调试输出将不可见。支持以下级别(更多信息请访问
DebugLib.h):
•0x00000002 – DEBUG, NOOPT, RELEASE 中的 DEBUG_WARN。0x00000040 – DEBUG 中的 DEBUG_INFO, NOOPT。
•0x00400000 – DEBUG_VERBOSE 在自定义构建中。
0x80000000
– DEBUG, NOOPT, RELEASE 中的 DEBUG_ERROR。4. ExposeBootPath
类型 :plist 布尔值默认值:false
描述 : 向OpenCore公开可打印启动程序路径。efi 或其启动程序 (取决于加载顺序) 作为
UEFI 变量。
要获得启动路径,请使用 macOS 中的以下命令:
nvram 4 d1fda02-38c7-4a6a-9cc6-4bcca8b30102:引导路径
要使用引导路径来安装引导卷,请在 macOS 中使用以下命令:u=$(nvram
4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102: 引导路径 | sed ‘s/.*GPT,/([^,]*/),.*//1/’);/
if [“$u” !=
“”];然后 sudo diskutil 山$u;fi 5。目标
类型 :plist 整数默认值:0
描述 : 启用日志目标的位掩码 ( 和)。默认情况下,所有日志输出都是隐藏的
在需要调试时,需要设置选项。支持以下日志目标:
0x01 - 启用日志记录,否则将丢弃所有日志。0x02
- 启用基本控制台 (屏幕上) 日志记录。
0x04 - 启用对数据集线器的日志记录。0x08
- 启用串口日志记录。
0x10 - 启用 UEFI 变量日志记录。
0x20 - 启用非易失性 UEFI 变量日志记录。0x40
- 启用日志文件。
控制台日志比其他所有变体打印的都少。根据构建类型(RELEASE、DEBUG 或 NOOPT),可以读取不同数量的日志(从最少到最多)。
数据集线器日志不会记录内核和 kext 补丁。要获得数据集线器日志,可以使用 macOS 中的以下命令:ioreg
-lw0 -p IODeviceTree | grep boot-log | 排序 | sed ‘s/.*</(.*/)>。*//1/’
| xxd -r -p
UEFI 变量日志不包含一些消息,也没有性能数据。出于安全考虑,日志大小为
限制在 32 kb。一些固件可能会更早地截短它,或者如果没有内存就会完全删除它。使用非易失性标志将日志写入 NVRAM 闪存后的每一行打印。要获得 UEFI 变量日志,请在 macOS 中使用以下命令:
nvram 4 d1fda02-38c7-4a6a-9cc6-4bcca8b30102:引导日志 |
awk 的{gsub
(/ % 0 d % 0 a % 00 / ” “); gsub (/ % d % 0 a /,“/
n”)} 1 ‘
虽然 OpenCore 引导日志已经包含了构建类型和日期的基本版本信息,但即使禁用了引导日志,也可以在 OpenCore
-version 变量的 NVRAM 中找到这些数据:
nvram 4 d1fda02-38c7-4a6a-9cc6-4bcca8b30102: opencore-version
文件日志将在 EFI 卷根上创建一个名为 opencore.log 的文件,其中包含日志内容。请注意在固件中存在的一些文件系统驱动程序不可靠,在写入文件时可能损坏数据
UEFI。
7.5 安全属性 1.
HaltLevel
类型 :plist 整数,64位
默认值:0x80000000
(DEBUG_ERROR)说明:EDK
II 调试级位掩码(sum),在获得 HaltLevel 消息后导致 CPU 停止(停止执行)。
2.
类型 :plist 布尔值默认值:true
描述 : 要求库。保险库的 sig 签名文件。
这个文件应该包含 vault.plist 的 SHA-256 散列中的原始 256 字节 RSA-2048 签名。签名是根据嵌入到 OpenCore.efi 中的公钥进行验证的。
要嵌入公开密码匙,你应采用以下任何一种方法:
•在 OpenCore 期间提供公钥。在 OpenCoreVault.c 文件中编译efi。•二进制补丁OpenCore。
OC VAULT== ASCII 标记。RSA 公钥 520 字节格式描述可以在 Chromium
OS 文档中找到。
证书或 PEM 文件中的密钥使用 RsaTool。
注意: 金库。当公钥嵌入到 OpenCore.efi 中时,使用 sig 而不考虑此选项。将其设置为 true 只会确保配置的完整性,并在公钥未设置但已设置时中止引导进程
用于验证。3.RequireVault
类型 :plist 布尔值默认值:true
描述 : 要求库。plist文件存在于 OC 目录中。
这个文件应该包含 SHA-256 哈希表,用于 OpenCore 使用的所有文件。强烈建议存在此文件
确保无意的文件修改 (包括文件系统损坏) 不会在不被注意的情况下发生。来
使用 create_vault.sh 脚本自动创建这个文件。无论底层文件系统是什么,配置之间的路径名和大小写都必须匹配。
注意: 金库。无论该选项的值是多少,都会尝试读取 plist,但将其设置为 true 将确保
配置正常,并终止引导进程。完整的命令集:
•创建 vault.plist。•创建一个新的 RSA 密钥(总是这样做,以避免加载旧的配置)。
•创建 vault.sig。
cd / volume /EFI/EFI/OC /path/to/create_vault.sh。/ 路径 / / RsaTool‘穹窿。
off=$(($(string – -t – d OpenCore))。efi | grep “=BEGIN OC
VAULT=” | cut -f1 -d’ ‘)+16)) dd of=OpenCore。
rm
vault.pub注意: 虽然看起来很明显,但是您必须使用外部方法来验证 OpenCore。
自定义证书,并签署 OpenCore。efi 和 BOOTx64。efi 与您的自定义密钥。
8 NVRAM8.1 介绍
具有 plist dict 类型,允许设置易失性 UEFI 变量,通常称为 NVRAM 变量。
内部通信,因此提供几个 NVRAM 是必要的,以正确的 macOS 功能。每个 NVRAM 变量由其名称、值、属性 (参考 UEFI 规范) 和 GUID 组成,GUID 表示 NVRAM 变量所属的“section”。macOS 使用多个 guid,包括但不限于:
•7C436110-AB2A-4BBB-A880-FE41995C9F82
(APPLE_BOOT_VARIABLE_GUID)•4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102
(OC_VENDOR_VARIABLE_GUID)
注意 : 有些变量可以由 PlatformNVRAM 或PlatformInfo部分的通用子节添加。
8.2特性
1.
添加类型:plist dict 类型
描述: 从 guid 的映射 (plist dict) 到变量的映射 (plist
dict) 设置 NVRAM 变量
名称及其值采用 plist 元数据格式。guid 必须以大写或小写的 canonic 字符串格式提供(例如 8BE4DF61-93CA-11D2-AA0D-00E098032B8C)。
创建的变量获得 EFI_VARIABLE_BOOTSERVICE_ACCESS 和 EFI_VARIABLE_RUNTIME_ACCESS 属性集。
只有在不存在或未阻塞的情况下才会设置变量。
方法允许提供默认值,直到操作系统起主导作用。注意 : 如果 plist 键不符合 GUID 格式,行为是未定义的。
2.
类型:plist
dict 类型描述: 从 guid 的映射 (plist dict) 到的数组 (plist 数组) 中删除 NVRAM 变量
plist字符串格式的变量名。
要从 macOS 中读取 NVRAM 变量值,可以使用 NVRAM 将变量 GUID 和名称连接起来,并用 : 符号分隔。
一个不断更新的变量列表可以在相应的文档中找到:NVRAM
Variables。8.3 强制变量
警告: 这些变量可能由 PlatformNVRAM 或 PlatformInfo 部分的通用子节添加。
PlatformInfo 是设置这些变量的推荐方法。macOS 功能必须具备以下变量:•4
d1ede05-38c7-4a6a-9cc6-4bcca8b38c14: FirmwareFeatures
32 位 FirmwareFeatures。在所有 mac 上显示,以避免对 SMBISO 表进行额外的解析•4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:固件特性掩码
32 位 FirmwareFeaturesMask。在所有 mac 上显示,以避免对 SMBISO 表进行额外的解析。
BoardSerialNumber。
•4 d1ede05-38c7-4a6a-9cc6-4bcca8b38c14:罗
主网络适配器 MAC 地址或替换值。
避免访问特殊的内存区域,特别是在 boot.efi 中。8.4 建议的变量
建议使用以下变量加快启动速度或进行其他改进:•7C436110-AB2A-4BBB-A880-FE41995C9F82:csr-active-config
32位系统完整性保护位掩码。
结合固件功能和扩展固件功能。出现在较新的 mac 上,以避免对 SMBISO 表进行额外的解析
•4
d1ede05-38c7-4a6a-9cc6-4bcca8b38c14: ExtendedFirmwareFeaturesMask 组合固件功能的软件和扩展固件功能的软件。
•4 d1ede05-38c7-4a6a-9cc6-4bcca8b38c14: HW_BID
硬件主板产品(如 Mac-35C1E88140C3E6CF)。不存在于真正的 mac,但用于避免额外
SMBISO 表的解析,特别是在 boot.efi 中。•4
d1ede05-38c7-4a6a-9cc6-4bcca8b38c14: HW_MLB
硬件 BoardSerialNumber。MLB 的覆盖。
硬件 ROM. 覆盖 ROM. 出现在较新的 mac 上(至少 2013 年以上)。
定义默认键盘布局的 ASCII 字符串。格式为语言国家: 键盘,例如:rur
– ru:19456 for Mac key-
董事会。
•7
c436110-ab2a-4bbb-a880-fe41995c9f82:安全模式
定义火线安全模式的 ASCII 字符串。
IOFireWireController.cpp。建议不要设置此变量,这可能会加速系统启动。设置为 full 相当于不设置变量,none 禁用火线安全性。
•4 d1ede05-38c7-4a6a-9cc6-4bcca8b38c14: UIScale 定义引导的 8 位整数。
8.5 其他变量
以下变量可能对某些配置或故障诊断有用:•7C436110-AB2A-4BBB-A880-FE41995C9F82:boot-args 内核参数,用于将配置传递给 Apple 内核和驱动程序。
– FIXME: 记录几个已知的值!
nehalem_error_disable
-no_compat_check nvda_drv=1,等等?•7
c436110-ab2a-4bbb-a880-fe41995c9f82: bootercfg
Booter 参数,类似于 boot-args,但用于 boot.efi。
mal 64 位值,带或不带 0x 前缀,主要用于日志控制:-
log=VALUE
2
. AppleLoggingStdErrSet/AppleLoggingStdErrPrint (StdErr 还是 serial?)状态 4 –
AppleLoggingFileSet/AppleLoggingFilePrint (boot . log /BOOTER)。EFI 分区上的旧文件)-
debug=VALUE
允许在设备 3 中打印一些东西来启动.
log(删除的代码意味着可能会发生崩溃)允许打印样式的 printf 调用的时间戳
– level= 值 - 调试输出的详细级别。除 0x80000000 之外的所有内容都从二进制文件中删除,这是默认值。
– kc-read-size=VALUE - 块大小,用于缓冲网络或磁盘上的 I /O,用于预链接内核的读取和相关操作。默认设置为 1MB
(0x100000),可以进行调优以加快引导速度。•7 c436110-ab2a-4bbb-a880-fe41995c9f82:
bootercfg-once
启动后删除启动程序参数覆盖。
•7 c436110-ab2a-4bbb-a880-fe41995c9f82: nvda_drv9 PlatformInfo
平台信息由几个识别字段组成,这些字段是手动生成或填充的,以便与之兼容 macOS 服务。配置的基本部分可以从 MacInfoPkg 包中获得,MacInfoPkg 包本身基于 YAML 格式的数据库生成一组接口。
•SMBISO•数据中心•NVRAM
大多数字段指定 SMBISO 中的覆盖,它们的字段名符合 EDK2
SMBISO .h 头文件。然而,数据中心和 NVRAM 中有几个重要字段。有些值可以在多个值中找到
字段和 / 或目标,因此有两种方法控制它们的更新过程:manual,其中一种方法指定所有的
值 (默认值) 和半自动值,其中 (自动) 只指定选择值,稍后用于系统配置。
9.1 特性 1.
类型 :plist 布尔值默认值 :false 描述: 基于通用部分生成平台 forminfo,而不是使用 DataHub、NVRAM、
和 SMBISO 部分。
当泛型部分足够灵活时,启用此选项非常有用。
平台 nvram 数据未使用。2.
类型:plist 布尔值默认值:false
描述: 更新 DataHub 字段。
自动的价值。3.
类型:plist 布尔值默认值:false 描述: 更新与平台信息相关的 NVRAM 字段。
这些字段根据自动值从 Generic 或 PlatformNVRAM 部分读取。
字段由 NVRAM 部分指定。如果 UpdateNVRAM 设置为 false,则可以使用NVRAM 部分更新上述变量。
4. UpdateSMBISO
类型 :plist 布尔值默认值:false
说明 : 更新 SMBISO 字段。这些字段是从泛型或 SMBISO 节中读取的,具体取决于
自动的价值。
5. UpdateSMBISOMode
类型 :plist 字符串默认值:Auto
说明 : 更新 SMBISO 字段方法:
•如果新大小 <= 大于页面对齐的原始大小,并且遗留文件没有问题,则自动覆盖
区域解锁。否则创建。
•Create—在 AllocateMaxAddress 用新分配的 EfiReservedMemoryType 替换表,没有任何回退。
覆盖 - 覆盖现有的 gEfiSmbiosTableGuid 和 gEfiSmbiosTable3Guid 数据,如果它适合新的大小。
否则,以未指定的状态中止。
•自定义——将第一个 SMBISO 表 (gEfiSmbiosTableGuid) 写入 gOcCustomSmbiosTableGuid 以解决问题
在 ExitBootServices 重写 SMBISO 内容的固件。否则相当于创建。需要修补 AppleSmbios。kext AppleACPIPlatform。kext 从另一个 GUID 读取:“EB9D2D31”->
“EB9D2D35”(ASCII)。
6. 通用的
类型:plist dictonary
可选 : 当Automatic为 false 时
描述 : 更新所有字段。只有在 Automatic 处于活动状态时才读取此部分。7. DataHub
类型:plist dictonary
可选 : 当Automatic为真时
描述 : 更新数据中心字段。只有在 Automatic 不活动时才读取此部分。8. PlatformNVRAM
类型:plist dictonary
可选 : 当Automatic为真时
说明 : 更新平台 NVRAM 字段。只有在 Automatic 不活动时才读取此部分。9. SMBISO
类型:plist dictonary
可选 : 当Automatic为真时
说明 : 更新 SMBISO 字段。只有在 Automatic 不活动时才读取此部分。
9.2通用属性
1. SystemProductName
类型 :plist 字符串
默认值:MacPro6 1
说明 : 请参考SMBISO
SystemProductName。2.
SystemSerialNumber
类型 :plist 字符串
默认值:OPENCORE_SN1
说明 : 请参考SMBISO
SystemSerialNumber。3.SystemUUID
类型 :plist 字符串,GUID
默认值 : 指定OEM
说明 : 请参考SMBISO
SystemUUID。4.
大联盟
类型 :plist 字符串
默认值:OPENCORE_MLB_SN11
说明 : 请参考SMBISO
BoardSerialNumber。5.
罗
类型 :plist 数据,6字节默认值 : 全部为零
说明 : 请参阅4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:ROM。
9.3
DataHub属性
1. PlatformName
类型 :plist 字符串
默认值 : 未安装
描述 : 在gEfiMiscSubClassGuid中设置名称。在 mac 上找到的值是 ASCII 格式的平台。2. SystemProductName
类型 :plist 字符串
默认值 : 未安装
描述 : 在gEfiMiscSubClassGuid中设置模型。在 mac 上找到的值等于 Unicode 中的SMBISO
SystemProductName。
3.SystemSerialNumber 类型:plist 字符串
默认值 : 未安装
描述 : 在gEfiMiscSubClassGuid中设置 SystemSerialNumber。在mac 上找到的值等于 Unicode 中的SMBISO
SystemSerialNumber。
4. SystemUUID
类型 :plist 字符串,GUID默认值 : 未安装
描述 : 在gEfiMiscSubClassGuid中设置系统 id。在mac 上找到的值等于SMBISO
SystemUUID。5.
BoardProduct
类型 :plist 字符串
默认值 : 未安装
说明 : 在gEfiMiscSubClassGuid中设置板 id。在mac 上找到的值等于 ASCII 中的 SMBISO 板产品。
6. BoardRevision
类型 :plist 数据,1字节默认值:0
描述 : 在gEfiMiscSubClassGuid中设置 board-rev。苹果机上的值似乎与内部董事会修订值( 如01)相对应。
7. StartupPowerEvents
类型 :plist 整数,64位默认值:0
说明 : 在gEfiMiscSubClassGuid中设置 StartupPowerEvents。mac 上的值是电源管理状态位掩码,通常为0。X86PlatformPlugin.kext 读取的已知位:
0x00000001 - 关闭原因是 PWROK 事件(与 GEN_PMCON_2 位 0 相同)
•0 x00000002 - 关闭原因是 SYS_PWROK 事件(GEN_PMCON_2 一样一点 1)•0
x00000004 - 关闭原因是 THRMTRIP
#事件(GEN_PMCON_2 钻头一样 3)•0
x00000008 - 重启由于 SYS_RESET
#事件(GEN_PMCON_2 钻头一样 4)•0
x00000010 - 电源故障(GEN_PMCON_3 一样一点 1
PWR_FLR)
0x00000040 - 一般重置状态(与 GEN_PMCON_3 位 9 位 GEN_RST_STS 相同)
0xffffffff80 – SUS 井断电(与 GEN_PMCON_3 位 14 相同)
0x00010000 - 唤醒原因是一个 ME 唤醒事件(与 PRSTS 第 0 位相同,ME_WAKE_STS)
0x00020000 - 冷重启是 ME 引发的事件(与 PRSTS 第 1 位 ME_HRST_COLD_STS 相同)
0x00080000 - 关机是我引发的事件(与 PRSTS 第 3 位 ME_HOST_PWRDN 相同)
0x00100000 - 全局重置我 Wachdog 计时器事件(与 PRSTS 第 6 位相同)
0x00200000
- 全局重置 PowerManagment
Wachdog 计时器事件(与 PRSTS 第 15 位相同)8。InitialTSC
类型 :plist 整数,64位默认值:0
描述 : 在gEfiProcessorSubClassGuid中设置 InitialTSC。设置初始TSC 值,通常为0。9. FSBFrequency
类型 :plist 整数,64位默认值:Automatic
说明 : 在gEfiProcessorSubClassGuid中设置 FSBFrequency。设置CPU
FSB 频率。10. ARTFrequency
类型 :plist 整数,64位默认值 : 未安装
描述 : 在gEfiProcessorSubClassGuid中设置 ARTFrequency。 设置 CPU 艺术频率,Skylake 和更新。
11. DevicePathsSupported
类型 :plist 数据,1字节
默认值 : 未安装
描述 : 在gEfiMiscSubClassGuid中支持的设置 DevicePathsSupported。 必须设置为 01 为 AppleACPIPlat-
的形式。kext 附加 SATA 设备路径来引导 #### 和 efi-boot-device-data 变量。所有设置为 01
现代的 mac。12。SmcRevision
类型 :plist 数据,6字节
默认值 : 未安装
描述 : 在gEfiMiscSubClassGuid中设置 REV。由VirtualSMC 或FakeSMC读取的自定义属性生成 SMC
REV 键。
13. SmcBranch
类型 :plist 数据,8字节
默认值 : 未安装
描述 : 在gEfiMiscSubClassGuid中设置 RBr。由VirtualSMC 或FakeSMC读取的自定义属性生成 SMC
RBr 密钥。
14. SmcPlatform
类型 :plist 数据,8字节
默认值 : 未安装
说明 : 在gEfiMiscSubClassGuid中设置 RPlt。 由 VirtualSMC 或 FakeSMC 读取的自定义属性生成 SMC RPlt 密钥。
9.4
PlatformNVRAM属性
1. 报价
类型 :plist 字符串
默认值 : 未安装
说明 : 指定 NVRAM 变量 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:HW_BID 的值。2. 罗
类型 :plist 数据,6字节
默认值 : 未安装
说明 : 指定 NVRAM 变量 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:HW_ROM 和4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:ROM的值。
3. 大联盟
类型 :plist 字符串
默认值 : 未安装
说明 : 指定 NVRAM 变量 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:HW_MLB 和4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:MLB的值。
4. FirmwareFeatures
类型 :plist 数据,8字节
默认值 : 未安装
描述 : 该变量与固件 featuresmask 成对出现。指定 NVRAM 变量的值 :•4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14: 固件特性
•4
d1ede05-38c7-4a6a-9cc6-4bcca8b38c14: ExtendedFirmwareFeatures 5。FirmwareFeaturesMask
类型 :plist 数据,8字节
默认值 : 未安装
描述 : 这个变量与固件特性成对出现。指定 NVRAM 变量的值 :•4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14: 固件特性掩码
•4 d1ede05-38c7-4a6a-9cc6-4bcca8b38c14:
ExtendedFirmwareFeaturesMask
9.5
SMBISO属性
1. BISOVendor
类型 :plist 字符串
默认值 : 指定OEM
SMBISO:
BISO信息 ( 类型0)-
Vendor
描述 :BISO 供应商。系统制造商的所有规则均适用。2. BISOVersion
类型 :plist 字符串
默认值 : 指定OEM
SMBISO:
BISO信息 ( 类型 0)-
BISO 版本
描述 : 固件版本。此值将得到更新,并参与更新交付配置和 macOS 版本兼容性。在较老的固件中,这个值可能看起来像 MM71.88Z.0234.B00.1809171422,
在 BiosId.h。在较新的固件中,它看起来应该像 236.0.0.0.0 或 220.230.16.0.0 (iBridge:
16.16.2542.0.0,0)。iBridge 版本是从 BridgeOSVersion 变量中读取的,并且只出现在带有 T2 的 mac 上。
苹果 ROM 版本
BISO ID: MBP151.88Z.F000.B00.1811142212 型号:MBP151
EFI 版本:220.230.16.0.0 由:root@quinoa 构建
日期:2018 年 11 月 14 日星期三 22:12:53 修订:220.230.16 (B&I)
ROM 版本:F000_B00
构建类型: 官方构建、发布
编译器:Apple
LLVM version 10.0.0 (clang-1000.2.42) UUID:
E5D1475B-29FF-32BA-8552-682622BA42E1
UUID:
151 b0907 – 10 – f9 – 3271 – 87 – cd – 4 – bf5dbecacf5 3。BISOReleaseDate
类型 :plist 字符串
默认值 : 指定OEM
SMBISO:
BISO信息 ( 类型 0)-
BISO 发布日期
固件发布日期。类似于 BISOVersion。可能是2017 年12月 8 日。4. SystemManufacturer
类型 :plist 字符串
默认值 : 指定OEM
系统信息 ( 类型 1)- 制造商
说明 :OEM 制造商的特殊板。除非严格要求,否则不应指定。应该
不包含Apple Inc.,因为这会混淆操作系统中存在的许多服务,比如固件
更新,eficheck,以及使用 Acidanthera 开发的内核扩展,如 Lilu 及其插件。5.
SystemProductName
类型 :plist 字符串
默认值 : 指定OEM
SMBISO:系统信息 ( 类型1)、产品名称
说明 : 首选 Mac 型号,用于将设备标记为操作系统支持。此值必须由任何配置指定,以便稍后自动生成此值和其他值中的相关值
SMBISO 表和相关配置参数。如果 SystemProductName 与目标操作系统不兼容,可以使用 -no_compat_check 启动参数作为覆盖。
注意 : 如果 SystemProductName 未知,并且相关字段未指定,则默认值应该设置为 macpro6,1
data。 已知产品的列表可以在 MacInfoPkg 中找到。
6. SystemVersion
类型 :plist 字符串
默认值 : 指定OEM
系统信息 ( 类型 1)- 版本
描述 : 产品迭代版本号。可能看起来像1.1。7. SystemSerialNumber
类型 :plist 字符串
默认值 : 指定OEM
系统信息 ( 类型 1)- 序列号
说明 : 产品序列号,定义格式。已知的格式在 macserial 中描述。8. SystemUUID
类型 :plist 字符串,GUID
默认值 : 指定OEM
系统信息 ( 类型1)- UUID
描述 :UUID 是一个标识符,设计为跨时间和空间都是惟一的。它不需要中央注册流程。
9. SystemSKUNumber
类型 :plist 字符串
默认值 : 指定OEM
SMBISO:系统信息 ( 类型 1)-
SKU 编号
描述 :Mac 板ID
(Board – ID)。可能看起来像旧型号的 Mac-7BA5B2D9E42DDD94 或 Mac-F221BEC8。有时它可能只是空的。
10. SystemFamily
类型 :plist 字符串
默认值 : 指定OEM
SMBISO:系统信息 ( 类型1)-
Family
描述 : 姓。可能看起来像iMac
Pro. 11。BoardManufacturer
类型 :plist 字符串
默认值 : 指定OEM
SMBISO:脚板 ( 或模块 ) 信息 ( 类型 2)- 制造商
描述 : 板制造商。系统制造商的所有规则均适用。12. BoardProduct
类型 :plist 字符串
默认值 : 指定OEM
SMBISO:脚板 ( 或模块 ) 信息 ( 类型 2)- 产品
描述 :Mac 板ID
(Board – ID)。可能看起来像旧型号的 Mac-7BA5B2D9E42DDD94 或 Mac-F221BEC8。
13. BoardVersion
类型 :plist 字符串
默认值 : 指定OEM
SMBISO:脚板 ( 或模块 ) 信息 ( 类型 2)- 版本
说明 : 板版号。不同,可能匹配 SystemProductName 或SystemProductVersion。14. BoardSerialNumber
类型 :plist 字符串
默认值 : 指定OEM
SMBISO:底板 ( 或模块 ) 信息 ( 类型 2)- 序列号
说明 : 定义格式的板序号。已知的格式在 macserial 中描述。15. BoardAssetTag
类型 :plist 字符串
默认值 : 指定OEM
基板 ( 或模块 ) 信息 ( 类型 2)- 资产标记
描述 : 资产标签号。变化,可以是空的或类型 2 板资产标签。BoardType
类型 :plist 整数
默认值 : 指定OEM
基板 ( 或模块 ) 信息 ( 类型 2)- 板类型
描述 : 要么是 0xA( 主板 ( 包括处理器、内存和 I/O),要么是0xB( 处理器 / 内存)
模块),详见表 15—底板: 板型。
17.
底盘类型:plist 字符串
默认值 : 指定OEM
SMBISO:底板 ( 或模块 ) 信息 ( 类型 2)- 底盘描述中的位置 : 不同,可能是空的或部分组件。
18.
ChassisManufacturer 类型:plist 字符串
默认值 : 指定OEM
SMBISO:系统外壳或机箱 ( 类型 3)- 制造商
描述 : 板制造商。系统制造商的所有规则均适用。19. ChassisType
类型 :plist 整数
默认值 : 指定OEM
SMBISO:系统外壳或机箱 ( 类型 3)- 类型
描述 : 底盘类型,详见表 17
– 系统外壳或底盘类型。20.ChassisVersion
类型 :plist 字符串
默认值 : 指定OEM
SMBISO:系统外壳或机箱 ( 类型 3)- 版本说明 : 应匹配主板产品。
21.
ChassisSerialNumber 类型:plist 字符串
默认值 : 指定OEM
SMBISO:系统外壳或机箱 ( 类型 3)- 版本描述 : 应该匹配SystemSerialNumber。
22. ChassisAssetTag
类型 :plist 字符串
默认值 : 指定OEM
SMBISO:系统外壳或机箱 ( 类型 3)- 资产标记号
描述 : 底盘型号名称。不同,可以是空的或MacBook-Aluminum。23. PlatformFeature
类型 :plist 整数默认值:0
SMBISO:
APPLE_SMBISO_TABLE_TYPE133 – PlatformFeature
说明 : 平台功能位掩码。更多细节请参考AppleFeatures.h。24.FirmwareFeatures 类型:plist 数据,8 字节默认值:0
SMBISO:
APPLE_SMBISO_TABLE_TYPE128 –固件特性和扩展固件特性
说明 :64 位固件功能位掩码。
25. FirmwareFeaturesMask类型 :plist 数据,8字节默认值:0
SMBISO: APPLE_SMBISO_TABLE_TYPE128 - 固件特性掩模和扩展固件特性掩模说明: 支持位元扩展固件功能位掩码。
26.
类型 :plist 整数,16位默认值:Automatic
SMBISO: APPLE_SMBISO_TABLE_TYPE131 – ProcessorType描述 : 处理器主要和次要类型的组合。
27. MemoryFormFactor
类型 :plist 整数,8位
默认值 : 指定OEM
内存设备 ( 类型 17)- 表单因子
说明: 记忆形式因素。在 mac 电脑上应该是 DIMM 或 SODIMM。
10
UEFI
10.1介绍
UEFI(统一可扩展固件接口 ) 是定义操作之间软件接口的规范
系统和平台固件。本节允许加载额外的 UEFI 模块和 / 或应用微调
载固件。
10.2特性
1.
类型:plist 布尔值默认值:NO 说明: 驱动加载后执行 UEFI 控制器连接。
2.
类型 :plist 数组
默认值: 无说明: 从 OC/ drivers 目录加载选定的驱动程序。
设计用来填充作为 UEFI 驱动程序加载的字符串文件名。
状态,甚至导致永久固件损坏。一些已知的司机包括:ApfsDriverLoader
- 在 UEFI 固件的可引导 APFS 容器中添加嵌入式 APFS 驱动程序的支持。
•AppleUiSupport - 苹果特定的用户界面支持驱动程序。这个驱动程序支持 FileVault
2 GUI、热键解析(shift、cmd+ v 等)、语言排序支持,以及其他一些对正常 macOS 功能很重要的特性。
•AptioInputFix—用户输入驱动程序,在不同的 UEFI 输入协议之上添加对 AppleKeyMapAggregator 协议的支持。
UsbKbDxe的替代品,根据固件的不同,它可能工作得更好,也可能更差。
•AptioMemoryFix –各种固件的一套怪癖。
固件也可以兼容。解决的问题包括休眠支持、KASLR 和 LiluNVRAM 安全性增强、NVRAM 和 UEFI 引导条目保存。
•DataHubDxe – Intel DataHub 驱动程序来自 IntelFrameworkModulePkg。据信这个司机是
包括在所有的 UEFI 固件,并不是必需的。
来自 MdeModulePkg 的 EmuVariableRuntimeDxe –
NVRAM 仿真驱动程序。大多数都支持 NVRAM 现代的固件。
可以使用。此驱动程序不会在重新引导期间保存 NVRAM 内容。•来自 MdeModulePkg 的英语 dxe – Unicode 排序驱动程序。
AppleUiSupport,它不包含特定于苹果的代码,只提供 unicode 排序规则支持。
•从 FatPkg 增强 fatdxe – FAT 文件系统驱动程序。这个驱动程序是嵌入在所有的 UEFI 固件,不能从 OpenCore 使用。
如果在引导过程中需要写入 EFI 分区,则可能需要固件。NVMe 支持来自 MdeModulePkg 的驱动程序。
从 Broadwell
generation 开始。
•UsbKbDxe – USB 键盘驱动程序添加支持 AppleKeyMapAggregator 协议之上的自定义 USB 键盘驱动程序实现。这是 AptioInputFix 的另一种选择,它可能会工作
这取决于固件的好坏。
•VirtualSmc – UEFI SMC 驱动程序,需要适当的 FileVault 2 功能和潜在的其他 macOS 细节。
可能需要添加,并且仍然应该使用 VirtualSmc 驱动程序。•VBoxHfs - 支持 HFS 文件系统驱动程序。
HFSPlus 驱动程序通常出现在苹果公司的固件中。虽然它的特性已经完成,但是它的速度大约慢了 3 倍,而且还没有经过安全性审计。
要从 TianoCore
UDK 编译驱动程序,可以使用与 OpenCore 编译相同的命令,但是要选择相应的包:git 克隆 https://github.com/tianocore/edk2 -b UDK2018 UDK cd UDK
源码 edksetup.sh
make - C 基工具构建 -
X64 -b RELEASE -t XCODE5 -p FatPkg/FatPkg.dsc
构建 - X64 -b RELEASE -t XCODE5 -p
MdeModulePkg/MdeModulePkg.dsc 构建 - X64 -b RELEASE -t XCODE5 -p
IntelFrameworkModulePkg/IntelFrameworkModulePkg。dsc 3。协议
类型:plist
dict 类型
默认值: 无描述: 强制构建下面协议属性部分描述的选择协议的版本。
类型:plist
dict 类型默认值: 无
描述: 应用在下面的 quirks 属性一节中描述的固件特性。10.3 协议属性
1.
类型:plist 布尔值默认值:false
说明: 使用内置版本重新安装苹果引导策略协议。这可以用来确保 APFS 兼容 VMs 或旧 mac。
类型:plist 布尔值默认值:false
说明: 使用内置版本重新安装设备属性协议。如果已经安装,则将删除所有以前的属性。
10.4 怪癖属性 1.
默认值:0
描述 : 在EXIT_BOOT_SERVICES事件后添加以微秒为单位的延迟。
这是一个非常丑陋的怪圈,以规避“仍在等待根设备”的信息,选择 APTIO
IV 固件,即华硕 Z87-Pro,当使用FileVault
2 时,特别是。似乎由于某种原因,它们与 EXIT_BOOT_SERVICES 并行执行代码,这导致 SATA 控制器无法从 macOS 访问。
将来应该找到办法。预计 3 - 5 秒就足够了,以防出现意外。2.
IgnoreInvalidFlexRatio
类型 :plist 布尔值默认值:NO
说明 : 选择固件,即 APTIO
IV,可能在MSR_FLEX_RATIO
(0x194) MSR 寄存器中包含无效值。这些值可能导致 macOS 在 Intel 平台上启动失败。
注意 : 虽然该选项不应该对未受影响的固件造成伤害,但不建议使用
当不需要的时候。3.IgnoreTextInGraphics
类型 :plist 布尔
默认值 : 无
描述 : 选择固件在屏幕上以图形和文本模式输出文本。这通常是意想不到的,因为随机文本可能出现在图形图像上,并导致 UI 损坏。当控制台控件处于与文本不同的模式时,将此选项设置为 true 将丢弃所有文本输出。
注意 : 虽然该选项不应该对未受影响的固件造成伤害,但不建议使用
当不需要的时候。此选项可能会在屏幕上隐藏错误消息。ProvideConsoleControl 需要被设置为 true 才能工作。
4.
ProvideConsoleControl 类型:plist 布尔值
默认值 : 无
说明 :macOS 引导加载程序需要控制台控制协议的文本输出,一些固件错过了它。当使用其他控制台控制选项时,需要设置此选项,例如 IgnoreTextInGraphics,
使用 ConsoleBehaviourUi 进行屏幕清理,有时还会进行 consolebehavior 操作)。5. ProvideConsoleGop
类型 :plist 布尔值默认值:NO
描述 :macOS 引导加载程序需要 GOP( 图形输出协议 ) 出现在控制台句柄上。
如果缺少此选项,将安装它。
注意 : 一些驱动程序,如AptioMemoryFix,可能提供相同的功能。这些驱动程序不能保证遵循相同的逻辑,如果有必要,则首选此选项。
6.
releaseusbowtype: plist boolean Default value: false
说明 : 尝试从固件驱动程序中分离 USB 控制器所有权。虽然大多数的固件
设法正确地做到这一点,或至少有一个选项,选择固件不。因此,操作系统在启动时可能会冻结。除非必要,否则不建议使用。
7.
RequestBootVarRouting 类型:plist 布尔值
默认值 : 假
描述 : 请求 NVRAM 驱动程序 ( 或AptioMemoryFix)将引导前缀变量从 EFI_GLOBAL_VARIABLE_G 重定向到OC_VENDOR_VARIABLE_GUID。
这将设置特殊的引导重定向变量,兼容的驱动程序将在引导启动后遵守该变量。当固件删除不兼容的启动项时,该特性允许默认的启动项保存。
8.
SanitiseClearScreen 类型:plist 布尔值默认值:false
描述 : 当使用大型显示器 ( 如2K或 4K) 时,当试图清除屏幕内容时,一些固件将屏幕分辨率重置为故障安全值 ( 如1024×768)。此选项尝试应用一个变通方法。
注意 :ProvideConsoleControl 需要被设置为 true 才能工作。所有已知的受影响系统
ConsoleMode 必须被设置为空字符串才能运行。
11个故障排除
11.1提示和技巧
1.
如何调试启动失败?
通常,获得实际的错误消息就足够了。•您有一个调试或 NOOPT 版本的 OpenCore。
•启用日志功能 (1) 并显示在屏幕上(2):Misc→Debug→Target
= 3。
•来自至少 DEBUG_ERROR (0x80000000)、DEBUG_WARN (0x00000002)和 DEBUG_INFO (0x00000040)级别的日志消息在屏幕上是可见的:Misc→Debug→DisplayLevel
= 0x80000042。
•关键错误消息,如 DEBUG_ERROR,停止引导:Misc→Security→HaltLevel
= 0x80000000。•WatchDog 被禁用以防止自动重启:Uefi→Quirks→DisableWatchDog
= true。
•启动选择器 (条目选择器) 已启用:Misc→Boot→ShowPicker
= true。
如果没有明显的错误,请逐个检查 Quirks 部分中的可用技巧。2. 如何自定义启动项?
OpenCore 遵循标准的 Apple Bless 模型,并从. contentdetails 和.disk_label 中提取条目名称。如果存在,启动目录中的 contentDetails 文件。这些文件包含一个 ASCII 字符串
带有条目标题,然后用户可以对其进行自定义。3. 安装 macOS 最简单的方法是什么?
复制联机恢复图像 (*)。dmg 和 *。到 com.apple.recovery。使用 OpenCore 在 FAT32 分区上启动目录。加载 OpenCore 引导选择程序并选择条目,它将有一个(dmg) 后缀。可以通过提供.
contentdetails 文件创建自定义名称。
要在线下载恢复,可以使用 OcSupportPkg 中的恢复工具。