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(例如80x24)格式字符串指定的方式设置控制台输出模式。设置为空
字符串不更改控制台模式。设置为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(例如1920x1080@32)或WxH指定设置控制台输出屏幕分辨率
(例如1920x1080)格式化字符串。设置为空字符串,不改变屏幕分辨率。设置为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)时,当试图清除屏幕内容时,一些固件将屏幕分辨率重置为故障安全值(如1024x768)。此选项尝试应用一个变通方法。
注意: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中的恢复工具。
评论5