
请保证在黑苹果已完全能够正常使用、并有足够能力理解相关术语后进行以下操作。
资料
学习资源
OpenCore 教程
1 | https://forums.macrumors.com/threads/manually-configured-opencore-on-the-mac-pro.2207814/ |
论坛和博客
1 | https://dortania.github.io/ |
硬件选择
1 | https://wiki.osx86project.org/wiki/index.php/Main_Page |
显卡
1 | https://applelife.ru/threads/ati-radeon-hd-4xxx-hd-5xxx-amd-radeon-hd-6xxx-hd-7xxx-r5-r7-r9-rx-vega.28890/ |
ACPI
1 | https://uefi.org/specifications |
引导器
1 | # Clover显卡相关 |
问题库
1 | https://www.tonymacx86.com/threads/readme-common-problems-and-workarounds-on-10-14-mojave.255823/ |
亮度修复
1 | https://www.tonymacx86.com/threads/native-brightness-working-without-blinkscreen-using-patched-applebacklight-kext.121031/ |
电源管理
1 | https://www.tonymacx86.com/threads/macos-native-cpu-igpu-power-management.222982/ |
旧版系统
1 | https://wiki.osx86project.org/wiki/index.php/Install_On_A_Partition_Simple_And_Accurate |
其它
1 | https://wiki.osx86project.org/wiki/index.php/Hardware_.kext_Patching_List |
引导器
在 macOS 中,可通过在终端上输入以下命令获取引导器路径。
1 | nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:boot-path |
可通过在终端上输入以下命令获取 OEM 信息。
1 | nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:oem-product # SMBIOS Type1 ProductName |
基本概念
更名补丁
一般不建议使用过多的更名补丁,尽可能只添加和 Method 名称有关的重命名,而且要通过 SSDT 确保在非 Mac 下要调用并返回原始函数,即原始 DSDT 行为不会被改变。所需要的 SSDT 一般在 OC-little 包中均可找到。
| 更名补丁 | 作用 | 替代方法 |
|---|---|---|
| change EHC1/EHC2 to EH01/EH02 | 避免与内置USB注入器冲突 | 六代(Skylake)及以上的机器已经没有EHC控制器了,建议用SSDT-EHCx_OFF关闭EHC控制器、并把重命名删除,六代以下机器保留该重命名 |
| change XHC1/XHCI to XHC | 避免与内置USB注入器冲突 | 进行USB定制 |
| change SAT0/SAT1 to SATA | 实现潜在的SATA兼容性 | 实质上完全没用 |
| change _OSI to XOSI | 配合SSDT-XOSI.dsl启用系统操作补丁 | 除非某些硬件设备只能在Windows下工作(I2C触摸板只能在Windows下使用,或ThinkPad对 FreeBSD的特殊优化),否则完全没有必要使用,而且大部分情况下直接定制SSDT也可以解除某些硬件的操作系统限制 |
| change OSID to XSID | 配合SSDT-XOSI.dsl启用系统操作补丁 | 除非某些硬件设备只能在Windows下工作(I2C触摸板只能在Windows下使用,或ThinkPad对 FreeBSD的特殊优化),否则完全没有必要使用,而且大部分情况下直接定制SSDT也可以解除某些硬件的操作系统限制 |
| change APSS to APXX | 可能导致AppleIntelCPUPowerManagement出现紧急情况,如果ACPI中不存在APSS,则无需启用 | |
| change _DSM to XDSM | 对于VoodooI2C可能是必需的 | 遍历SSDT补丁,若没有依赖_DSM,则应该删除(这个重命名涉及范围太大、太过于危险) |
| change LPC to LPCB | 为macOS修补低引脚数总线 | |
| change _REG to XREG in EC0 | 对于电池状态可能是必需的 | |
| ALS: change Method(RALS,0,S) XALS | 对于环境光传感器可能是必需的 | |
| Fix 300-series RTC Bug(Find A00A935354415301, Replace A00A910AFF0BFFFF) | 修复300系主板的RTC问题 | |
| change HECI/HEC1/MEI to IMEI | WhateverGreen能够处理这个问题 | |
| change IDER to MEID | WhateverGreen能够处理这个问题 | |
| change GFX0 to IGPU | WhateverGreen能够处理这个问题 | |
| change PEG0/PEGP to GFX0 | WhateverGreen能够处理这个问题 | |
| change SL01 to PEGP | WhateverGreen能够处理这个问题 | |
| change B0D3 to HDAU | WhateverGreen能够处理这个问题 | |
| change EC0/H_EC/ECDV/PGEC to EC | 对于台式机可使用仿冒EC补丁(随意重命名EC控制器可能会对硬件造成伤害) | |
| change HDAS/CAVS/AZAL to HDEF | AppleALC能够处理这个问题 | |
| change STAS to Noop | 同时启用两个时钟设备(其中Mac下仅有RTC起作用),无法在BIOS中禁用AWAC时使用(Mac不支持新的时钟设备AWAC,因此需要使用传统的 RTC,在DSDT中有一个STAS变量使AWAC和RTC互锁,避免两个时钟设备同时启用,注意若该重命名在Windows下生效,则Windows下将会暴露两个时间设备,这对系统有害且违反ACPI规范) | 用SSDT-AWAC替代 |
| change PXSX to ANS1/ANS2 | 修复NVMe SSD的电源管理 | 用NVMeFix.kext |
| change PXSX to ARPT | 修复Wifi | 用AirportBrcmFixup |
| change LPC0 to LPCB | 添加SMBUS支持 | SBUS的SSDT注入补丁和MCHC设备补丁SSDT-SBUS-MCHC |
| change PC00 to PCIO | 实质上完全没用 | |
| change FPU to MATH | 实质上完全没用 | |
| change TMR to TIMR | 实质上完全没用 | |
| change GBE1 to ETH0 | 实质上完全没用 | |
| change PIC to IPIC | 实质上完全没用 |
驱动
内存管理驱动
固件会将内存分成小块,分配给计算机中的各种设备以及操作系统内核。Windows 可以很好的适应这种机制,并会主动将 NT 内核映射到内存中。而 Mac 不仅需要更大的内存区块,非 Mac 设备的内置硬件设备数量也比 Mac 设备要更多,所以黑苹果需要在 EFI 中添加专门的驱动为 Mac 内核预留内存。若 Mac 无法获取正确的内存空间,将会造成内核无法加载。
一般而言,Mac 将采用 KASLR 技术进行内存分配,即内核地址空间布局随机化,以防止攻击者获取重要对象在内存中的位置。但在内存太小或设备太多时,可能会因为内核所得到的内存空间大小而导致启动失败。此时需要让内核在内存固定区域。需要指出的是,KASLR 找到需要操作的内存区域大约需要 31ms,手动设置内存区域可节约该时间。
错误消息一般如下。若启动 Mac 时出现,则需要关闭 CFG 锁,更新引导和 Whatevergreen,并修复内存分配。
1 | # 错误一 |
一般而言,采用固定内存分配时,内核被分配到0x100000+X*0x200000,其中 X 通过启动参数slide=X传递,称为 slide 值。slide=0 代表隐式关闭,在安全模式下将无法启动系统。slide=0x1-0x7F 代表内核被分配到 0x100000+0x200000 至 0x100000+0xFE00000。对于 Sandy Bridge 或 Ivy Bridge 架构,slide=0x80-0xFF 代表内核被分配到 0x100000+0x20200000 至 0x100000+0x30000000,对于其它架构则为 0x100000+0x10000000 至 0x100000+0x1FE00000。
各内存管理驱动如下,按照发行顺序从早到晚排序。
| 名称 | 对于Clover | 对于OpenCore | 备注 |
|---|---|---|---|
| OsxLowMemFixDrv | 精简版的OsxAptioFixDrv,用于修复UEFI固件上的低位内存问题,两个不能同时使用(针对Insyde H2O UEFI的笔记本,一般不使用) | 不兼容(FwRuntimeServices和OpenCore) | 自Clover r608版本后不再维护 |
| OsxAptioFixDrv/OsxAptioFix2Drv | 修复AMIAptioEFI内存映射(一般只用OsxAptioFixDrv) | 不兼容(FwRuntimeServices和OpenCore) | Clover r4368版本之前内置的内存分配驱动,不支持 NVRAM,其中OsxAptioFix2Drv是OsxAptioFixDrv 的简化的版本,去掉了内置内存分配算法,因此不能用在旧版本的Mac或者老硬件,但可以提供休眠支持 |
| OsxAptioFix3Drv | 修复AMIAptioEFI内存映射 | 不兼容(FwRuntimeServices和OpenCore) | Clover r4369版本之后至今内置的内存分配驱动,提供了对NVRAM的支持,现在仍由Clover团队维护 |
| OSXAptioFix2Drv-Free2000 | 内存驱动,用于修复UEFI固件上的内存问题,只适用于一些特定的硬件、特定的设备、特定的内存大小 | 不兼容(FwRuntimeServices和OpenCore) | 作者已经声明会损坏硬件https://www.reddit.com/r/hackintosh/comments/cfjyla/i_unleashed_a_plague_upon_you_guys_and_i_am_sorry/ |
| AptioMemoryFix | NVRAM和内存驱动,用于修复UEFI固件上的内存问题(6代及以上电脑推荐使用) | 不兼容(已集成为FwRuntimeServices) | Acidanthera团队开发,相比OsxAptioFix3Drv更好,AptioMemoryFix、AptioInputFix、CleanNvram合并发布为AptioFixPkg |
| OpenRuntime | 通过OcQuirks使用,参见本章Clover部分 | OpenCore最新的内存管理系统,原名FwRuntimeServices,用于实现OC_FIRMWARE_RUNTIME协议,允许隔离操作系统对所选变量的访问(如RequestBootVarRouting/ProtectSecureBoot),增强了OpenCore、Lilu以及Lilu插件的安全性(如VirtualSMC实现了AuthRestart支持),保护所有变量避免被不信任的操作系统写入(如DisableVariableWrite),UEFI Runtime Services内存保护管理以避开只读映射的问题(如EnableWriteUnprotector)。使用该驱动以替代以上所有驱动 |
对于 OpenCore,使用最新的 OpenRuntime 即可。对于 Clover,引导较新系统时应当使用 OcQuirks 以使用 OpenRuntime。
在 Clover 上引导旧版系统时,可使用旧版驱动,其中应当按照 AptioMemoryFix->OsxAptioFix3Drv->OsxAptioFix2Drv->OsxAptioFixDrv 的顺序修复,每次只用一个,各驱动不能共用。
注意应当尽量避免使用 slide 启动参数。前三个驱动尝试不使用启动参数slide=#,若不行则使用该参数,而最后一个驱动必须使用启动参数slide=0。
其中#的值需要通过计算。记录启动时出现的错误信息,例子如下。取 pages 前面的数字,此处为 0x116F6。
1 | Error allocating 0x0x116F6 pages at 0x00000000093eb000 alloc type 2 |
制作 UEFI Shell 并进入,输入以下命令。
【进阶】对于OpenCore
对于 OpenCore,UEFI Shell 可为 OpenShell。注意需要在配置文件的 Booter 中修改以下内容。
1 | AvoidRuntimeDefrag: YES |
1 | memmap -b |
在第十行左右找到符合要求的数据,其中Type为Available,Pages的值不小于刚才记录的值即0x116F6,Start的值大于10000000。使用Start/200000+1计算出slide值,忽略小数点后数字,计算结果为十六进制,转换为十进制即可。注意,BIOS更新后可能需要重新计算该值。
【进阶】其它算法
取Start一列的最大值,设为X。计算(X-0x100000)/0x200000,得到slide值,设为Y。
若 0x100000+(Y0x200000)=X,则 slide 值即为 X。若 0x100000+(Y0x200000)<X,则 slide 值为 X+1。
若 slide 值大于 256,则取 Start 一列的第二大值,重复以上操作,直至 slide 值小于 256。若 slide 值类似-0.379150390625,则取为 0。
注意,有时内存速度过快会出现系统无法进入的问题,此时可以通过 BIOS 调低内存频率。如 i7 8700k 上可以正常运行 32GB 3000MHz,而出于稳定性方面的考虑,i7 6700k 可能必须降至 2666MHz。
【进阶】OpenCore的DevirtualiseMmio
DevirtualiseMmio 采用 MMIO 区域并删除 Runtime 属性,扩大 slide 的范围,与 ProvideCustomSlide 搭配使用可保证 slide 的安全属性。
对于 Threadripper TRX40 19H 等问题严重的系统,需要指定不需要进行操作的区域,这些区域将在 MmioWhitelist 中被定义。以打开了 DevirtualiseMmio 的 OpenCore 调试版本引导系统,可在日志中看到如下类似内容。
1 | 21:495 00:009 OCABC: MMIO devirt start |
将十六进制转换为十进制后,在配置文件中的 Booter-MmioWhitelist 下分别添加转换好的地址即可。
其它驱动
各驱动的作用和适用范围如下。
| 名称 | 对于Clover | 对于OpenCore |
|---|---|---|
| LegacyRegion2Dxe | 某些旧的UEFI BIOS需要 | |
| NTFS | NTFS文件系统驱动程序(一般不使用,此模块与一些主板的UEFI不兼容) | 同Clover |
| AppleEfiSignTool | 验证AppleEFI二进制文件的开源工具(一般不使用) | |
| AppleImageLoader | 保护AppleEfiFat二进制驱动程序,将AppleEFI二进制文件安全加载到内存中(一般不使用) | |
| AppleEvent | 不兼容(已集成) | |
| AppleImageCodec | 为Clover启动FileVault 2解码PNG和BMP | 不兼容(已集成) |
| AppleKeyMapAggregator | 不兼容(已集成) | |
| AppleUISupport | 实现了FileVault支持,同时包含一些主板的哈希服务修复和unicode排序规则,替换了AppleKeyMapAggregator、AppleEvent、AppleUiTheme、FirmwareVolume、AppleImageCodec(一般不使用) | 不兼容(已集成) |
| SMCHelper | UEFI层面的SMC驱动,VirtualSmc.efi的替代品,与FakeSMC配合(不能与VirtualSMC.kext配合使用) | 不兼容 |
| HashServiceFix | 修复UEFI BIOS中的哈希支持 | 不兼容(已集成且提供了这个Quirk) |
| FirmwareVolume | 为启动FileVault 2创建FirmwareVolume光标 | 不兼容(已集成) |
| EnhancedFatDxe | 无法直接从引导器调用,如果在引导过程中写入EFI分区出现问题,则需要将此驱动用UEFITool刷入固件中(除非EFI分区格式为FAT16且在开机过程中可能会往EFI分区写入文件时考虑使用) | 同Clover |
| EnglishDxe | 在UEFI Shell中支持Unicode Collation协议 | 不兼容(已集成且提供了这个Quirk) |
| CsmVideoDxe | 用于Clover GUI的显卡驱动,允许使用更多分辨率,基于UEFI BIOS中的CSM兼容模块,并将启用所需的CSM(6代以前核显开CSM使用) | 不兼容 |
| AudioDxe | 启动时播放声音的HDA驱动 | 在UEFI环境播放音频的驱动 |
| AppleUITheme | 为Clover支持FileVault 2启动UI主题的驱动 | 不兼容(已集成) |
| AppleKeyFeeder | 为Clover支持FileVault 2内PS/2键盘输入的驱动 | 不兼容(已集成) |
| AppleKeyAggregator | 为Clover支持FileVault 2启动UI的驱动 | 不兼容(已集成) |
| APFS/ApfsDriverLoader | 从此容器加载已嵌入APFS容器中的apfs.efi驱动程序 | 不兼容(OpenCore 0.5.8始已集成) |
| Ps2KeyboardDxe | 为三代以前机型准备的PS/2键盘驱动 | 不提供对AppleKeyMapAggregator的支持,因此需要启用KeySupport这个Quirk |
| PS2MouseDxe/PS2MouseAbsolute/UsbMouseDxe | 使鼠标/触摸板在CloverGUI界面工作(已存在于所有UEFI固件,一般不使用,三代以前机型才考虑使用) | 同Clover |
| Usb*/UHCI/EHCI/XHCI | 解决依赖性关系不满足导致的内建驱动工作不正常的情况的一组驱动(一般不使用) | |
| OsxFatBinaryDrv | 允许macOS 10.9以下版本加载FAT模块(如boot.efi) | 不兼容(FwRuntimeServices和OpenCore) |
| DataHubDxe | macOS要求强制启动的协议(一般选用,不会引起冲突) | 不兼容(已集成且提供了这个Quirk) |
| PartitionDxe/PartitionDxeLegacy | 支持非常规分区图的驱动,用于加载旧版Mac(早于10.9)分区DMG映像文件的驱动(混合GPT/MBR或Apple分区图等,四代以前机型用PartitionDxeLegacy) | 兼容性未知 |
| EmuVariableUefi | 对某些UEFI启动无法调用NVRAM的机器提供的NVRAM模拟(部分Skylake架构的机器需要,如Phoenix UEFI、DELL Vostro、ThinkPad,仅在必要时使用) | 不兼容(替代品为VariableRuntimeDxe) |
| FSInject | 加载第三方kexts | 不兼容(已集成更先进的方法) |
| VBoxExt4 | EXT4文件系统驱动,用于启动LinuxEFI系统 | 同Clover |
| VBoxExt3 | EXT2/3文件系统驱动,用于启动LinuxEFI系统 | |
| AptioInputFix/AppleGenericInput | 解决了某些固件上的鼠标输入问题(AppleUsbKbDxe的等效驱动),添加了对AppleKeyMapAggregator协议支持的用户输入驱动,为FileVault 2 GUI输入支持提供AMIAPTIO专有鼠标和键盘协议(通常修改的UsbKbDxe更好,一般不使用) | 不兼容(已集成) |
| AppleDxeImageVerificationLib | 为EFI二进制文件提供Apple的加密签名算法(一般不使用) | |
| ExFatDxe/ExFatDxeLegacy | 除非EFI/某个系统分区是ExFAT格式,否则不需要保留(在四代以前机型上由于缺少RDRAND指令支持,应使用ExFatDxeLegacy) | 同Clover |
| HfsPlus/HfsPlusLegacy/VBoxHfs/OpenHfsPlus | HFS+文件系统驱动程序,留其一即可(一般推荐用HfsPlus,四代以前机型由于缺少RDRAND指令支持应用HfsPlusLegacy,VBoxHfs/OpenHfsPlus性能较差) | 同Clover |
| OpenPartitionDxe | 启动10.7至10.9的恢复分区时必须,OpenDuet已内置该驱动 | |
| UsbKbDxe | 当内置驱动程序不适用于固件时,用于Apple Hotkeys和FileVault支持,已被取代为OpenUsbKbDxe | |
| AppleUsbKbDxe/OpenUsbKbDxe | 给使用模拟UEFI的老主板在OpenCore界面正常输入用,添加了对AppleKeyMapAggregator协议支持的USB键盘驱动,是AppleGenericInput的等效驱动(仅在运行DuetPkg的旧系统上使用,勿在Ivy Bridge即三代酷睿及以上的主板使用,否则将造成硬件损害,现代机型应使用OpenCore中KeySupport这一Quirk) | |
| NvmExpressDxe | 四代(Haswell)以前机型使用的NVMe硬盘加载驱动,支持SSD连接到NVM Express总线,若安装了NVMe SSD则需要使用 | 同Clover |
| XhciDxe | HCI USB控制器支持驱动程序,为二代(Sandy Bridge)以前的主板提供USB3支持(主要是Intel控制器) | 同Clover |
| HiiDatabase | 为四代以前的设备提供UEFI界面字体渲染支持,UEFI Shell中文字渲染异常时使用,Ivy Bridge(3代酷睿)或更老代主板上适用 | 同Clover |
| VirtualSmc | 已被替代为AppleSmcIO这一Quirk | |
| CrScreenshotDxe | 增加OpenCore UI内截屏功能,快捷键为左Ctrl+左Alt+F12 | |
| OpenCanopy | 加载第三方主题,实现图形引导界面 | |
| FwRuntimeServices | 不兼容 | 通过支持只读/只写NVRAM变量提高OpenCore和Lilu的安全性,已被OpenRuntime替代 |
| MemoryAllocation | 为Z390/X99等主板预留第一组512MB内存,帮助引导工具注入内核以及内核缓存至第一组512MB内存,需要配合FwRuntimeServices和引导标识符slide=1(若要使用hibernation功能请勿使用) | |
| UsbMouseDxe | USB鼠标驱动程序(仅在运行DuetPkg的旧系统上使用) | |
| VBoxExt2 | EXT2文件系统驱动,用于启动LinuxEFI系统 | 同Clover |
| VBoxIso9600 | ISO9600文件系统驱动 | 同Clover |
| GrubUDF | 加载UDF文件系统 | 同Clover |
| GrubNTFS | 加载NTFS文件系统 | 同Clover |
| GrubISO9660 | 加载ISO9660文件系统 | 同Clover |
| GrubEXFAT | 加载NTFS文件系统 | 同Clover |
| TbtForcePower | 启用ThunderBolt热插拔 | |
| VariableRuntimeDxe | EDK II 的NVRAM驱动,OpenCore中用于模拟NVRAM,需要配合FwRuntimeServices(.efi)和DisableVariableWrite(Quirk) | |
| BootChimeDxe | 不兼容(已集成) |
启动参数
普通参数
很多参数可以通过在内核或驱动程序代码中寻找 PE_parse_boot_argn 函数找到。
Core Dump 指当程序运行的过程中异常终止或崩溃,操作系统将程序当时的内存状态记录下来,保存在文件中。
| 参数 | 对于Clover | 对于OpenCore |
|---|---|---|
| 内核与Lilu | ||
| -v | 啰嗦模式(跑代码模式,用于排错) | |
| -x | 安全模式(忽略所有非必要的kext文件和引导设置,特别适用于黑苹果) | |
| -s | 单用户模式(命令行模式) | |
| f | 旧版安全模式 | |
| -D | mach_init在正常模式下启动,启动的服务器不进行核心转储,不推荐使用 | |
| -d | mach_init在调试模式下启动,并带有大量日志记录。核心转储用于所有启动的崩溃服务器。在10.4或更高版本上,此参数使启动的程序在初始化期间尽早进行守护进程 | |
| -f | 启动时强制重建内核扩展(kext)缓存(只有从10.6到10.9的64位内核支持无缓存启动) | 将Kernel-Scheme-KernelCache设置为Cacheless |
| -b | 内核在其重新启动标志变量中设置RB_NOBOOTRC,以不执行/etc/rc.boot,不推荐使用 | |
| -l | 日志中输出内存泄漏相关记录(osfmk/kern/startup.c) | |
| -r | mach_init将其自身注册在其先前运行的副本中,不推荐使用 | |
| -legacy | 启动到32位内核 | |
| -liluoff | 跳过Lilu.kext | |
| -no-zp | 区域推迟 | |
| -no_compat_check | 关闭兼容性检查(适用于10.7以上的版本) | |
| MountEFI=yes/diskX | 挂载所有/某个EFI分区 | |
| config=A | 用/Library/Preferences/SystemConfiguration/A.plist代替com.apple.Boot.plist | |
| LogLineCount=0 | 设置日志文件最大行数(0为无限制) | |
| LogLocation=PATH | 日志文件保存路径 | |
| LogEveryBoot=yes/no | 每次启动保存日志文件 | |
| dart=0 | 关闭64位硬件上的系统PCI地址映射器(DART),修复因开启VT-d导致系统启动错误,同时删除DMAR表,在10.15上需要禁用SIP(DART在拥有2GB以上物理内存的机器上是必需的,但在所有机器上无论内存大小,默认情况下都会启用DART) | 不推荐使用,更改为Kernel-Quirks-DisableIoMapper |
| darkwake=no/0/1/2/3/4/8/10 | 禁止系统休眠/设定休眠模式为固定数值 | |
| kext-dev-mode=1 | 启用第三方驱动(不要在El Capitan及以上系统使用) | 不需要(OpenCore使用了内核注入方法) |
| rootless=0 | rootless模式(不要在El Capitan及以上系统使用) | |
| arch=i386 | 以32位内核模式启动 | |
| arch=x86_64 | 以64位内核模式启动 | |
| -legacy | 强制启动到32位用户区 | |
| -force64 | 强制启动到64位用户区(AMD CPU通常需要32位内核与64位用户区) | |
| npci=0x2000 | 在旧设备上禁用 kIOPCIConfiguratorPFM64,解决独立显卡PCIconfiguration begin卡住不动的问题 | |
| npci=0x3000 | 解决独立显卡PCIconfiguration begin卡住不动 | |
| Kernel=mach_kernel | 从系统内核启动 | |
| rd=disk0s1 | 强制指定启动分区 | |
| rd=*/PCI0@0/CHN0@0/@0:1 | 啟動PCI RAID卡,格式rd=*<IODeviceTree path> |
|
| rp | 根目录位置 | |
| trace | Kernel Trace缓冲区大小 | |
| initmcl | 初始化mbuf集群 | |
| socket_debug | 套接字调试 | |
| net_affinity | 净亲和度 | |
| rte_debug=flags | 路由调试 | |
| msgbuf | 消息缓冲区 | |
| mseg | 最大细分 | |
| mcache_flags | 内存缓存标志 | |
| -rwroot_hack | 挂载root读/写 | |
| mbuf_debug=1 | MBuf调试 | |
| boot-uuid | 引导UUID | |
| config=foobar | 加载/Library/Preferences/SystemConfiguration/foobar.plist以代替com.apple.Boot.plist | |
| iog=0x0 | 强制Mac在笔记本上不使用Clamshell模式,当外接了显示器和键盘,合盖后笔记本不会睡眠,但内置显示器将会关闭 | |
| serverperfmode=1 | 在macOS Server中开启性能模式 | |
_panicd_ip=11.4.5.14 |
设置一个Kernel Panic收集服务器的IP地址,日志将会通过UDP协议发送给这个IP的1069端口 | |
| panicd_port | 修改日志发送端口(默认为1069) | |
| -zc | 自由区元素检查 | |
| keepsyms=1 | 保留KLD/Address-Symbol翻译,配合debug=0x100使用,使操作系统在内核崩溃时打印符号 | |
| artsize | 指定要用于地址解析表(ART)的页数 | |
| dtrace_dof_mode=0/1/2/3 | 设置DTrace DOF模式 | |
| DisableFBT=1 | 关闭FBT | |
| IgnoreFBTBlacklist=1 | 忽略FBT黑名单 | |
| BootCacheOverride=1 | BootCache驱动程序被加载,但从网络启动时不会运行,设置BootCacheOverride=1可以覆盖此行为 | |
| diag | 启用内核的内置诊断接口及其特定功能 | |
| serial | 串行诊断控制台 | |
| io=# | I/O Kit驱动调试位,设置为0x00200000(即kIOLogSynchronous)时会使IOLog()函数同步执行 | |
| novmx=1 | 禁用AltiVec | |
| pcata=0 | 禁用板载PC ATA驱动器(加载轮询模式驱动程序可能可以开启) | |
_router_ip=11.4.5.14 |
使用跨局域网内核调试时指定网关IP | |
| serial=1 | 启用串口调试 | |
| serialbaud | 指定串行端口的波特率。kprintf()函数的初始化例程检查此参数 | |
| smbios=1 | 在SMBIOS驱动中启用详细的日志信息,仅限于32位机器 | |
| vmdx/pmdx | 内核启动时在内存中创建一个分区,参数格式为base.size,其中base是对齐的内存地址,size是内存页面大小的倍数。vmdx指虚拟内存、pmdx指物理内存,创建成功后将会被分别挂载在dev/mdx和dev/emdx下 | |
| srv=1 | 在X Servers或macOS Server系统中使用这一参数时会修改内核的电源和网络参数,提升作为服务器的性能 | |
| ncl | 集群数 | |
| nbuf | BSD的缓冲区数 | |
| kmem=1 | 内核内存访问 | |
| nvram_paniclog=1 | 将Kernel Panic日志写入NVRAM | |
| pmsafe_debug=1 | 将CPU置于安全电源模式 | |
| preempt | 设置默认抢占率 | |
| unsafe | 最大unsafe quanta | |
| poll | 最大poll quanta | |
| yield | Schedule poll yield shift | |
| kextlog=# | kext加载调试位 | |
| lapic_dont_panic=1 | 禁用AP内核的LAPIC Panic伪中断行为 | |
| smcdebug=# | AppleSMC调试位 | |
| ctrc | 限制对特定处理器的跟踪 | |
| kdp_match_mac | 指定要由远程内核调试协议使用的MAC地址 | |
| kdp_match_name | 指定远程内核调试协议将使用的BSD网络接口名称 | |
| mcklog | 指定机器检查标志 | |
| tb | 指定非默认的跟踪缓冲区大小。内核将事件跟踪到循环内存缓冲区。默认情况下,内核在调试模式下使用32页,在非调试模式下使用8页。取值范围为1-256 | |
| vmmforce | 将虚拟机监视器VMM特性指定为特性位的逻辑或,对所有虚拟机实例都是强制的 | |
| wcte=1 | 在PowerPC不可缓存单元(NCU)中启用写入合并计时器(或存储收集计时器),默认禁用 | |
| debug=参数 | ||
| 将所需选项数字求和后作为参数 | ||
| debug=0x1 | DB_HALT,在引导时暂停,直到外部调试串口已经连接并被识别 | |
| debug=0x2 | DB_PRT,将内核的printf()函数输出的信息打印到 Console.app | |
| debug=0x4 | DB_NMI,启用内核调试功能,包括生成非屏蔽中断(NMI),在Power Mac上只需简单地按下电源键就能产生NMI。在笔记本电脑上在按下电源键时必须按住命令键,如果按住电源键超过五秒钟,系统将关闭电源,在系统偏好设置中更改启动盘时,DB_NMI位将被清除 | |
| debug=0x8 | DB_KPRT,将kprintf()产生的内核调试输出发送到远程输出设备,通常是一个调试串口(如果有的话),注意kprintf()的输出是同步的 | |
| debug=0x10 | DB_KDB,使用KDB代替GDB作为默认的内核调试器。与GDB不同,KDB必须被显式编译到内核中,此外基于KDB的调试需要原生的串口硬件(而不是基于USB的串口适配器) | |
| debug=0x20 | SB_SLOG,启用将杂项诊断记录到系统日志中,设置了这个位后load_shared_file()内核函数会记录额外的信息 | |
| debug=0x40 | DB_ARP,允许跨局域网调试内核 | |
| debug=0x80 | DB_KDP_BP_DIS,已经被弃用,用于支持旧版的GDB | |
| debug=0x100 | DB_LOG_PI_SCRN,禁用五国而把Kernel Panic的相关数据直接打印在屏幕上,还可用于Core Dump | |
| debug=0x200 | DB_KDP_GETC_ENA,在 Kernel Panic 后启用快捷键(c继续,r重启,k进入KDB) | |
| debug=0x400 | DB_KERN_DUMP_ON_PANIC,当Kernel Panic时触发一次Core Dump | |
| debug=0x800 | DB_KERN_DUMP_ON_NMI,当产生NMI时触发一次Core Dump | |
| debug=0x1000 | DB_DBG_POST_CORE,等待调试器连接(如果使用GDB)或在NMI触发的内核转储后等待调试器(如果使用 KDB),如果没有设置DB_DBG_POST_CORE,内核在Core Dump后继续运行 | |
| debug=0x2000 | 只生成并发送Kernel Panic Log,不生成完整的Core Dump | |
| 内存 | ||
| maxmem=# | 将可寻址内存限制为#MB | |
| slide=# | 手动设置KASLR slide值为# | |
| fill | 指定一个整数值,启动时用这个整数填充所有内存 | |
| ?memory= | 显示系统内存信息 | |
| CPU,ACPI与电源 | ||
| -xcpm | 在Ivy Bridge系统里强制xcpm使用系统内核以实现CPU原生电源管理 | |
| cpus=# | 启用#个CPU核心(cpus=1为使用单核模式) | |
| himemory_mode | 用于调试超过4GB系统的大型物理内存配置(0-所有页面可用,1-禁用高内存,2-首选高内存) | |
| -nossse3bit | 启用AMD CPU的SSSE3仿真 | |
| acpi | 启用AppleACPIPlatform调试 | |
| acpi=off | 关闭电源管理 | |
| acpi=ht | 以ACPI boot table启动 | |
| acpi=force | 强制启动ACPI | |
| acpi=strict | 限制ACPI | |
| acpi=noirq | 不设定ACPI使用的IRQ | |
| acpi_sci={edge,level,high,low} | 设定ACPI SCI中断 | |
| idlehalt=1 | 无视所有空闲进程,使CPU进入低功率模式,系统闲置一段时间会停止电源(0为关闭,1为启动) | |
| panic_io_port=0x0(,0x1,…,0xffff) | 从该I/O端口读取panic | |
| cpuidle=1 | CPU省电模式,CPU闲置一段时间后会停止电源(0为关闭,1为启动) | |
| platform=X86PC | 强制禁用ACPI电源管理 | |
| platform=ACPI | 强制启用ACPI电源管理 | |
| fn=1 | 关闭强制休眠 | |
| fn=2 | 开启强制休眠 | |
_fpu |
禁用x86上的FPU功能,_fpu=387将禁用FXSR/SSE/SSE2,_fpu=se将禁用SSE2 |
|
| immediate_NMI=1 | 强制立即使用NMI调试器 | |
| lcks | 锁定统计信息 | |
| novmx=1 | 在Rosetta禁用altivec仿真 | |
| max_valid_dma_addr | 最大有效DMA地址 | |
| maxbouncepool | 最大反弹池大小 | |
| maxloreserve | 最大低储备 | |
| npvhash | 物理到虚拟的哈希映射 | |
| wpkernel=1 | 内核写保护 | |
| -no_shared_cr3 | 禁用64位用户的共享内核地址空间 | |
| -pmap_trace | 为pmap启用内核跟踪 | |
| hfile | 休眠文件的名称(这一参数也会修改sysctl中的kern.hibernatefile变量) | |
| pmsx=1 | 在10.4.3上启用实验性电源管理(PMS) | |
| busratio=# | 规定CPU总线比率为20 | |
| acpi_layer=0xFFFFFFFF | ||
| acpi_level=0xFFFF5F | 代表ACPI_ALL_COMPONENTS | |
| acpi_sleep | ACPI睡眠 | |
| nvdebug | NVDAResman调试 | |
| nvrm | NVDAResman | |
| ndrv_debug_level | NDRV调试级别(NVDAResman) | |
| pstep | 功率步调试(ACPI_SMC) | |
| hpet | AppleHPET | |
| batman=# | AppleSmartBatteryManager调试位 | |
| batman-nosmc=1 | 禁用AppleSmartBatteryManager SMC接口 | |
| ioaccel_debug=# | IOAccelerator调试掩码 | |
| nvram-log=1 | 启用AppleEFINVRAM日志 | |
| 显卡与Whatevergreen | ||
| forceRenderStandby=0 | 禁用RC6 Render Standby,避免NVMe内核panic以及KBL/CFL可在低功耗状态下由于显卡导致的系统不稳定 | |
| nv_disable=1 | 禁止加载Nvidia独显驱动 | |
| nvda_drv=1 | 让系统安装Nvidia官方WebDriver显卡驱动(10.12+失效,对于Clover在配置文件勾选System Parameters-NvidiaWeb,对于OpenCore在配置文件填写NVRAM->Add->7C436110-AB2A-4BBB-A880-FE41995C9F82->nvda_drv: <31>) | |
| nvda_drv_vrl=1 | Sierra和High Sierra中用于取代nvda_drv=1 | |
| romndrv=1 | 允许使用本机图形驱动程序(ndrv),即使其创建日期早于预定义的最小日期2001年3月1日 | |
| -amd_no_dgpu_accel | 关闭AMD显卡硬件加速(默认),替代WhateverGreen的-radvesa,用于较新的GPUs | |
| -radvesa | 强制GPU进入VESA模式(无GPU加速),有助于进行故障排除,苹果内置标志的版本是-amd_no_dgpu_accel | |
| shiki-id=Mac-7BA5B2D9E42DDD94 | 使用iMacPro1,1交换boardID | |
| shikigva=1 | 让iGPU处理硬件解码,在同时使用iGPU与dGPU时需要 | |
| shikigva=4 | 在新于Haswell的架构上支持硬件加速的视频解码 | |
| shikigva=40 | 使用iMac14,2交换boardID,允许Polaris,Vega和Navi GPU处理所有类型的渲染,对于希望使用iGPU、不需要Nvidia GPU的SMBIOS有效 | |
| agdpmod=vit9696 | 禁用board ID检查,完成引导后屏幕变黑时可能需要 | |
| agdpmod=pikera | 重命名board-id为board-ix以有效地禁用board ID检查 | |
| -wegnoegpu | 禁用除iGPU以外的所有GPU | |
| -igfxnohdmi | 禁用DisplayPort到HDMI音频转换 | |
| -cdfon | 执行启用HDMI 2.0支持所需的众多补丁 | |
| -igfxvesa | 强制GPU进入VESA模式(无GPU加速),有助于进行故障排除 | |
| igfxonln=1 | 强制所有显示联机,对于解决Coffee and Comet Lake 10.15.4+中的屏幕唤醒问题很有用 | |
| igfxfw=2 | 支持为iGPU加载Apple的GUC固件,需要第9代芯片组或更高版本(例如Z390) | |
| -nehalem_error_disable | 用于MacPro5,1以避免内核panic | |
| panic_on_display_hang=1 | 显示设备挂起时触发Panic | |
| panic_on_gpu_hang=1 | GPU挂起时触发Panic | |
| spin_wait_for_gpu=1 | 减少GPU高负载情况下的超时时间 | |
| “Graphics Mode”=”1024x768x32” | 指定分辨率(WidthxHeightxColor Depth,如1024x768x32,或WidthxHeightxDepth@Refresh Rate,如640x480x32@60) | |
| ?video= | 显示显卡支持的最高分辨率 | |
| USB | ||
| -uia_exclude_hs | 从USB3.0端口中禁用HS端口(将无法在这些端口上使用USB2.0设备,使用USB鼠标/键盘切勿使用) | |
| -uia_exclude_xhc | 启用EH0x和相关集线器的USBInjectAll端口注入器,从而覆盖内置集线器端口注入器,但保持对XHC的DSDT控制 | |
| -uia_exclude_ssp | 禁用SSP端口 | |
| -uia_exclude_ss | 禁用SS端口 | |
| -uia_ignore_rmcf | 禁用USBInjectAll的SSDT替代代码 | |
| uia_exclude=# | 手动设置禁用的端口 | |
| -gux_defer_usb2 | 修复使用GenericUSBXHCI.kext导致的睡眠问题(仅在EHC控制器存在时可用,i7系列适用) | |
| -gux_no_idle | 终止英特尔芯片上的一些空闲模式(idle-mode)功能(i7系列适用) | |
| -gux_nosleep | 强迫睡眠使用shutdown/reset方法 | |
| -gux_nomsi | 强迫使用中断(interrupt)而不是msi | |
| 声卡与AppleALC | ||
| -alcoff | 跳过AppleALC.kext | |
| 其它硬件 | ||
| fhrdl1=1 | 强制硬件恢复数据高速缓存级别1(L1 D-cache)错误,已被废弃,换用mcksoft | |
| mcksoft=1 | 启用计算机检查软件恢复 | |
| novmx=1 | 禁用AltiVec | |
| bluetoothHostControllerSwitchBehavior=never/always | 蓝牙驱动程序是否切换插入的加密狗,要使外部加密狗在重启后仍为默认设置则使用always | |
| 仅适用于PPC | ||
| mtxspin | Mutex spin | |
| vmmforce | VMM force | |
| fn=0/1/2 | 强制小睡 | |
| pmsx=1 | 实验电源管理步进模式 | |
| ctrc | 将跟踪设置为特定的CPU | |
| tb | 非默认跟踪缓冲区大小 | |
| wcte | 开启组合写计时器 | |
| mcklog | 清除机器检查标志 | |
| mcksoft | 机器检查软件恢复 | |
| ht_shift=1 | 非默认哈希表大小 | |
| zsize | 目标区域大小 | |
| colors | 设置VM颜色 | |
| serialbaud | 设置串行波特率 | |
| 其它 | ||
| urgency_notification_abstime |
Busradio 参数
Busratio=xx 参数仅适用于无法正确启动的多核 Core i 系列处理器,在 10.5.7 及之后不再需要。一般在 10.5.6 中使用 i7 CPU 时需要该参数。
xx 的值为 Core Speed 数值除以 Bus Speed 数值,四舍五入到最接近的整数。
工具
部分工具作用如下。
| 工具名称 | 原因/用途 |
|---|---|
| BootKicker | 调用Mac内置的引导界面,用于白苹果安装OpenCore,黑苹果无法使用,可直接删除(仅Mac同款显卡才可使用) |
| ChipTune | 测试BeepGen协议,生成不同频率和长度的音频信号 |
| CleanNvram | NVRAM清理 |
| FwProtect | 解锁和回锁NVRAM保护,让其他工具在从OpenCore启动时能够获得完整的NVRAM访问权限 |
| GopStop | 停止显卡GOP,用于测试GraphicOutput协议(排错时使用) |
| KeyTester | 在SimpleText模式下测试键盘输入 |
| MemTest86 | 内存测试工具 |
| OpenCore Shell | 由OpenCore配置的UEFI Shell,与绝大部分固件兼容 |
| PavpProvision | 执行EPID配置(需要配置证书数据) |
| ResetSystem | 执行系统重置(以重置类型作为参数,可为ColdReset/Firmware/WarmReset/Shutdown,默认为ColdReset) |
| RtcRw | 读取和写入RTC(CMOS)存储器的使用程序 |
| HdaCodecDump | 导出声卡Codec,可用于定制声卡 |
| VerifyMsrE2 | 用于检查主板上CFG锁的状态 |
系统启动标志位
即 BooterConfig,具体含义如下。
| Bit位 | 含义 |
|---|---|
| 0 | RebootOnPanic,遇到内核崩溃自动重启 |
| 1 | HiDPI,在启动过程中使用HiDPI模式显示 |
| 2 | Black,在启动过程中不显示进度条 |
| 3 | CSRActiveConfig,将读取当前生效的SIP控制标志位 |
| 4 | CSRConfigMode,仅用于Recovery/安装环境,将允许对SIP进行配置 |
| 5 | CSRBoot,仅用于Recovery/安装环境,SIP将完全禁用 |
| 6 | BlackBg,在启动过程中使用黑色背景 |
| 7 | LoginUI,在启动过程中使用登陆界面作为背景 |
| 8 | InstallUI |
kext 补丁
修复外置硬盘识别为内置硬盘
RXh0ZXJuYWw=指 External,SW50ZXJuYWw=指 Internal。
1 | Name: AppleAHCIPort |
允许使用 MacPro4,1 或 MacPro5,1 的 SMBIOS 时不带 ECC 内存引导
1 | Name: AppleTyMCEDriver |
使用 VoodooHDA 时将系统偏好设置-声音-输出中的设备由 Headphones 改为 Telephones
1 | Name: VoodooHDA |
IOAPIC 修复
1 | Name: AppleAPIC |
添加 TRIM 支持
1 | Name: IOAHCIBlockStorage |
Intel HD3000 连接器补丁
1 | Name: AppleIntelSNBGraphicsFB |
kernel 补丁
去除 Lilu 内核崩溃时的 kexts 输出
根据 MatchOS 的版本号选用更名补丁。
1 | Comment: Disable panic kext logging on 10.15.4 Release kernel |
NVRAM
即易失性 UEFI 变量。macOS 广泛使用 NVRAM 变量使操作系统、BootLoader、固件之间互通。
macOS 使用的 NVRAM 如下。
| GUID | 宏定义 | 含义 | 说明 |
|---|---|---|---|
| 常用 | |||
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14 | APPLE_VENDOR_VARIABLE_GUID | AppleVendor | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82 | APPLE_BOOT_VARIABLE_GUID | AppleBoot | 默认GUID,通过nvram -p被调用 |
| 8BE4DF61-93CA-11D2-AA0D-00E098032B8C | EFI_GLOBAL_VARIABLE_GUID | EfiGlobal | 非Apple GUID,由ACPI规范所制定 |
| 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102 | OC_VENDOR_VARIABLE_GUID | ||
| 其它 | |||
| 9EBA2D25-BBE3-4AC2-A2C6-C87F44A1278C | APPLE_PASSWORD_UI_EFI_FILE_NAME_GUID | ApplePasswordUi | |
| 8D63D4FE-BD3C-4AAD-881D-86FD974BC1DF | APPLE_CORE_STORAGE_VARIABLE_GUID | AppleCoreStorage | |
| F68DA75E-1B55-4E70-B41B-A7B7A5B758EA | APPLE_TRB_SECURE_VARIABLE_GUID | AppleTrbSecureVariable | |
| 5D62B28D-6ED2-40B4-A560-6CD79B93D366 | APPLE_TRB_STAGING_COMMAND_GUID | AppleTrbSecureCommand | |
| FA4CE28D-B62F-4C99-9CC3-6815686E30F9 | APPLE_EFI_PERSONALIZATION_VARIABLE_GUID | AppleEfiPersonalization | |
| 36C28AB5-6566-4C50-9EBD-CBB920F83843 | APPLE_EFI_NETWORK_VARIABLE_GUID | AppleEfiNetwork | |
| AF9FFD67-EC10-488A-9DFC-6CBF5EE22C2E | APPLE_ACPI_VARIABLE_GUID | AppleAcpi | |
| FA4CE28D-B62F-4C99-9CC3-6815686E30F9 | FA4CE28D | ||
| 2660DD78-81D2-419D-8138-7B1F363F79A6 | Custom GUID for Lilu variable storage | LiluNormal | |
| E09B9297-7928-4440-9AAB-D1F8536FBF0A | Custom GUID for Lilu read-only variable storage (cannot be written from OS), implemented by AptioMemoryFix | LiluReadOnly | |
| F0B9AF8F-2222-4840-8A37-ECF7CC8C12E1 | Custom GUID for Lilu write-only variable storage (cannot be read from OS), implemented by AptioMemoryFix | LiluWriteOnly |
变量
| 变量 | 作用 |
|---|---|
| 必需变量 | |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:FirmwareFeatures | 32位FirmwareFeatures。存在于所有Mac上,用来避免额外解析SMBIOS表 |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:FirmwareFeaturesMask | 32位FirmwareFeaturesMask。存在于所有Mac上,用来避免额外解析SMBIOS表 |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:MLB | 存在于较新的Mac上(至少2013年以后),用来避免额外解析SMBIOS表,尤其是在boot.efi中 |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:ROM | 主要的网络适配器的MAC地址或替换值。存在于较新的Mac(至少2013年以后)上,用来避免访问特殊内存区域,尤其是在boot.efi中 |
| 建议变量 | |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:ExtendedFirmwareFeatures | 结合FirmwareFeatures和ExtendedFirmwareFeatures。存在于较新的Mac上,用来避免额外解析SMBIOS表 |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:ExtendedFirmwareFeaturesMask | 结合FirmwareFeaturesMask和ExtendedFirmwareFeaturesMask。存在于较新的Mac上,用来避免额外解析SMBIOS表 |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:HW_BID | 硬件BoardProduct(如Mac-35C1E88140C3E6CF)。在真正的Mac上不存在,但可用于避免额外解析SMBIOS表,尤其是在boot.efi中 |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:HW_MLB | 硬件BoardSerialNumber。覆盖MLB,存在于较新的Mac上(至少2013年以后) |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:HW_ROM | 硬件ROM。覆盖ROM,存在于较新的Mac上(至少2013年以后) |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:security-mode | 定义FireWire安全模式的ASCII字符串。这一变量旧版本才有,建议不要设置这个变量,这样可能会加快启动速度。设置为full等同于不设置该变量,设置为none将禁用FireWire安全性 |
| 其它变量 | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:AAPL,PanicInfo0000 | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:AAPL,PanicInfoLog | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:ALS_Data | UINT8, Present on 2016+ MBP; default is 03 (enables auto power-on on lid opening), 00 disables auto boot; reads SMC key “LIDB”, see AlertUI.efi in firmware |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:AutoBoot | UINT8[2] |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:backlight-level | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:backlight-regs | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:bluetoothActiveControllerInfo | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:bluetoothInternalControllerInfo | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:boot-gamma | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:boot-image-key | UINT8[16], Boot image identifier, used for hibernation. |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:boot-image | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:boot-info-payload | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:boot-signature | UINT8[20], Boot image encryption key, used for hibernation. |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:boot-switch-vars | DATA, Legacy boot image identitifer and decryption key, corresponds to IORTCVariables, removed as of 10.13.6. |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:bootercfg-once | 在首次启动后删除Booter参数覆盖,否则等同于bootercfg |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:BootCampHD | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:BootCampProcessorPstates | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:csr-data | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:disable-network | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:disable-network | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:DisplayBackgroundColor | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:edid-override | AppleGraphicsPolicy (outdated?) |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:efi-apple-recovery | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:efi-apple-payload# | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:efi-apple-payload#-data | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:efi-boot-device-data | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:efi-boot-device-data | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:efi-boot-device | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:efi-boot-file | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:efi-boot-file-data | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:efi-boot-next | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:efi-boot-payload0 | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:efi-boot-payload0-data | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:eft-boot-next-data | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:efi-boot-mkext | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:efi-boot-kernelcache | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:efi-boot-kernelcache-data | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:efi-legacy-drive-hint | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:efi-legacy-drive-hint-data | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:efiboot-perf-record | 启用boot.efi中的性能日志保存功能。性能日志会被保存到物理内存中,并通过efiboot-perf-record-data和efiboot-perf-record-size变量进行指向。从 10.15.4开始,也可以在OpenCore开启AppleDebug,以保存到OpenCore日志 |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:EFIBluetoothDelay | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:EFICapsule_Result | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:run-efi-updater | 覆盖macOS中对EFI固件更新(MultiUpdater、ThorUtil)等的支持。将此值设置为No或其他可以转换为布尔类型的值将能够禁用10.10起的macOS固件更新 |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:EnableEHCIMode | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:StartupMute | 开机时禁用固件引导提示音,8进制整数。0x00指代不静音,其他任何值(或缺少该值)表示静音 |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:ErrorToneTestVariable | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:fmm-computer-name | 当前保存的主机名称,格式为ASCII字符串 |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:fmm-mobileme-token-FMM | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:gpu-active | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:gpu-policy | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:gpu-power-prefs | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:HW_BOOT_DATA | DATA, Boot data? |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:KTSStatus | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:KTSPrevious | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:KTSResult | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:LocationServicesEnabled | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:manufacturing-enter-picker | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:nv_efi_disable | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:picker-show-delay | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:platform-uuid | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:prev-lang:kbd | ASCII String, Define default keyboard layout. Format is lang-COUNTRY:keyboard (e.g. ru-RU:19456 for Mac keyboard, also short forms ru:19456 and ru:0. Full list of keyboards in AppleKeyboardLayouts-L.dat, decoded at https://www.applelife.ru/posts/763537 |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:recovery-boot-mode | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:RemoteDisabled | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:security-mode | ASCII String, IOFireWireController security mode, setting to none may result in longer startup, full is recommended |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:SystemAudioVolume | 固件音频支持的系统音频音量等级,8进制整数。0x80指代静音,低位用于编码安装的音频编码解码器的音量范围。该值以MaximumBootBeepVolume AppleHDA layout值为上限,以避免固件中的音频播放声音过大 |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:SmcFlasherResult | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:SystemAudioVolumeDB | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:SystemAudioVolumeSaved | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:target-mode | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:tbt-dpdefault | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:tbt-options | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:UEFIWindowsBootCapable | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:usb-options | |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82:usb-cr-rec | |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:AAPL,PathProperties0000 | |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:BackgroundClear | |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:BBIF | |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:BlackMode | |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:current-network | |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:FirmwareFeatures | |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:FirmwareFeaturesMask | |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:gfx-saved-config-restore-status | |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:GR_CAUSE | |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:HardwareBootMode | |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:HW_BID | ASCII String, Hardware board-id (e.g. Mac-35C1E88140C3E6CF). Not present on real Macs, but used for SMBIOS override and faster board-id lookup in boot.efi. |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:HW_BREV | Hardware board-rev |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:HW_ICT | |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:HW_MLB | DATA, Hardware MLB. Override for MLB. Present on newer Macs (2013+ at least). |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:HW_ROM | DATA, Hardware ROM. Override for ROM. Present on newer Macs (2013+ at least). |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:HW_SSN | DATA, Hardware serial number. Override for SSN (unsure if SSN is used by anything). |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:IASCurrentInstallPhase | |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:IASInstallPhaseList | |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:IpAddr | |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:MLB | DATA, Motherboard Serial Number. |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:NetbootDefaultImage | |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:NetbootDiagnostics | |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:PickerEntryReason | DATA, 4 = right shift, 3 = left shift, 2 = remote (menu), 1 = NVRAM key (manufacturing-enter-picker) |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:ROM | |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:security-key | |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:SSN | |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:system-id | |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:UIScale | |
| AF9FFD67-EC10-488A-9DFC-6CBF5EE22C2E:AcpiGlobalVariable | UINT8[8] |
| 8D63D4FE-BD3C-4AAD-881D-86FD974BC1DF:last-oslogin-ident | |
| 8D63D4FE-BD3C-4AAD-881D-86FD974BC1DF:corestorage-passphrase | |
| F68DA75E-1B55-4E70-B41B-A7B7A5B758EA:ResetNVRam | |
| F68DA75E-1B55-4E70-B41B-A7B7A5B758EA:BootOrder | |
| F68DA75E-1B55-4E70-B41B-A7B7A5B758EA:BootNext | |
| F68DA75E-1B55-4E70-B41B-A7B7A5B758EA:DriverOrder | |
| F68DA75E-1B55-4E70-B41B-A7B7A5B758EA:target-mode | |
| F68DA75E-1B55-4E70-B41B-A7B7A5B758EA:CBF2CC32 | |
| F68DA75E-1B55-4E70-B41B-A7B7A5B758EA:3B3D2CF2 | |
| F68DA75E-1B55-4E70-B41B-A7B7A5B758EA:61B764CB | |
| F68DA75E-1B55-4E70-B41B-A7B7A5B758EA:F89C7780 | |
| F68DA75E-1B55-4E70-B41B-A7B7A5B758EA:3E6D568B | |
| F68DA75E-1B55-4E70-B41B-A7B7A5B758EA:BC9772C5 | |
| 5D62B28D-6ED2-40B4-A560-6CD79B93D366:AAPLTrbCmd | |
| FA4CE28D-B62F-4C99-9CC3-6815686E30F9:DisplayBackgroundColor | |
| FA4CE28D-B62F-4C99-9CC3-6815686E30F9:DefaultBackgroundColor | |
| FA4CE28D-B62F-4C99-9CC3-6815686E30F9:gpu-active | |
| FA4CE28D-B62F-4C99-9CC3-6815686E30F9:wireless-boot-ssid | |
| FA4CE28D-B62F-4C99-9CC3-6815686E30F9:wireless-boot-password | |
| 36C28AB5-6566-4C50-9EBD-CBB920F83843:current-network | Once existed in AppleVendor, see: https://github.com/erikberglund/AppleNVRAM/blob/master/Apple/4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14.md |
| 36C28AB5-6566-4C50-9EBD-CBB920F83843:preferred-count | |
| 36C28AB5-6566-4C50-9EBD-CBB920F83843:preferred-networks | |
| 8BE4DF61-93CA-11D2-AA0D-00E098032B8C:BootXXXX | Boot0080, Boot0081, Boot0082, BootFFFF are used |
| 8BE4DF61-93CA-11D2-AA0D-00E098032B8C:LEGACYVGAHANDLE | |
| 8BE4DF61-93CA-11D2-AA0D-00E098032B8C:agp-internal-edid | |
| 8BE4DF61-93CA-11D2-AA0D-00E098032B8C:GFXVENDOR | |
| 8BE4DF61-93CA-11D2-AA0D-00E098032B8C:_AGP_DISABLED | AppleGraphicsPolicy |
| E09B9297-7928-4440-9AAB-D1F8536FBF0A:vsmc-status | |
| F0B9AF8F-2222-4840-8A37-ECF7CC8C12E1:vsmc-key |
重置
在 Clover 和 OpenCore 之间切换时,建议重置 NVRAM。
通过 Clover
删除 Clover 的 drivers64UEFI 目录下的 EmuVariableUefi.efi,重启进入 Clover 引导项选择界面,按 F11 或 Fn+F11,直到设备自动重启。
通过 OpenCore
在 OpenCore 引导界面按空格显示隐藏条目,选择 Reset NVRAM。此法将会丢失 BIOS 中的自定引导项。
通过终端
在终端输入以下命令即可。
1 | sudo nvram -c |
判断工作状态
删除引导工具内的 VariableRuntimeDxe.efi、EmuVariableRuntimeDxe.efi 和 EmuVariableUefi.efi,删除 NVRAM 导出脚本 LogoutHook 和 RC Script,删除 EFI 分区根目录下的 nvram.plist,重启后输入以下命令。
1 | sudo nvram myvar=test |
再次重启后在终端输入以下命令,如果终端成功输出了 test,则说明主板在 Mac 下 NVRAM 正常工作,反之为不正常。
1 | nvram -p | grep -i myvar |
SIP 配置
SIP 是 Mac 的安全保护机制,包括文件系统保护、运行时保护和内核扩展签名保护。
基本概念
csr-active-config
启动时控制 SIP 的参数。
| BiT位 | 含义 |
|---|---|
| 0 | [kext]允许加载不受信任的kext(与kext-dev-mode=1等效) |
| 1 | [fs]解锁文件系统限制 |
| 2 | [debug]允许task_for_pid()调用 |
| 3 | [N/A]允许内核调试 (官方的csrutil工具无法设置此位) |
| 4 | [internal]Apple内部保留位(csrutil默认会设置此位,实际不会起作用。设置与否均可) |
| 5 | [dtrace]解锁dtrace限制 |
| 6 | [nvram]解锁NVRAM限制 |
| 7 | [N/A]允许设备配置,用于Recovery/安装环境 |
修改
SIP 可以防止将未签名的程序包注入内核,并可以防止应用程序覆盖 NVRAM。通过 Clover 注入 kext 时不要求 SIP 禁用。
通过 csrutil
在正常系统环境下,csrutil 只能查询 SIP 状态,故需进入恢复模式更改。白苹果在启动时按 command+R 进入,黑苹果在 Clover 的引导菜单进入。按照需求输入以下命令即可。
1 | # 查询状态 |
通过引导器
通过修改引导器中的 CsrActiveConfig,可修改 SIP 状态。使用 0x67 或 0x3E7 以禁用,两者参数比较如下表。
| 参数 | 有效值 |
|---|---|
| 0x67 | CSR_ALLOW_UNRESTRICTED_NVRAM |
| CSR_ALLOW_TASK_FOR_PID | |
| CSR_ALLOW_UNRESTRICTED_FS | |
| CSR_ALLOW_UNTRUSTED_KEXTS | |
| 0x3E7 | CSR_ALLOW_UNAPPROVED_KEXTS |
| CSR_ALLOW_ANY_RECOVERY_OS | |
| CSR_ALLOW_DEVICE_CONFIGURATION | |
| CSR_ALLOW_UNRESTRICTED_NVRAM | |
| CSR_ALLOW_UNRESTRICTED_DTRACE | |
| CSR_ALLOW_UNTRUSTED_KEXTS |
通过写入 NVRAM
打开终端并输入以下命令即可。
1 | sudo nvram 7C436110-AB2A-4BBB-A880-FE41995C9F82:csr-active-config=%13%00%00%00 |
EFI 分区说明
APPLE 文件夹
该文件夹用于更新实际 Mac 上的固件,无实际作用。
重定位块
即 Relocation Block,是一个分配在低位 4GB 内存的缓冲区,EfiBoot 使用该这部分内存加载内核和相关结构。在内核启动之前,重定位块的内容会被复制回位于低位的保留内存。
在没有更好的 slide(所有内存都被使用了)、强制 slide=0(通过参数或安全模式设置)、不支持 KASLR(slide,macOS 10.7 及更旧的版本)时,将使用重定位块。
使用重定位块启动时不支持休眠。
内存映射限制
Apple 内核在解析 UEFI 内存映射时存在限制。
内存映射的大小不能超过 4096 字节,因为 Apple 内核将其映射为一个 4KiB 页面。某些固件的内存映射大小非常大(大约超过 100 个条目),在其上 Apple 内核会在启动时崩溃。
内存属性表会被忽略。EfiRuntimeServicesCode 内存静态获得 RX 权限,其他内存类型则获得 RW 权限。某些固件驱动会在运行时把数据写到全局变量中,在其上 Apple 内核在调用 UEFI Runtime Services 时会崩溃,除非驱动的.data 部分有 EfiRuntimeServicesData 类型。
通用操作
填充 PCI 列表
通过 Hackintool
打开 Hackintool,选择 PCI,点击右下角的导出按钮,即可得到 PCI 列表。插入 Clover 配置文件的 Devices-Arbitrary 即可。
通过 Clover
以 Clover 为例,打开 Clover Configurator,点击 Boot.log-Generate log-Save boot.log to desktop,在桌面生成 bootlog.txt 文件。
打开 Hackintool,记住要添加的设备的设备 ID,在 bootlog.txt 中搜索此 ID,并记录同一行下形如 xx:xx.xx 的字符串,称为 pciaddr。如现有设备 NVME SSD SM961,其设备 ID 为 0xA804,pciaddr 为 04:00.00。
打开 config.plist,点击 Devices-Arbitrary,点击 PciAddr 栏左下角的+号以新建条目。其中 PciAddr 填写刚才查询的值,Comment 可记录下该设备的类型。双击此条目,并点击 Value Type 右下角的+号,添加两个条目,内容如下。
| Key | Value | Value Type |
|---|---|---|
| AAPL,slot-name | 端口位置,可任意填写,如Slot-1 | STRING |
| model | 设备名称,可任意填写,最好与源设备名一致 | STRING |
完成后保存并重启即可。注意,显卡信息无法添加到 PCI 列表中,而声卡 PCI 属性的注入会导致 layout-ID 的覆盖,从而使声卡不工作。故若需注入声卡属性,需在 config.plist 下设置 Devices-Audio-inject 为 No,在 Boot-Arguments 下添加alcid=[layout-id]。
禁用 USB2 控制器
USB2的控制器在DSDT一般命名为EHC1/EHC2。可用以下SSDT禁用EHC1和EHC2。
1 | /* |
Clover
Clover 支持从 10.5 开始的 Mac。
部分说明
kexts 注入
流程为修补 SIP 开启->修补程序以启用 XNU 僵尸代码->修补带有 kext 注入的 race condition->注入 kext->恢复 SIP 状态。该过程依赖 FSInject.efi 驱动程序,该驱动可以阻塞 OSX 缓存,并注入驱动程序到 SLE,此时屏幕上会出现很多点。该过程中 Clover 调用了自 10.7 以来从未使用过的 XNU 的僵尸代码。
在启动时,kext 的搜索顺序如下。对于重名的 kext,会按照以下顺序加载第一个 kext,无论该 kext 是否可用。
1 | EFI/CLOVER/OEM/xxx/kexts/xx.y |
配置文件
默认配置文件路径为EFI/CLOVER/config.plist。
每个主题有独特的配置文件,如EFI/CLOVER/themes/black_green/theme.plist。主题配置文件示例如下。
1 | <?xml version="1.0" encoding="UTF-8"?> |
组件
内核
CLOVERX64.efi 为 Clover 的内核。
提取
下载 Clover 的 pkg 安装包后,在 Windows 下可用 7z 打开,一路双击直到看到 Clover 相关文件即可。在 Mac 下则可用 Suspicious Package。
更新
用新的CLOVERX64.efi覆盖EFI分区中旧的EFI/CLOVER/CLOVERX64.efi即可。
ACPI
ACPI/hotpatch是SSDT库,需应用的DSDT/SSDT要放到ACPI/patched。
DSDT 搜索顺序
顺序如下。若希望每个操作系统使用不同的 DSDT,则将相应的 DSDT 放到各自系统分区的根目录即可。
1 | # 机器主板名称可在boot.log查看 |
重命名规律
Clover对ACPI的更名只对原有的ACPI表和ACPI/patched的DSDT起作用,而不对ACPI/patched的SSDT起作用。故若使用Clover的ACPI更名,则SSDT引用的变量需采用新名称而非旧名称。
DSDT 调试
若打开DSDT的Debug功能,则会在/EFI/CLOVER/ACPI/origin下找到原始DSDT和修改过的DSDT。其中DSDT-or.aml表示原始DSDT,DSDT-pa0.aml表示第一次尝试修复的DSDT,DSDT-pa1.aml表示第二次尝试修复的DSDT,后面的同理。
引导界面
快捷键
若设置了跳过引导界面,在启动时点击空格即可重新唤出。
| 快捷键 | 含义 |
|---|---|
| F1 | 帮助 |
| F2 | 保存启动日志preboot.log到EFI/CLOVER/misc/ |
| F3 | 显示被隐藏的入口 |
| F4 | 提取DSDT到EFI/CLOVER/ACPI/origin/ |
| F5 | 提取修正过的DSDT到EFI/CLOVER/ACPI/origin/ |
| F6 | 提取显卡ROM的VideoBios到EFI/CLOVER/misc/ |
| F10 | 截屏到EFI/CLOVER/misc/ |
| F11 | 重置NVRAM |
| 空格 | 制定菜单项的详细信息 |
| A | 关于Clover |
| O | Clover选项 |
| U | 退出 |
Options
ACPI patching
| 选项 | 说明 |
|---|---|
| Tables dropping | 等同于Clover Configurator中ACPI选项卡的Drop Tables |
Drop OEM _DSM |
丢弃_DSM |
| DSDT fix mask | DSDT修复遮盖,等同于Clover Configurator中ACPI选项卡的各种Fix选项 |
| Custom DSDT patches | 自定义的ACPI重命名 |
System Parameters
| 选项 | 说明 |
|---|---|
| Booter Cfg Command | 自定义的ACPI重命名 |
目录层级
Kexts
Kexts/10.x下的驱动,只有在Clover引导使用boot with injected kexts时才会加载。
Clover 不能加载已经在 SLE 里的 kexts。
Driver
r4986以后,Clover会先从EFI/CLOVER/drivers/UEFI加载驱动,若无则从EFI/CLOVER/drivers64UEFI加载。
OEM
OEM目录下可存储包含特定机型的配置文件,如EFI/CLOVER/OEM/Inspiron1525/config.plist或EFI/CLOVER/OEM/H61M-S1/UEFI/config.plist外加自定义DSDT.aml。其中有UEFI目录的为UEFI启动的配置文件。
OEM 目录下的子目录名称是根据 SMBIOS 得到的。在 Clover 启动界面按 F2 保存日志文件 preboot.log,在日志里搜索 Cloverrevision,即可得知本机 SMBIOS。
最简结构
推荐最简文件结构如下。
1 | ├── ACPI |
基本配置
隐藏启动界面
确保系统正常运作后,打开 Clover 的 config.plist,进行下列操作。
| 选项 | 操作 |
|---|---|
| 启动参数 | 取消-v |
| Hide Volume | 添加Preboot和Recovery |
| Timeout | 0以跳过倒计时(-1为停止倒计时) |
| Default Boot Volume | Mac系统盘名称或GUID号或设备路径,如HD(1,GPT,57272A5A-7EFE-4404-9CDA-C33761D0DB3C,0x800,0xFF000) |
找到Mac系统盘下的Library/Preferences/SystemConfiguration/com.apple.Boot.plist,复制到桌面后用文本编辑器打开,删除里面的-v参数,保存后拷贝回原来的位置以替换原始文件。重启,系统启动过程中将不会进入Clover界面和啰嗦模式。
若 Driver 文件夹中 APFS 驱动使用的不是 ApfsDriverLoader.efi,则下载该驱动并用该驱动替换 apfs.efi。重启,系统启动过程中将不会出现 log 代码。
主题配置
将下载好的主题文件夹以主题本身名字命名,并复制到EFI/CLOVER/themes下,在Gui-Theme下填写主题名称即可。
Mojave 主题下载链接如下。
1 | https://www.lanzous.com/i5e807e |
播放开机音乐
下载 BootAudio-Utility 工具包,链接如下。
1 | https://www.lanzous.com/i6ux0dc |
将sound.wav和sound_night.wav放到EFI/CLOVER/themes/[当前使用主题]。确保UEFI文件夹下存在AudioDxe.efi和BootChimeDxe.efi,tools文件夹中存在BootChimeCfg.efi和HdaCodecDump.efi。
进入 Clover 的 UEFI Shell,输入以下命令配置 BootChimeCfg。
1 | # fs0是Clover所在ESP分区标号 |
引导生成
在Mac下可通过pkg安装包安装。也可将整个文件夹父知道EFI分区,然后手动添加引导项,路径为/EFI/Clover/CLOVERX64.efi。
配置文件生成
1 | https://cloudclovereditor.altervista.org/cce/cce/index.php |
配置文件详解
以下不建议的配置默认折叠。
ACPI
DSDT
| 选项 | 说明 |
|---|---|
| ResetAddress | 修复重启,默认为0x64(通过PS2控制器重新启动),0x0CF9为通过PCI导轨重新启动,0x0为使用默认的FACP值(可在Clover启动界面按F2后打开日志文件查找Address得到本值,如0000000000000CF9即为0xCF9) |
| ResetValue | 修复重启,默认为0xFE(通过PS2控制器重新启动),0x06为通过PCI导轨重新启动,0x0为使用默认的FACP值(可在Clover启动界面按F2后打开日志文件查找Value to cause reset得到本值,如06即为0x06) |
| DsdtName | dsdt.aml的名称 |
| AddMCHC | 在DSDT中添加Device ID=0X0044的设备,该项启用了IMEI修复程序才会起作用(匹配Intel Clarkdale平台,有些芯片需要这个装置来解决PCI的电源管理问题,一般不启用) |
| AddIMEI | 用于intelHDxxx集成显卡,解决完美注入(需要开启fakeid-IMEI) |
| AddPNLF | 添加PNLF设置代码,实现系统良好睡眠/唤醒 |
| AddHDMI | 修复HDMI音频输出 |
| FixDarwin | 使macOS系统(Darwin)被标识为Windows |
| FixDisplay | 修复显卡代码(增加GFX0以及HDMI音频设置HADU) |
| FakeLPC | 仿冒LPC以加载AppleLPC.kext(Intel and NForce 芯片建议勾选,特别是ICH7/ICH9等老芯片组) |
| -> | 以下四条修复IRQ,消除可能导致触摸板和音频设备无法正常工作的任何潜在IRQ冲突 |
| FixIPIC | 从decice IPIC移除中断语句(IRQ(2)),有利于某些笔记本电源按钮的工作 |
| FixRTC | 从RTC装置中删除IRQ(0),作用与patch里的防RTC重置类似 |
| FixTMR | 从TMR装置中删除IRQ(8),适用于较早的dos设备 |
| FixHPET | 添加IRQ(0,8,11)代码,加载原生电源管理(10.9+无需勾选) |
| <- | |
| FixIDE | 修复在10.6时五国出现的AppleIntelPIIXATA错误(一般不启用) |
| FixSBUS | 增加SMBusControlle到设备树种,可修复因缺失SBUS控制而在系统log中出现的警告 |
| FixDisplay | 此补丁将影响所有视频卡,包括嵌入式英特尔GFX |
| FixIntelGfx | 开启对IntelGFX显卡的新补丁设置(需配合imei) |
| FixWAK | 消除警告 |
| FixADP1 | 将设备AC0重命名为ADP1,效果与直接用ACPI更名等效 |
| FixS3D | 修正_S3Dmethods函数,解决睡眠/唤醒问题 |
| FixACST | 重命名ACST,常用于华硕主板以避免冲突(ACST项对于华硕是AC适配器状态,对于苹果是CPU闲置休眠状态的功能) |
| FixRegions | 修正BIOS中的浮动区域(每次BIOS设置更改时OperatingRegions的地址会被更改的区域,在某些BIOS中会存在这种情况,即OperationRegion (GNVS, SystemMemory, 0xDE6A5E18, 0x01CD)中0xDE6A5E18会不断变化) |
| FixHeaders | 清理标头,用于MACH重启修复,使用不会带来冲突 |
| FixHDA | 修复声卡代码(修正AZAL为HDEF/HDAU,且增加layout -id和pinconfig/MaximumBootBeepVolume属性) |
| FixLAN | 修复网卡代码(注入网卡属性,修改网卡为内建) |
| FixAirport | 修复无线网卡代码(为支持Airport的无线网卡注入属性,以开启Airport功能) |
| Fixshutdown | 修复关机断电代码(主要是添加_PTS函数,判断寄存器arg0值是否为5并防止设置SLP_SMI_EN=1,华硕主板建议勾选) |
| FixUSB | 修复USB代码(包含EHCI代码,注入USB属性,帮助内建USB,是完成睡眠的关键) |
| FixFirewire | 修复1394火线代码(在火线控制装置中增加fwhub属性,一般不启用) |
| FixSATA | 内建磁盘,修复SATA代码(用ICH6的ID匹配,可修复硬盘图标显示为橙黄色问题) |
| PatchAPIC | 修复MADT表 |
| HaltEnabler | 在OSX系统启动时设置SLP_SMI_EN=0,断电重启补丁,与OpenHaltRestart.kext作用相同 |
| UseSystemIO | 在生成的_CST表中对Register (FFixedHW, 与Register (SystemIO,进行选择 |
| SlpSmiAtWake | 在_WAK方法添加SLP_SMI_EN=0,可能有助于解决UEFI引导时的睡眠和关机问题 |
| SuspendOverride | 将睡眠模式扩展为状态3、4、5 |
| ReuseFFFF | 将诸如Name (_ADR, 0xFFFF)的设备转换为(ADR,0)并重新用于注入(如FakeID) |
| Rtc8Allowed | 设置RTC长度为8字节 |
| Debug | 打开后会在EFI/CLOVER/ACPI/origin看到未修补的DSDT-or.aml、经过第一次修补尝试后的DSDT-pa0.aml、经过第二次修补尝试后的DSDT-pa1.aml,一直生成,直至系统能够启动为止 |
SSDT
| 选项 | 说明 |
|---|---|
| DeleteUnuse | 从DSDT中删除无用设备 |
| Double First State | CPU功耗相关(Ivy Bridge专用) |
| Drop OEM | 获取内建SSDT表单,删除与OEM CPU相关的SSDT以避免在为处理器生成包含P State和C State的SSDT时发生冲突,使用自定义DSDT则默认值为false,使用BIOS.aml则默认值为true(对于Sandy Bridge及较旧硬件使用,非必须勿用) |
| Generate CStates | 开启C-State功能,可以修复启动时ACPI_SMC_PlatformPlugin错误 |
| Generate PStates | 开启P-State功能 |
| Plugin Type | 值为0时用ACPI_SMC_PlatformPlugin,为1时用X86PlatformPlugin(Ivy Bridge专用) |
| PLimit Dict | 限制CPU频率,0为不开启,1为降低一级,2为降低两级 |
| UnderVolt Step | 限制CPU功率,只针对core 2,对i系列CPU无效,0为不开启,设为2可能死机 |
| Min Multiplier | 最小变频数 |
| Max Multiplier | 最大变频数 |
| smartUPS | 若打开,在系统概述的电源项中UPS已安装显示为是(只起修饰作用) |
| PatchAPIC | 在SSDT中添加CPUS=1,解决ACPI表单中NMI丢失时macOS启动可能五国的问题 |
| EnableC2/C4/C6/C7 | 在SSDT中添加_CST函数以启用C2/C4/C6/C7休眠 |
| CpuPm/Cpu0Ist | 与CPU电源管理有关 |
| DMAR | 防止Vt-d出现问题,修复10.8.2中的AppleACPIPlatform.kext启动问题 |
| MATS | 此表可能包含无法打印的字符以导致内核崩溃,打开该选项可修复ACPI_SMC_PlatformPlugin错误 |
| BGRT | 删除BIOS内置的启动图片 |
| HPET / MCFG | 获取MCFG表单 |
RenameDevices
以将_SB.PCI0.RP02.PSXS 修改为_SB.PCI0.RP02.ARPT 为例。
| 选项 | 说明 |
|---|---|
| Find Device | _SB.PCI0.RP02.PSXS |
| Rename Device | ARPT |
DropTables
通过签名和/或表标识符删除OEM ACPI表。Signature、TableID和Length都可以在原SSDT表头找到,注意Length需转换为十进制。
ResetAddress/ResetValue
默认值分别为 0x64 和 0xFE。若重启不断电,则根据 ACPI 表中 FACP.aml 的值更改,其中 ResetAddress 对应 Address,ResetValue 对应 Value to cause reset,无需转换进制。
C3 功能
开启 C3 功能需要 C3Latency 的值小于 1000(0x3e8),可在 FACP.aml 搜索 C3 Latency 得到。若大于 1000,则在 Clover 中将 C3Latency 设为 0x3E7,对于支持 Turbo 技术的 CPU 可设置为 0xFA。
BOOT
| 选项 | 说明 |
|---|---|
| DefaultVolume | 指定默认启动项,可以为卷名(Macintosh)、分区UUID(ABCDEFGH-ZXCV-ASDF-QWER-ASDFGHJKLPOIU)或设备路径(HD(1,GPT,ABCDEFGH-ZXCV-ASDF-QWER-ASDFGHJKLPOIU,0xAAA,0xBBBBB)) |
| DefaultLoader | 指定加载器路径(如BOOTX64.efi) |
| XMPDetection | 当检测到XMP内存时读取最佳预设参数或禁止检测XMP内存 |
| Debug | 生成调试输出/EFI/CLOVER/misc/debug.log(大大增加加载时间) |
| IgnoreNVRAMBoot | 忽略启动磁盘面板的设置并允许始终启动到同一操作系统 |
| Secure | 在启用安全启动时使用Clover(需要签署Clover的二进制文件并加载证书) |
| Legacy | 加载旧版本Windows/Linux |
| LegacyBiosDefaultEntry | 指定以Legacy模式启动的硬盘(在Legacy选项选中后才会显示) |
| Timeout | 0为直接跳过引导界面,-1为停止倒计时 |
| RtcHibernateAware | 在从休眠状态唤醒时启用RTC内存擦除,等同于启用AppleRTC补丁并使用HibernationFixup.kext(至少在Ivy Bridge和更高版本上使用,非必要请勿使用) |
| SignatureFixup | 为True时签名值来自休眠映像,为False时签名值为零,内核将其复制到映像中 |
Boot Graphics
| 选项 | 说明 |
|---|---|
| UI Scale | 高分辨率显示器可设置为2 |
CPU
| 选项 | 说明 |
|---|---|
| Frequency MHz | CPU频率(如3300-3.3GHz,建议不要使用) |
| BusSpeed kHz | 主频(如133330,代表133MHz) |
| Type | CPU类型(如0x0901,代表i3) |
| QPI | CPU的总线速度(如5000-i3 2120,装饰作用) |
| C2/C4/C6 | 启用CPU的Turbo功能 |
| Type | CPU类型(修饰功能) |
| Latency | 进入C3状态时发出的C3进入等待时间,最大为0x3E8(1000),0x3E9表示SpeedStep未打开,笔记本用户可用0x00FA以启用电源管理 |
Devices
| 选项 | 说明 |
|---|---|
| ResetHDA | 音频控制器初始化,在操作系统重新引导时将编解码器恢复为中立状态,以使在冷启动后无法正常工作、但重启或唤醒后仍可以工作时使用,等效于使用CodecCommander.kext,或OpenCore配置文件的UEFI-Audio-ResetTrafficClass,或启动参数alctsel=1,或使用JackFix |
| AFGLowPowerState | 消除空闲模式后音频输出上的刺耳声音,等效于DeviceProperties-Add-PCIRoot…-AFGLowPowerState-<01000000> |
| USB/ixOwnership | 使USB注入保持启用状态而仅关闭所有权修复,解决卡Enabling Legacy Matching问题(也可在BIOS启用XHCI Hand Off解决) |
| USB/AddClockID | 启用良好的深度睡眠(无法通过键盘或鼠标输入/退出),需要配合USBInjection启用,等效于DeviceProperties-Add-PCIRoot…-AAPL,clock-id |
| USB/HighCurrent | 为iPad充电等提供更多电源(不适用于10.11及更新版本),等效于DeviceProperties-Add-PciRoot…-AAPL, HighCurrent |
| UseIntelHDMI | 如果为TRUE,hda-gfx=onboard-1将被注入到GFX0和HDEF设备中,另外如果存在ATI或Nvidia HDMI设备,它们将被分配给onboard-2;如果为FALSE,则ATI或Nvidia设备以及HDAU设备(如果存在)将在onboard-1上 |
| NoDefaultProperties | 影响DSDT修复程序,并强制它们生成空的_DSM,仅适用于显示、声音、LAN和WiFi |
| IntelMaxValue | 需开启SetIntelBacklight和SetIntelMaxBacklight,建议Sandy/IvyBridge用1808,Haswell/Broadwell用2776,Skylake/Kabylake用1295 |
Gui
| 选项 | 说明 |
|---|---|
| ConsoleMode | 将控制台驱动程序切换到请求的控制台模式,供shell、boot.efi、dumpueficalls等使用,0(默认)为禁用,Min/Max为最低/最高模式,分别适合慢速/快速控制台,输入数字为选择特定模式,在boot.log中可查,非必要不打开 |
| Mouse/Mirror | 单轴负移动速度 |
| ShowOptimus | 在某些BIOS中启用或禁用Optimus的情况下为其供电 |
| KbdPrevLang | 修复旧macOS使用英语以外的语言时弹出窗口中使用混合语言的问题,会导致启动Recovery HD时始终保持英语(仅在使用AptioMemoryFix/OsxAptioFixV3且无EmuVariableUefi时可用) |
| PlayAsync | 同步声音播放 |
| CustomIcons | 自定义磁盘图标(将会在启动界面显示Mac中磁盘简介的图标) |
Entries
自定义启动项。示例如下。
| 选项 | 内容 | 说明 |
|---|---|---|
| Path | \EFI\path\to\file.efi | 启动的EFI文件路径 |
| Title | 启动项名称 | |
| Type | 启动项类型 | |
| Volume | 磁盘GUID(无用时可删除该项) | |
| Comment | 注释(可不填) |
Graphics
Clover 检测到 Intel iGPU 时,如果 config.plist 中不存在 Graphics 部分,则会自动启用 Intel 显卡注入。
| 选项 | 说明 |
|---|---|
| VRAM | 设置显存(单位为MB) |
| Load VBios | 从EFI/CLOVER/OEM/[model]/ROM或EFI/CLOVER/ROM/[vendor]_[device].rom加载视频BIOS(用于不带任何外部文件的移动Radeon卡,或向仅包含UEFI视频BIOS的卡提供旧版视频BIOS) |
| DualLink | 设为0可解决某些机型显示四分之一屏幕问题 |
| Patch VBios | 获得最高监视器分辨率支持(若分辨率不满足需求,可安装驱动CsmVideoDxe.efi) |
| HorizontalSyncPulseWidth | 注入32可解决某些机型出现八个苹果的问题 |
| VideoPorts | 显卡上的端口数量(包括TVO和/或HDMI) |
| FBName | 选择帧缓冲区名称 |
| NVCAP | 注入NVCAP(仅对Nvidia视频卡有效) |
| display-cfg | 显卡CFG(仅对Nvidia视频卡有效) |
| RadeonDeInit | 取消初始化Radeon卡(解决AMD Radeon HD6xxx及更高版本在睡眠后无法唤醒的问题) |
Kernel and Kexts Patches
| 选项 | 说明 |
|---|---|
| KernelCpu | 消除某些与旧系统中不受支持的CPU(例如Yonah,Atom或Haswell)相关的内核混乱 |
| AppleRTC | 修复RTC问题,确保重启后不会重置BIOS |
| KernelLapic | HP笔记本电脑存在Lapic问题,可以通过使用boot参数cpus=1或使用此选项来解决 |
| KernelHaswellE | 阻止Haswell-E兼容性检查 |
| ATI Connectors Controller | 修改AMD视频卡控制器从而驱动AMD卡 |
| KernelPM | 阻止写入MSR 0xe2(适用于10.8.5和10.9内核),防止在使用XCPM时在启动时引起内核恐慌 |
| AppleIntelCPUPM | 与KernelPM相同,但是使用AppleIntelCPUPowerManagement时 |
| KernelXCPM | 适用于IvyBridge CPU的XCPM补丁 |
| InfoPlistPatch | 修补kext的Info.plist |
Rt variables
| 选项 | 说明 |
|---|---|
| BooterConfig | 一般为0x28 |
| CsrActiveConfig | 0x0-启用SIP,0x3-部分禁用SIP(允许加载未签名的kexts),0x3E7-完全禁用SIP |
| ROM / UseMacAddr0 | 将板载MAC地址作为ROM |
SMBIOS
| 选项 | 说明 |
|---|---|
| Trust | 优先考虑在SMBIOS或SPD中找到的内存描述符值(Mac中的内存描述不正确时需禁用) |
| Slots AAPL injections | 填充PCI列表(一般不使用此法) |
System Paramaters
| 选项 | 说明 |
|---|---|
| BacklightLevel | 监控亮度水平,最大值为0xFFFF(全背光),最小值为0x0(无),默认值为0x0501(只有部分系统会受到此参数的影响,台式机可忽略) |
| InjectSystemID | 设置为YES时注入设备树ID(IODeviceTree:/efi/platform/system-id),NO时注入运行时变量(IODeviceTree:/options/platform-uuid) |
| InjectKexts | 是否从EFI/CLOVER/kexts/10.xx中注入kexts |
配置文件简化
自动生成
在终端输入以下命令自动生成 config.plist,位置默认在个人文件夹目录。
1 | /usr/local/bin/clover-genconfig >config.plist |
手动修改
| 选项 | 操作 |
|---|---|
| ACPI | 禁用所有更名补丁 |
| Gui | Scan处只勾选Entries和Tool以在引导界面出现UEFI Shell和Boot Options菜单 |
| Kernel and Kext Patches | 禁用四个选项卡中所有的自带项 |
| System Parameters | 删除BacklightLevel |
OcQuirks
Clover 5120 移植了 OpenCore 的 OpenRuntime.efi 以替代较旧的内存管理驱动,Big Sur 需要使用该方法驱动。需更新 Clover Configurator 至 5.16 及以上以适配新增的 OcQuirks 选项。
下载链接如下。
1 | https://github.com/ReddestDream/OcQuirks |
移除 UEFI 目录中的内存管理驱动,包括 AptioMemoryFix、OsxAptioFix3Drv、OsxAptioFix2Drv、OsxAptioFixDrv、OsxLowMemFixDrv、OsxAptioFix2Drv-free2000。
将 OcQuirks.efi、OpenRuntime.efi 和 OcQuirks.plist 放到 Clover 的 Drivers 文件夹中,重启即可。若未找到 OcQuirks,则采用以下默认值。
| Quirk | 默认值 | 说明 |
|---|---|---|
| AvoidRuntimeDefrag | True | 开启后会修复UEFI的运行服务,例如日期、时间、NVRAM、电源控制等 |
| DevirtualiseMmio | False | 开启后会减少Stolen内存占用空间,扩大Slide=N值的范围,适用于大多数主板 |
| DisableSingleUser | False | 开启后会禁止Cmd+S和-s的使用,使设备更加接近于T2白苹果 |
| DisableVariableWrite | False | 开启后会禁止NVRAM写入,在Z390/HM370等没有原生macOS支持NVRAM的主板上需要开启 |
| DiscardHibernateMap | False | 开启后会重用原始休眠内存映射,仅某些旧硬件需要 |
| EnableSafeModeSlide | True | 开启后会允许在安全模式下使用Slide值 |
| EnableWriteUnprotector | True | 开启后会在执行期间删除CR0寄存器中的写入保护 |
| ForceExitBootServices | True | 开启后会确保ExitBootServices即使在MemoryMap发生更改时也能调用成功(除非有必要,否则请勿使用) |
| MmioWhitelist | Array | 设计为用plist dict值填充,描述使用DevirtualiseMmio的Quirk时对特定固件功能至关重要的地址 |
| ProtectMemoryRegions | False | 开启后会用于修复人为制造和睡眠唤醒的问题(AvoidRuntimeDefrag已经修复了这个问题,所以尽可能避免使用这个Quirk) |
| ProtectSecureBoot | False | 避免操作系统对UEFI安全启动变量(db/dbx/PX/KEK)进行写入(主要用于避免Insyde主板和MacPro 5,1的NVRAM问题) |
| ProtectUefiServices | False | 保护UEFI服务不被固件覆盖 |
| ProvideConsoleGopEnable | True | 控制台句柄缺少图形输出协议时需要 |
| ProtectCsmRegion | False | |
| ProvideCustomSlide | True | 如果Slide值存在冲突,此选项将强制macOS使用一个伪随机值(只有在遇到OnlyN/256slidevaluesareusable!时需要) |
| RebuildAppleMemoryMap | True | 生成与macOS兼容的内存映射 |
| SetupVirtualMap | True | 开启后会将SetVirtualAddresses调用修复为虚拟地址 |
| SignalAppleOS | False | 通过OS Info将macOS加载的信息报告给其它操作系统,用于在Windows中为MacBook启用iGPU |
| SyncRuntimePermissions | True | 同步运行时环境的内存权限 |
| ShrinkMemoryMap | False | |
| QuirksProvideConsoleGopEnable | True |
主题设置
1 | https://www.insanelymac.com/forum/topic/282787-clover-v2-instructions/page/3/?tab=comments#comment-2645125 |
相关资源
配置文件在线编辑
1 | https://cloudclovereditor.altervista.org/cce/index.php |
编译源码
1 | https://www.insanelymac.com/forum/topic/282787-clover-v2-instructions/page/2/?tab=comments#comment-2250955 |
OpenCore
OpenCore 是取代 Clover 的新引导程序,从 0.6.2 版本起支持从 10.4 开始的操作系统,可使 Mac 拥有更快的启动速度。OpenCore 也支持包括 MacPro 5,1 和虚拟机在内的大部分较新的 Mac 型号。
注意,OpenCore 不支持 MBR,只支持 GPT。OpenCore 不支持基于 UEFI 的 VBIOS 补丁,但该补丁可在 Mac 中完成。
下载链接如下。
1 | https://github.com/acidanthera/OpenCorePkg/ |
OpenCore 与 Clover 一个很重要的不同在于,每个 SSDT 和 kext 都需要在 config.plist 中指定启动顺序。因此每次对 ACPI 和 Kexts 文件夹进行变动时,都需要修改 config.plist。
在 OpenCore 主界面,点击空格以显示全部驱动器及辅助选项。
【过时】AppleSupportPkg
包括 ApfsDriverLoader、FwRuntimeServices、VBoxHfs、VerifyMsrE2。
1 | https://github.com/acidanthera/AppleSupportPkg |
在 macOS 中,可通过在终端上输入以下命令获取 OpenCore 版本信息。
1 | nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:opencore-version |
部分说明
kexts 注入
流程为使现有的预链接内核和 kexts 做好注入准备->使用新的 kexts 在 EFI 环境中重建缓存->添加此新缓存。
操作系统不可知的预链接内核格式自10.6(v2)以来一直保持不变,且所涉及的修补少,因此该方法稳定性高。OpenCore还支持预链接内核(v1,10.4/10.5),无缓存,支持Mkext和KernelCollections,因此支持所有Intel版本的Mac。
不能从 OpenCore 注入 IO80211Family,否则将导致内核 panic。
SMBIOS 与 ACPI
默认情况下,OpenCore 将假定对所有操作系统注入 ACPI 和 SMBIOS 信息,以提供 BootCamp 支持。要启用仅限 Mac 的 SMBIOS 注入,需设置 Kernel-Quirks-CustomSMBIOSGuid 为 True,PlatformInfo-UpdateSMBIOSMode 为 Custom。这两个 quirk 在未来可能会无法使用。
DEBUG 和 RELEASE
DEBUG 版本可以极大地帮助调试启动问题,但是会增加一些明显的启动时间延迟。RELEASE 版本引导时间短,但是在 OpenCore 中没有提供有用的调试信息,这使得故障排除更加困难。
从 Clover 转移
搭建引导
将下载的 OpenCore 压缩包解压,打开后将 EFI 文件夹复制到 EFI 分区下。
VBoxHfs 和 AudioDxe 已和 OpenCorePkg 打包在一起,因此已经无需再额外下载 AppleSupportPkg(同时该项目已经存档),只需下载 OpenCorePkg 和 OcBinaryData 即可。
复制Docs下的Sample.plist到EFI/OC,并更名为config.plist。若模拟2011年即以前的Mac机型,则复制SampleFull.plist。按照需求,将OpenCorePkg、OcBinaryData中的驱动放入Drivers文件夹,将OcBinaryData中Resources内的文件放入Resources文件夹。
开始时配置应尽量简单,建议初始配置如下。务必保证所有 kexts 均为最新版。完成文件放置后,根据配置文件详解部分,以 Clover 的 config.plist 为基础,配置 OpenCore 的 config.plist。
1 | ├── ACPI |
【进阶】Drivers的选择
对于 UEFI 机器,使用以下驱动即可。
1 | HfsPlus |
对于 BIOS 机器则需要以下驱动。
1 | OpenUsbKbDxe |
对于使用 32 位 CPU 的机器,还需要 HfsPlus32,下载链接如下。
1 | https://github.com/acidanthera/OcBinaryData/blob/master/Drivers/HfsPlus32.efi |
【进阶】OpenRuntime的说明
若使用 OpenRuntime,且想获得和 AptioMemoryFix 类似的行为,需要使用以下 Quirks。
1 | ProvideConsoleGop(UEFI Quirk) |
kexts 转移
OpenCore 支持 Clover 下使用的大部分 kexts,但有部分 kexts 已经被集成,具体如下。
| 名称 | 备注 |
|---|---|
| NullCPUPowerManagement | 整合到Kernel-Emulate-DummyPowerManagement |
| BT4LEContinuityFixup | 整合到Kernel-Quirks-ExtendBTFeatureFlags |
消除冲突
打开终端并输入以下命令。
1 | # 删除Clover设置面板 |
完成后可重启并重置一次 NVRAM,然后通过 OpenCore 引导,查看是否成功。
若成功,则可复制Clover的kext到Kexts文件夹,并继续以下操作完善。若由于SSDT/DSDT而无法进入系统,即应当通过以下操作修复。
修改 SSDT/DSDT
由于 OpenCore 中的 SSDT、DSDT、SMBIOS 等将会对所有操作系统生效,因此需要修改 SSDT 和 DSDT 以使其只对 Mac 生效。具体方法为在代码生效部分加上以下框架。
1 | If (_OSI ("Darwin")) |
若不是自己编写的 SSDT,可直接用 OC-little 包中的 SSDT 替换。
修改后的文件在各引导器通用。为验证效果,将修改过的 SSDT 和 DSDT 放回 Clover 中,重启后在终端输入以下命令。如果日志中不存在 ACPI Error,则修改成功,可将文件复制到 OpenCore 的 ACPI 文件夹。
1 | log show --last boot | grep -Ei "ACPI" |
摆脱 ACPI Quirks
OpenCore 没有 Clover 众多的 ACPI Quirks,需要通过相关 SSDT 实现,列表如下。
| ACPI Quirks | 取代方法 |
|---|---|
| FixIPIC | OC-little声卡IRQ补丁中的SSDT-IPIC |
| FixSBUS | OC-little注入设备中的SBUS_SMBU补丁(或SSDT-SBUS-MCHC) |
| FixShutdown | OC-little的PTSWAK综合补丁,需要添加其中的EXT1插件补丁或应用_PTS到ZPTS补丁并使用FixShutdown-USB-SSDT |
| FixDisplay | 使用WhateverGreen和定制缓冲帧补丁 |
| FixIPIC | 使用SSDTTime的FixHPET-Patch out IRQ Conflicts |
| FixAirport | 使用AirportBrcmFixup |
| AddMCHC | OC-little添加缺失的设备中的SSDT-MCHC/SSDT-SBUS-MCHC |
| FixHDA | AppleALC能够处理这个问题 |
| FakeLPC | 配置文件中DeviceProperties-Add-PciRoot…-device-id |
| FixHPET/FixRTC/FixTMR | OC-little声卡IRQ补丁中的SSDT-HPET_RTC_TIMR-fix或SSDTTime的FixHPET-Patch out IRQ Conflicts |
| FixSATA | 开启OpenCore中名为ExternalDiskIcons的Quirk,也可使用innie.kext |
| FixADP1 | 见下方说明 |
| FixRTC | OC-little的声卡IRQ补丁 |
| FixTIMR | OC-little的声卡IRQ补丁 |
| AddPNLF | OC-little注入设备中的PNLF注入方法(SSDT-PNLF) |
| AddIMEI | 使用WhateverGreen或SSDT-SBUS-MCHC对于Z77上的Sandy Bridge或Z67上的IvyBridge,需用SSDT-IMEI仿冒IMEI |
| FixIntelGfx | 使用WhateverGreen |
| AddHDMI | 使用WhateverGreen |
| DropTables | 配置文件中ACPI-Delete |
| DisableASPM | 在设备属性(DeviceProperties)中分别添加相关设备的PCI总线位置并注入属性pci-aspm-default | DATA | <00> |
| HaltEnabler | 配置文件中ACPI-Quirks-FadtEnableReset设为True |
| PluginType | OC-little注入X86中的SSDT-PLUG补丁 |
| NeverHibernate | 配置文件中Misc-Boot-HibernateMode-None |
| Generate P/C States | 六代以前CPU才需要设置,可用ssdtPRGen.sh生成对应的SSDT |
| 降压和超频 | 使用sVoltageShift |
| AFGLowPowerState | 在设备属性(DeviceProperties)中注入属性AFGLowPowerState | DATA | <01000000> |
| ResetHDA | 安装JackFix以及配套的守护进程 |
| flagstate | 若设置为0,则在配置文件中的NVRAM-Add-4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14添加flagstate | Data | <00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000> |
| UIScale | 可设置为1/2,在配置文件中的NVRAM-Add-4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14添加UIScale | Data | <01(02)> |
| CPU Type | 配置文件中PlatformInfo-Generic-ProcessorType |
| HWPEnable | 使用HWPEnable.kext,手动设置MSR 0x770 |
| ForceHPET | 配置文件中UEFI-Quirks-ActivateHpetSupport |
对于 FixADP1,可直接执行重命名 change AC0_ to ADP1。根据原始 DSDT 中对 AC0_设备的定义,可能还需要用 SSDT 为 ADP1 设备注入 Name (_PRW, Package (0x02) {0x1C,0x03}),SSDT 代码如下。
1 | DefinitionBlock ("", "SSDT", 2, "SUKA", "FixADP1", 0x00001000) |
也可不进行重命名,直接使用以下 SSDT。注意该 SSDT 已注入 Name (_PRW, Package (0x02) {0x1C,0x03})。
1 | DefinitionBlock ("", "SSDT", 2, "SUKA", "FixADP1", 0x00001000) |
【进阶】对于以上SSDT的说明
以上 SSDT 用于在不使用更名补丁的情况下进行更名,模版如下。
1 | https://github.com/dortania/OpenCore-Install-Guide/blob/master/extra-files/Rename-SSDT.dsl |
修改补丁形式
KernelToPatch 和 KextToPatch 在 OpenCore 中的条目与在 Clover 有所不同。
具体而言,在 OpenCore 中,InfoPlistPatch 没有奇偶校验,MatchOS 被替换为 MinKernel 和 MaxKernel,TgtBridge 被替换为 Base。同时,KernelToPatch 和 KextToPatch 都被放置于配置文件的 Kernel-Patch 下,需要使用 Identifier 标示是适用于 Kernel 还是 Kext。若适用于 Kernel,直接填写kernel即可。若适用于 kext,则填写 kext 的标识符,如com.apple.iokit.IOGraphicsFamily。
注意以下 Quirk 会应用对应的 Patch。
1 | # Kernel Patches |
引导更新
下载新的引导包后,覆盖EFI分区中的EFI/BOOT/BOOTx64.efi,EFI/OC/OpenCore.efi,EFI/OC/Drivers/OpenRuntime,并更新其它Drivers。
通过以下脚本比较新版配置文件与旧版的区别。
1 | https://github.com/corpnewt/OCConfigCompare |
也可在终端输入以下命令进行。
1 | diff [文件1] [文件2] |
完成后可通过 ocvalidate 检查是否符合规范。在终端输入以下命令即可。
1 | cd [OC文件夹路径]/Utilties/ocvalidate |
配置文件生成
可通过工具自动生成。
1 | # Opencore Gen-X |
配置文件详解
用 Xcode 或 ProperTree 打开 config.plist,也可使用 OpenCore Configurator。根据以下内容进行配置。
【进阶】ProperTree的Clean Snapshot功能
通过该功能,可将路径下的所有 SSDT、Kexts 和 Drivers 添加到路径中。
ACPI
对 ACPI 的修补按照 Patch-Delete-Add-Quirks 的顺序执行。所有对 ACPI 的更改会在所有操作系统上生效。
Add
此处需添加EFI/OC/ACPI下的DSDT/SSDT路径。以添加电池热补丁SSDT-BAT0.aml为例,格式如下。
| 选项 | 设置 | 说明 |
|---|---|---|
| Comment | Battery | 注释(可不填) |
| Enabled | True | 启用/禁用 |
| Path | SSDT-BAT0.aml | DSDT/SSDT路径 |
注意应把 DSDT 放到最前面,而 SSDT 的顺序一般可以随意。
Delete
禁用某个 ACPI 表,常用于禁用 DAMR 来关闭 VT-d,一般无需修改。
当序列需要在多处替换的时候,注意不要指定表的签名。
| 选项 | 说明 |
|---|---|
| All | 设置为true则所有符合条件的ACPI表都会被舍弃,否则只舍弃第一个匹配到的 |
| Comment | 注释(可不填) |
| Enabled | 启用/禁用 |
| OemTableId | 将表的OEM ID匹配为此处所填的值,全部为0时忽略 |
| TableLength | 将表的大小匹配为此处所填的值,填0时忽略 |
| TableSignature | 将表的签名匹配为此处的值,全部为0时忽略 |
Patch
对 DSDT(SSDT)的内容进行查找和替换,相当于 Clover 里的改名补丁。Find 和 Replace 的长度必须完全一样,否则 ACPI 表可能会被破坏、导致系统不稳定。必要时可使用 NOP 填充剩余区域。
如 EC0->EC 补丁,书写格式如下。
| 选项 | 设置 | 说明 |
|---|---|---|
| Base | / | 为重命名补丁指定一个ACPI路径,让OC通过取得该路径的偏移量来查找(或替换)重命名补丁,留空时忽略。只有正确的绝对路径被支持,如\_SB.PCI0.LPCB.HPET,目前支持的Object类型有Device、Field、Method |
| BaseSkip | / | 在重命名补丁被应用之前跳过多少次Base指定的路径,如果将此值设置为0,补丁将会被应用于指定Base中的所有匹配 |
| Comment | change EC0 to EC | Comment |
| Count | 0 | 执行次数(0代表不限制) |
| Enabled | True | 启用/禁用 |
| Find | 4543305F | 寻找的十六进制内容 |
| Limit | 0 | 要搜索的最大字节数(0代表遍历整个ACPI表) |
| Mask | / | 查找比较期间使用的数据按位掩码,通过忽略未屏蔽(设置为零)位来进行模糊搜索。可以设置为空数据以忽略,否则此值的长度必须和Replace的长度相等 |
| OemTableId | / | 将表的OEM ID匹配为此处所填的值,全部为0时忽略 |
| Replace | 45435F5F | 替换为的十六进制内容 |
| ReplaceMask | / | 替换数据期间使用的数据按位掩码,通过忽略未屏蔽(设置为零)位来进行模糊搜索。可以设置为空数据以忽略,否则此值的长度必须和Replace的长度相等 |
| Skip | 0 | 跳过前N个,0表示不跳过 |
| TableLength | 0 | 将表的大小匹配为此处所填的值,填0时忽略 |
| TableSignature | / | 将表的签名匹配为此处的值,全部为0时忽略 |
通过 Count 和 Skip 的应用,可以达成 Clover 下 Tgtbridge 的效果。具体而言,若想将 DSDT 中的某一特定字段重命名,则可在 Skip 下填写在该字段之前有多少个同名字段,在 Count 下填写该改名规则需执行几次。如现需将 DSDT 中的第 54 和 55 个_PRW 改为 XPRW,则 Skip 填 53,Count 填 2。
对于华擎、华硕、微星主板,可能会遇到 RTC 问题而无法进入系统。此时可应用以下补丁。
| 选项 | 设置 |
|---|---|
| Comment | RTC fix |
| Count | 0 |
| Enabled | True |
| Find | A00A9353 54415301 |
| Limit | 0 |
| Mask | / |
| OemTableId | / |
| Replace | A00A910A FF0BFFFF |
| ReplaceMask | / |
| Skip | 0 |
| TableLength | 0 |
| TableSignature | / |
Quirks
| 选项 | 设置 | 说明 |
|---|---|---|
| FadtEnableReset | NO | 在FADT表中提供寄存器复位标志,用于在旧硬件上修复重启和关机(如果遇到关机变重启可尝试打开,非必要不启用) |
| NormalizeHeaders | NO | 清除ACPI头字段以解决macOS ACPI实现错误导致的引导崩溃(macOS 10.13/某些主板需要打开) |
| RebaseRegions | NO | 尝试试探性地重新定位ACPI内存区域,使用自定义DSDT则必须开启(换硬件、升级BIOS等对硬件的操作会对ACPI表产生影响) |
| ResetHwSig | NO | 将FACS表中HardwareSignature的值重置为0,休眠相关(重启后因无法维持硬件签名而导致从休眠中唤醒的硬件需要开启,台式机不需要) |
| ResetLogoStatus | NO | 将BGRT表中Displayed状态字段重置为 false,适用于提供BGRT表、但随后无法处理屏幕更新的固件,无法在有BGRT表的系统上显示OEM Windows标志的硬件需要开启 |
Booter
MmioWhitelist
描述在启用 DevirtualiseMmio 这个 Quirk 时特定固件能够运作的关键地址。
默认的第一项是为 Haswell 芯片提供的内存寻址修复,第二项是 ACPI、PCI device 同时释放到内存时发生 0x1000 内存地址被占用而卡在 PCI Configration 的问题修复。一般无需修改,如果开机卡在 PCI…可以尝试开启 Item 1 下的 Patch。
| 选项 | 说明 |
|---|---|
| Address | 排除在外的MMIO地址,其内存描述符应被DevirtualiseMmio虚拟化(保持不变),该值所在的区域会被分配一个虚拟地址,在操作系统运行期间固件能够直接与该内存区域进行通信。这里写入的地址必须是内存映射的一部分,具有EfiMemoryMappedIO类型和EFI_MEMORY_RUNTIME属性(最高 bit),可使用调试日志找到可能的地址 |
| Comment | 注释(可不填) |
| Enabled | 启用/禁用 |
Patch
在启动器中执行二进制补丁。
| 选项 | 说明 |
|---|---|
| Arch | 启动器补丁架构,可为Any/i386/x86_64 |
| Comment | 注释(可不填) |
| Count | 执行次数(0代表不限制) |
| Enabled | 启用/禁用 |
| Find | 要查找的数据,必须与Replace的大小相等 |
| Identifier | Apple代表macOS启动器(通常是boot.efi),带有后缀的名称(如 bootmgfw.efi)代表特定的启动器,Any或空字符串(默认)代表任何启动器 |
| Limit | 搜索的最大字节数,设置为0来查找整个启动器 |
| Mask | 在查找比较的过程中使用数据位掩码。允许通过忽略未被屏蔽的bit(设置为0)进行模糊搜索。若留空则代表忽略,否则其大小必须等于Find |
| Replace | 一个或多个字节的替换数据 |
| ReplaceMask | 替换时使用的数据位掩码。允许通过更新掩码(设置为非0)来进行模糊替换。若留空则代表忽略,否则其大小必须等于Replace |
| Skip | 在替换前要跳过的发现事件数 |
Quirks
| 选项 | 内容 | 说明 |
|---|---|---|
| AllowRelocationBlock | NO | 允许通过重定位块来启动macOS,需要同时启用ProvideCustomSlide(必需)和AvoidRuntimeDefrag(通常情况下)。不兼容某些硬件及macOS 11,可能需要用EnableSafeModeSlide来替代 |
| AvoidRuntimeDefrag | YES | 修复UEFI Runtime服务,提供对可变存储的支持(日期/时间/NVRAM/电源控制等)。除Apple和VMware固件外,都需要启用此选项 |
| DevirtualiseMmio | NO | 从选定的MMIO区域中删除Runtime属性,通过删除已知内存区域的Runtime bit减少Stolen内存占用空间,扩大Slide=N值的范围,通常释放64-256MB的内存,具体数值会显示在调试日志中。若要添加slide=1以使用连续性的内存注入方式则关闭,不一定与目标主板兼容,通常对所有固件都有用(除了一些非常古老的固件,如Sandy Bridge) |
| DisableSingleUser | NO | 禁用单用户模式,更接近基于T2的计算机 |
| DisableVariableWrite | YES | 禁止NVRAM写入,需要OpenRuntime.efi提供的OC_FIRMWARE_RUNTIME协议的实现,在Z390/HM370等没有原生macOS支持NVRAM的主板上需要开启 |
| DiscardHibernateMap | NO | 开启后会重用原始休眠内存映射,强制XNU内核忽略新提供的内存映射、认定设备从休眠状态唤醒后无需对其更改。仅某些旧硬件需要(Insyde固件的Ivy Bridge笔记本电脑,如Acer V3-571G),引导Windows时必须启用(因为Windows要求S4唤醒后保留运行内存的大小和位置) |
| EnableSafeModeSlide | NO | 修补引导加载程序以在安全模式下启用KASLR,允许在安全模式下使用Slide值(默认情况下安全模式会使用slide=0),只有当ProvideCustomSlide启用后才可以启用本Quirks。启动到安全模式失败时启用 |
| EnableWriteUnprotector | YES | 在执行期间删除CR0寄存器中的写入保护(WP bit),绕过其代码页的RX权限,保证NVRAM能正常写入而不受到UEFI内的一些服务的影响。需要配合OpenRuntime.efi里的OC_FIRMWARE_RUNTIME协议来实现,可能会破坏固件安全性,若固件支持内存属性表MAT,应优先使用RebuildAppleMemoryMap |
| ForceExitBootServices | NO | 在失败时用新的内存映射(Memory Map)重试ExitBootServices,确保ExitBootServices即使在MemoryMap发生更改时也能调用成功,让非常老旧的主板也能使用内存寻址(是否启用这个Quirk取决于是否遇到了Early Boot故障,非必要勿使用) |
| ProtectMemoryRegions | NO | 与AvoidRuntimeDefrag类似,保护内存区域免于不正确的读写(是否启用这一Quirk取决于是否遇到了休眠、睡眠无法唤醒、启动失败或其他问题,一般只有非常旧的固件才需要启用) |
| ProtectSecureBoot | YES | 保护UEFI安全启动被写入,尝试从操作系统写入db、dbx、PK和KEK时生成报告。避免碎片整理导致的NVRAM相关问题,如Insyde或MacPro5,1 |
| ProtectUefiServices | YES | 保护UEFI服务不被固件覆盖。某些现代固件(包括硬件和 VMware 之类的虚拟机)可能会在加载驱动及相关操作的过程中,更新UEFI服务的指针,这一行为会直接破坏其他影响内存管理的Quirk,如DevirtualiseMmio、ProtectMemoryRegions、RebuildAppleMemoryMap。该Quirk解决Z390系列主板卡开机卡++++的问题(在VMware上是否需要开启这个Quirk取决于是否有Your Mac OS guest might run unreliably with more than one virtual core.这样的消息) |
| ProtectCsmRegion | NO | 开启后会用于修复人为制造和睡眠唤醒的问题(AvoidRuntimeDefrag已经修复了这个问题,故避免使用) |
| ProvideCustomSlide | YES | 为低内存设备提供自定义KASLR slide 值,如果Slide值存在冲突,此选项将强制macOS使用一个伪随机值,同时确保slide参数不会被传递给操作系统(遇到Only N/256 slide values are usable!时需要) |
| ProvideMaxSlide | YES | 当更大的KASLR slide值不可用时,手动提供最大KASLR slide值。当ProvideCustomSlide启用、并且随机化的slide落入不可用的范围时,如果出现随机的启动失败,则有必要开启这个Quirk |
| RebuildAppleMemoryMap | NO | 重新生成内存地图来匹配苹果系统,遇到内存问题导致无法开机时可尝试使用。与EnableWriteUnprotector存在冲突关系,若开启此项则需关闭另一项,同时此项需要与SyncRuntimePermissions搭配使用。根据是否遇到第一阶段启动失败决定是否启用这一Quirk,在支持内存属性表MAT的平台上使用,在使用OpenDuetPkg时一般不需要启用这个Quirk,但如果要启动macOS 10.6或更早的版本则可能需要启用 |
| SetupVirtualMap | YES | 建立虚拟内存并对物理内存进行映射,将SetVirtualAddresses调用修复为虚拟地址(是否启用这个Quirk 取决于是否遇到了Early Boot故障,具有内存保护支持的新固件不支持该Quirk) |
| ShrinkMemoryMap | NO | 有巨大且不兼容内存映射的主板需要开启(非必要勿使用) |
| SignalAppleOS | NO | 通过OS Info将macOS加载的信息报告给其它操作系统。总是向OS Info报告启动的是macOS,适用于Mac设备,用于在Windows中启用iGPU |
| SyncRuntimePermissions | NO | 更新运行时环境的内存权限。通过更新内存映射和内存属性表修正硬件在注入内存时无法注入权限的问题。是否开启这一Quirk取决于是否遇到Early Boot故障,一般此类问题存在2018年后的主板 |
注意,当 AvoidRuntimeDefrag 不起作用时,可使用以下内核补丁。
| 键 | 类型 | 值 |
|---|---|---|
| Comment | String | AvoidRuntimeDefrag workaround |
| Base | String | _acpi_count_enabled_logical_processors |
| Count | Integer | 1 |
| Enabled | Boolean | True |
| Find | Data | |
| Identifier | String | Kernel |
| Limit | Integer | 0 |
| Mask | Data | |
| MaxKernel | String | |
| MinKernel | String | 20.0.0 |
| Replace | Data | B804000000C3 |
| ReplaceMask | Data | |
| Skip | Integer | 0 |
DeviceProperties
Add
添加的属性只有在不存在且未被屏蔽的情况下才会被设置。
此处内容可以用 Hackintool 生成后直接复制,注意设备路径的修改。主要路径如下。
| 路径 | 用途 |
|---|---|
| PciRoot(0x0)/Pci(0x1f,0x3) | 注入音频Layout ID |
| PciRoot(0x0)/Pci(0x2,0x0) | 注入缓冲帧补丁 |
主要属性列表如下。
1 | # 硬盘 |
可通过设置外置硬盘的 build-in 属性为 00 以设置为内建。其中外置硬盘的设备路径可以通过 gfxutil 找到,具体为在系统 PCI 列表中找到类似 AHCI Controller 或 NVM Express Controller 的 PCI 名称,然后输入以下命令。
1 | # pci0000,0000为上面找到的PCI名称 |
添加该条目,并设置以下键即可。
| 键 | 类型 | 值 |
|---|---|---|
| built-in | Data | AA== |
Delete
删除/屏蔽设备属性,等同于Clover里的ACPI重命名_DSM→XDSM=>TgtBridge。一般无需修改。
常见属性
| 属性 | 说明 |
|---|---|
| device-id | 设备标识符 |
| vendor-id | 供应商标识符 |
| AAPL,ig-platform-id | Intel GPU缓冲帧标识符,用于在Ivy Bridge上选择缓冲帧区域 |
| AAPL,snb-platform-id | Intel GPU缓冲帧标识符,用于在Sandy Bridge上选择缓冲帧区域 |
| layout-id | AppleHDA的音频布局 |
Kernel
Add
此处需要填写 kexts 的具体内容,OpenCore 会按照顺序执行,故需确保 Lilu.Kext 始终在第一位。其他优先级高的为 Lilu 的插件,如 VirtualSMC、AppleALC、WhateverGreen 等。
若不知道 kexts 的加载顺序或加载内容,可在 Clover Configuration 中选择 boot.log 选项卡,并点击 Generate log 生成启动日志,在日志中搜索对应 kext 即可。
也可以通过检查 Kext 驱动中 Info.plist 的 OSBundleLibraries 值的方法来确定其依赖驱动的加载顺序,OSBundleLibraries 中的任何依赖驱动都必须在此 Kext 之前加载。
| 选项 | 内容 | 说明 |
|---|---|---|
| Arch | Any | kext架构(Any/i386/x86_64) |
| BundlePath | Lilu.kext | kext的名称,对于直接位于EFI/OC/Kexts下的kext直接填写名字,对于某一个内核拓展的子拓展则填写具体路径 |
| Comment | 注释(可不填) | |
| Enabled | YES | 启用/禁用 |
| ExecutablePath | Contents/MacOS/Lilu | 隐藏在kext中的实际可执行文件的路径,可通过右键单击并选择显示包内容 查看,通常为 Contents/MacOS/[kext]),没有可执行文件的空壳kexts则留空(如USBPorts.kext) |
| MaxKernel | 支持的最大系统版本(19为10.15,18为10.14),一般留空 |
|
| MinKernel | 支持的最小系统版本 | |
| PlistPath | Contents/Info.plist | 隐藏在kext中的Info.plist路径 |
当 Plugins 内有 kexts 时,需一并加载,格式如下。
| 选项 | 内容 |
|---|---|
| BundlePath | A.kext/Contents/PlugIns/B.kext |
| ExecutablePath | Contents/MacOS/B |
| PlistPath | Contents/Info.plist |
此处需注意 VoodooPS2Controller 与 VoodooI2C 的注入。注入顺序如下,注意需放到 kexts 加载的最后。
1 | VoodooPS2Controller.kext |
Block
屏蔽系统里的 kext。
| 选项 | 内容 | 说明 |
|---|---|---|
| Arch | Any | kext架构(Any/i386/x86_64) |
| Comment | 注释(可不填) | |
| Enabled | YES | 启用/禁用 |
| Identifier | Kext Bundle标识符 | |
| MaxKernel | 支持的最大系统版本(19为10.15,18为10.14),一般留空 |
|
| MinKernel | 支持的最小系统版本 |
在 Identifier 中输入 kext 的捆绑包标识符即可,一般为com.apple.driver.[kext],可在关于本机-系统报告…-功能扩展中查到。部分 kext 的捆绑包标识符如下。
| 名称 | 捆绑包标识符 | 备注 |
|---|---|---|
| AppleIntelLpssI2C | com.apple.driver.AppleIntelLpssI2C | |
| AppleIntelLpssI2CController | com.apple.driver.AppleIntelLpssI2CController | |
| AppleRTC | com.apple.driver.AppleRTC | 禁用RTC关机校验(Base为__ZN8AppleRTC14updateChecksumEv) |
Emulate
一般无需使用。
EAX、EBX、ECX、EDX 值的序列,用来取代 XNU 内核中的 CPUID(1)调用。通常来讲只需要处理 EAX 的值,因为它代表完整的 CPUID,剩余的字节要留为 0。
用于对不支持的 CPU 型号启用支持(如奔腾、赛扬),或对不支持的 CPU Variant 启用 XCPM 支持,或对电源管理不支持(比如虚拟机)的 CPU 型号启用支持。
| 选项 | 内容 | 说明 |
|---|---|---|
| CpuidMask | FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 | 化为二进制,某位为1代表该位数值需用CpuidData的对应数值替换,否则不需要 |
| CpuidData | C3 06 03 00 00 00 00 00 00 00 00 00 00 00 00 00 | CPU的被仿冒位(填写时需要使用小端规则,即该示例对应的CPUID为0x0306C3) |
| DummyPowerManagement | NO | 禁用AppleIntelCpuPowerManagement原生电源管理,用于更好的替代NullCpuPowerManagement.kext,AMD CPU一般需要使用 |
| MaxKernel | 模拟CPUID,并在指定的或更低的macOS版本上使用DummyPowerManagement | |
| MinKernel | 模拟CPUID,并在指定的或更高的macOS版本上使用DummyPowerManagement |
仿冒示例如下。
| 选项 | 内容 |
|---|---|
| Haswell-E(0x0306F2) to Haswell(0x0306C3) | |
| CpuidMask | FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 |
| CpuidData | C3 06 03 00 00 00 00 00 00 00 00 00 00 00 00 00 |
| Broadwell-E (0x0406F1) to Broadwell (0x0306D4) | |
| CpuidMask | FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 |
| CpuidData | D4 06 03 00 00 00 00 00 00 00 00 00 00 00 00 00 |
Force
如果内核驱动没有被缓存,则从磁盘强制加载内核驱动。
依赖其他驱动的驱动程序不能被缓存,该部分着重解决了这种驱动程序注入的难点。这个问题会映像到旧的操作系统,在旧的操作系统中存在各种依赖性的 Kext,比如 IOAudioFamily 和 IONetworkingFamily,可能默认不存在于内核缓存中。内核驱动的加载是有顺序的,因此依赖驱动应该排在前面。
Force 的驱动不会被检查,因此,使用安全启动时不应使用此功能。此功能可能无法在较新的操作系统的加密分区上工作。
| 选项 | 内容 | 说明 |
|---|---|---|
| Arch | Any | kext架构(Any/i386/x86_64) |
| BundlePath | System/Library/Extensions/IONetworkingFamily.kext | kext路径 |
| Comment | 注释(可不填) | |
| Enabled | YES | 启用/禁用 |
| ExecutablePath | Contents/MacOS/IONetworkingFamily | 隐藏在kext中的实际可执行文件的路径 |
| Identifier | com.apple.iokit.IONetworkingFamily | kext 标识符 |
| MaxKernel | 支持的最大系统版本(19为10.15,18为10.14),一般留空 |
|
| MinKernel | 支持的最小系统版本 | |
| PlistPath | Contents/Info.plist | 隐藏在kext中的Info.plist路径 |
Patch
用于添加系统内核补丁、Kext 补丁、AMD CPU 补丁等,等同于 Clover 的 KextToPatch 和 KernelToPatch。默认的第一、二项用于修复 Apple RTC,若华硕主板出现 RTC 错误而无法开机,可以尝试打开这两个中的其中一个(一次只用一个)以修复华硕主板重启丢失 BIOS 设置以及需要按 F1 跳过安全模式的问题。
| 选项 | 内容 | 说明 |
|---|---|---|
| Arch | Any | kext架构(Any/i386/x86_64) |
| Base | / | 通过获取所提供的Symbol名称的地址来选择Symbol匹配的Base进行补丁查找(或直接替换),可设置为空字符串以忽略 |
| Comment | Comment | |
| Count | 0 | 执行次数(0代表不限制) |
| Enabled | True | 启用/禁用 |
| Find | 寻找的十六进制内容。可留空,在Base处直接替换。若不留空,其大小必须等于Replace | |
| Identifier | Kext Bundle标识符 | |
| Limit | 要搜索的最大字节数(0代表遍历整个ACPI表) | |
| Mask | / | 查找比较期间使用的数据按位掩码,通过忽略未屏蔽(设置为零)位来进行模糊搜索。可以设置为空数据以忽略,否则此值的长度必须和Replace的长度相等 |
| MaxKernel | 支持的最大系统版本(19为10.15,18为10.14),一般留空 |
|
| MinKernel | 支持的最小系统版本 | |
| Replace | 替换为的十六进制内容 | |
| ReplaceMask | / | 替换数据期间使用的数据按位掩码,通过忽略未屏蔽(设置为零)位来进行模糊搜索。可以设置为空数据以忽略,否则此值的长度必须和Replace的长度相等 |
| Skip | 0 | 跳过前N个,0表示不跳过 |
Quirks
| 选项 | 内容 | 说明 |
|---|---|---|
| AppleCpuPmCfgLock | NO | 禁用AppleIntelCPUPowerManagement.kext中的PKG_CST_CONFIG_CONTROL (0xE2)修改,从而避免早期Kernel Panic。若设备的CFG-Lock开启则设置为YES(尽可能用Grub关闭BIOS的CFG-Lock以避免开启,与Clover的AppleIntelCPUPM对应) |
| AppleXcpmCfgLock | NO | 禁用XNU内核对PKG_CST_CONFIG_CONTROL (0xE2)修改,从而避免早期Kernel Panic。若设备的CFG-Lock开启则设置为YES,10.7及更旧系统无需使用(与Clover的KernelPM对应) |
| AppleXcpmExtraMsrs | NO | 对于没有XCMP支持的设备,禁用对选定CPU的多MSR访问。通常将其与Haswell-E/Broadwell-E/Skylake-SP和类似CPU的Emulate结合使用,10.7及更旧系统无需使用(与Clover的KernelXCPM对应) |
| AppleXcpmForceBoost | NO | 强制拉高睿频,建议在长期高负载的专业设备上使用,Xeon系列的处理器开启这个选项会受益,10.7及更旧系统无需使用 |
| CustomSMBIOSGuid | NO | 对UpdateSMBIOSMode自定义模式执行GUID修补,用于戴尔笔记本电脑(等同于Clover的DellSMBIOSPatch) |
| DisbaleIOMapper | NO | 禁用XNU(VT-d)中的IOMapper支持,需要绕过VT-d且BIOS中无法禁用时使用,10.7及更旧系统无需使用(相比直接在ACPI表中删除DMAR的做法,本Quirk更好) |
| DisableLinkeditJettison | NO | 禁止丢弃__LINKEDIT,让Lilu.kext和其他一些功能以最佳性能运行,而不需要keepsyms=1启动参数,适用于11及更高系统 |
| DisableRtcChecksum | NO | 越过两条RTC检查0x58及0x59(一般卡RTC应当先使用RTCMemoryFixup.kext而非开启该项,https://github.com/acidanthera/RTCMemoryFixup) |
| ExtendBTFeatureFlags | NO | 将FeatureFlags设置为0x0F,以实现蓝牙的全部功能(包括连续互通功能),用于替代BT4LEContinuityFixup.kext,适用于10.8及更高系统 |
| ExternalDiskIcons | NO | 硬盘图标补丁,修补AppleAHCIPort.kext图标,使macOS将所有AHCI存储设备显示为内部硬盘(macOS将内部硬盘视为外接硬盘时使用,对于Z87及以下版本的NVMe,只需通过DeviceProperties添加内置属性) |
| ForceSecureBootScheme | NO | 强制采用x86方案进行IMG4核查,在虚拟机上使用x86legacy以外的SecureBootModel时需要开启此选项,适用于11及更高系统 |
| IncreasePciBarSize | NO | 将IOPCIFamily中32位PCI Bar的大小从1GB增加到4GB,适用于10.10及更高系统(在BIOS中启用Above4GDecoding是一种更加干净和安全的方法,某些X99板可能需要开启,这些主板通常会在IOPCIFamily上遇到内核崩溃) |
| LapicKernelPanic | NO | 禁用由AP核心lapic中断造成的内核崩溃,通常用于惠普电脑,适用于10.6(64-bit)及更高系统(等同于Clover的KernelLapic) |
| LegacyCommpage | NO | 默认的64位commpage bcopy的实现需要SSSE3,这个选项把它替换为不需要SSSE3的实现,防止因不存在不需要SSSE3的64位bcopy 函数而导致的commpage no match for last Panic,适用于10.4-10.6 |
| PanicNoKextDump | YES | 在发生内核崩溃时阻止输出Kext列表,适用于10.13及更高系统(与Clover的PanicNoKextDump对应) |
| PowerTimeoutKernelPanic | YES | 修复macOS Catalina中由于设备电源状态变化超时而导致的内核崩溃,适用于10.15及更高系统(相当于启动参数setpowerstate_panic=0) |
| SetApfsTrimTimeout | -1 | 为SSD上的APFS文件系统设置微秒级的trim超时时间,可通过设置为一个非常高的值如4294967295以确保所有区块均被trim处理,或设置一个非常低的值如999以禁止trim操作,适用于10.14及更高系统 |
| ThirdPartyDrives | NO | 修补IOAHCIDeleteStorage.kext,以在第三方驱动器启用TRIM、硬盘休眠等功能,适用于10.6及更高系统(NVMe SSD通常无需这一修改,AHCI SSD,如SATA SSD可使用trimforce) |
| XhciPortLimit | NO | 修补AppleUSBXHCI.kext、AppleUSBXHCIPCI.kext、IOUSBHostFamily.kext以移除15端口限制,适用于10.11及更高系统(不建议依赖,建议定制USB) |
Scheme
通过参数来定义内核空间的操作模式,对于旧版 macOS 操作系统尤为重要。
FuzzyMatch
使用校验值不同的 kernelcache。
在 10.6 和更早的版本中,kernelcache 文件名有一个校验值,由于 ACPI 或硬件的特殊性,UEFI 和 macOS 的 EfiBoot 设备路径不同,使得 kernelcache 的校验和总是不同。这一设置可以在无后缀的 kernelcache 不可用时,将最新的 kernelcache 与合适的架构进行匹配,从而提高 10.6 在多个平台上的启动性能。
KernelArch
优先选择指定的内核架构,选项如下。按 x86_64、i386、i386-user32 顺序选择参数可以获得最佳的架构支持。
不支持用热键 3+2 和 6+4 来选择偏好架构,因为这个热键由 EfiBoot 处理,很难正确地检测到。
| 选项 | 含义 |
|---|---|
| Auto | 自动选择 |
| i386 | 32位内核 |
| i386-user32 | 32位内核,并在64位处理器上强制使用32位用户空间,对应-legacy内核启动参数(对于64位固件上运行的10.4和10.5系统不可用,一般用于不支持SSSE3指令集的64位处理器如奔腾,因为macOS默认64位处理器支持SSSE3) |
| x86_64 | 64位内核 |
KernelCache
优先选择指定的内核缓存(Kernel Cache)类型,可为 Auto、Cacheless、Mkext、Prelinked。
可用内核缓存类型及其当前在 OpenCore 中的支持情况列表如下。
| 系统版本 | i386 NC (NoCache) | i386 MK (Mkext) | i386 PK (Prelinked) | x86_64 NC (NoCache) | x86_64 MK (Mkext) | x86_64 PK (Prelinked) | x86_64 KC |
|---|---|---|---|---|---|---|---|
| 10.4-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 |
Misc
BlessOverride
| 选项 | 内容 | 说明 |
|---|---|---|
| Item 0(String) | \EFI\Microsoft\Boot\bootmgfw.efi | 用于覆盖Windows的bootmgfw.efi的位置,以便识别Windows引导项,OpenCore和Windows的引导文件在同一硬盘的同一ESP分区下时使用 |
| Item 1(String) | \EFI\debian\grubx64.efi | 用于Debian引导 |
Boot
总述
| 选项 | 内容 | 说明 |
|---|---|---|
| ConsoleAttributes | 0 | 给引导选择界面添加特效,填入字体颜色和背景颜色的值的16进制之和 |
| HibernateMode | None | 与系统内的休眠模式配合,引导进系统会还原休眠前的状态,会影响SSD寿命(None-关闭休眠支持,Auto-自动检测RTC和NVRAM模式,RTC-从RTC检测,NVRAM—从NVRAM检测) |
| HideAuxiliary | YES | 隐藏辅助条目,包括macOS恢复分区、在自定义引导项时定义为Auxiliary的引导项、在 Tools中添加的工具(如Clean NVRAM)、macOS时间机器分区 |
| LauncherOption | Disabled | 在固件偏好设置中注册启动器选项(Disabled-禁用,Full-在UEFI变量存储中创建或更新最高优先级的启动项,必须同时开启RequestBootVarRouting,Short-创建一个短的、非完整的启动项,对于某些无法处理完整设备路径的固件如Insyde很有用) |
| LauncherPath | Default | LauncherOption的启动引导路径(Default-引导OpenCore.efi,其它路径如\EFI\Launcher.efi可用来提供自定义加载器) |
| PickerAttributes | 0 | 设置开机引导菜单的属性(0x0004-简化主题图标下的文字,0x0008-使用老式的图标) |
| PickerAudioAssist | NO | 朗读屏幕上选择项的内容 |
| PollAppleHotKeys | NO | 允许在引导过程中使用苹果原生快捷键Modifier Hotkey(需要与Quirk中KeySupport=Yes或UsbKbDxe.efi结合使用,具体体验取决于主板固件,可能会导致选择分区时卡住) |
| ShowPicker | YES | 显示OpenCore的UI,用于查看可用引导项(可以在启动时按住OPT键或连续点按Escape来实现) |
| TakeoffDelay | 0 | 在启动前延迟n毫秒,提升键盘快捷键识别的正确率,比如启动到恢复模式(n的有效范围为5000-10000,32bit以内的正整数) |
| Timeout | 0 | 设置引导项等待时间(0为关闭倒计时,相当于Clover的-1),设置为NO可以跳过倒计时 |
| PickerMode | Builtin | 使用OpenCore的默认GUI(External-使用其它GUI,Apple-使用原生GUI,黑苹果不支持) |
| PickerVariant | Auto | 选择启动管理器所使用的图标集(Auto—基于DefaultBackground的设置自动选择相应的图标集,Default—常规图标集,无前缀,Old—复古图标集,文件名有Old前缀,Modern—新颖图标集,文件名有Modern前缀,其他值—自定义图标集,需要在Resources中添加相应图标集) |
| ConsoleMode | Max | 设置控制台模式为最大允许分辨 |
| ConsoleBehaviourOs | ForceGraphics | 修复OC引导界面 |
| ConsoleBehaviourUi | ForceText | 修复OC引导界面 |
| HideSelf | NO | 在OpenCore的启动选择中隐藏自身EFI分区的启动项 |
| Resolution | 1920x1080 | 屏幕的最大分辨率 |
ConsoleAttributes
ConsoleAttributes 的颜色代码含义如下。
| 颜色代码 | 宏定义 | 指代颜色 |
|---|---|---|
| 字体颜色 | ||
| 0x00 | EFI_BLACK | 黑 |
| 0x01 | EFI_BLUE | 蓝 |
| 0x02 | EFI_GREEN | 绿 |
| 0x03 | EFI_CYAN | 青 |
| 0x04 | EFI_RED | 红 |
| 0x05 | EFI_MAGENTA | 品红 |
| 0x06 | EFI_BROWN | 棕 |
| 0x07 | EFI_LIGHTGRAY | 浅灰 |
| 0x08 | EFI_DARKGRAY | 深灰 |
| 0x09 | EFI_LIGHTBLUE | 浅蓝 |
| 0x0A | EFI_LIGHTGREEN | 浅绿 |
| 0x0B | EFI_LIGHTCYAN | 浅青 |
| 0x0C | EFI_LIGHTRED | 浅红 |
| 0x0D | EFI_LIGHTMAGENTA | 浅品红 |
| 0x0E | EFI_YELLOW | 黄 |
| 0x0F | EFI_WHITE | 白 |
| 背景颜色 | ||
| 0x00 | EFI_BACKGROUND_BLACK | 黑 |
| 0x10 | EFI_BACKGROUND_BLUE | 蓝 |
| 0x20 | EFI_BACKGROUND_GREEN | 绿 |
| 0x30 | EFI_BACKGROUND_CYAN | 青 |
| 0x40 | EFI_BACKGROUND_RED | 红 |
| 0x50 | EFI_BACKGROUND_MAGENTA | 品红 |
| 0x60 | EFI_BACKGROUND_BROWN | 棕 |
| 0x70 | EFI_BACKGROUND_LIGHTGRAY | 浅灰 |
PickerAttributes
PickerAttributes 可以用属性掩码来设置引导菜单的不同属性,其中掩码包含 OpenCore 的预留值(BIT0-BIT15)和 OEM 特定值(BIT16-BIT31)。
预留值 0x0001 为 OC_ATTR_USE_VOLUME_ICON,表示为启动项提供自定义图标。OpenCore 会优先加载以下自定义图标,不存在时回退到默认图标。启用此功能后可能会难以区分外部可移除硬盘和内部不可移除硬盘的图标。
| 选项 | 自定义图标路径 |
|---|---|
| Tools | |
| ResetNVRAM | Resources\Image\ResetNVRAM.icns |
| 其它工具 | Tools<TOOL_RELATIVE_PATH>.icns |
| Entries | |
| 启动项 | |
| 其它 | |
| APFS卷宗 | .VolumeIcon.icns(置于Preboot卷宗目录下-置于Preboot根目录下) |
| 其他文件系统 | .VolumeIcon.icns(置于其卷宗根目录下) |
预留值0x0002为OC_ATTR_USE_DISK_LABEL_FILE,表示为启动项的标题提供自定义渲染。预渲染标签可用disklabel实用工具或bless命令来生成。当预渲染标签被禁用或者缺失时,将以文本标签.contentDetails/.disk_label.contentDetails代为渲染。
| 预渲染标签 | 说明 |
|---|---|
| .disk_label(.disk_label_2x) | 与bootloader文件放在同一目录,适用于所有文件系统 |
| 与工具文件放在同一目录,适用于Tools |
预留值 0x0004 为 OC_ATTR_USE_GENERIC_LABEL_IMAGE,表示为没有自定义条目的启动项提供预定义的标签图像。
预留值 0x0008 为 OC_ATTR_HIDE_THEMED_ICONS,表示优先选择特定图标集的图标,以配合主题风格,比如可以强制显示特定图标集内置的 Time Machine 图标。需要同时启用 OC_ATTR_USE_VOLUME_ICON。
预留值 0x0010 为 OC_ATTR_USE_POINTER_CONTROL,表示在启动选择器中启用指针控制,如可利用鼠标或触摸板来控制 UI 元素。
PollAppleHotKeys
已知的 Modifier Hotkey 如下。
| 按键 | 说明 |
|---|---|
| CMD+C+MINUS | 禁用主板兼容性检查 |
| CMD+K | 从RELEASE版本的内核启动,类似于kcsuffix=release参数 |
| CMD+R | 从恢复分区启动 |
| CMD+S | 启动至单用户模式 |
| CMD+S+MINUS | 禁用KASLR slide,需要事先禁用SIP |
| CMD+V | 启用-v |
| X | 启动到第一个找到的Apple操作系统 |
| Shift | 启用安全模式 |
Debug
一般无需修改。若需开启 Debug 功能,建议使用 DEBUG 或 NOOPT 版本。
| 选项 | 内容 | 说明 |
|---|---|---|
| AppleDebug | NO | 将boot.efi调试日志保存到OpenCore日志,适用于10.15.4及更高系统 |
| ApplePanic | NO | 将Kernel Panic保存到OpenCore根分区 |
| DisableWatchDog | NO | 某些固件启动操作系统的速度可能不够快(尤其是调试模式下),看门狗定时器会因此中止引导过程。此选项用来关闭看门狗定时器。若macOS在启动时卡在某些地方,可设置为YES以排除错误干扰 |
| DisplayDelay | 0 | 屏幕上打印每行输出之间的延迟 |
| DisplayLevel | 2147483714 | 与屏幕显示相关的EDK II调试级别的位掩码(总和),除非Target启用了控制台在屏幕上输出日志,否则屏幕上的调试输出将不可见。0为隐藏所有Debug信息,2147483714为在屏幕上显示所有Debug信息 |
| SerialInit | NO | 执行串行端口初始化 |
| SysReport | NO | 需要OpenCore DEBUG版,在EFI分区中保存系统报告(ACPI、SMBIOS和音频编解码器的调试信息,其中保存音频编解码器信息需要加载音频后端驱动) |
| Target | 19 | 启用日志记录目标的位掩码(总和)。0为关闭日志记录,3为允许屏幕输出日志,19为允许屏幕输出UEFI变量日志,65为在ESP分区根目录生成日志文件但屏幕上不显示日志 |
DisplayLevel 的内容含义如下。
| 内容 | 说明 |
|---|---|
| 0x00000001 | DEBUG_INIT |
| 0x00000002 | DEBUG,NOOPT和RELEASE中的DEBUG_WARN |
| 0x00000004 | DEBUG_LOAD |
| 0x00000008 | DEBUG_FS |
| 0x00000010 | DEBUG_POOL |
| 0x00000020 | DEBUG_PAGE |
| 0x00000040 | DEBUG,NOOPT中的DEBUG_INFO |
| 0x00000080 | DEBUG_DISPATCH |
| 0x00000100 | DEBUG_VARIABLE |
| 0x00000400 | DEBUG_BM |
| 0x00001000 | DEBUG_BLKIO |
| 0x00004000 | DEBUG_NET |
| 0x00010000 | DEBUG_UNDI |
| 0x00020000 | DEBUG_LOADFILE |
| 0x00080000 | DEBUG_EVENT |
| 0x00100000 | DEBUG_GCD |
| 0x00200000 | DEBUG_CACHE |
| 0x00400000 | 在自定义版本中的DEBUG_VERBOSE |
| 0x80000000 | DEBUG,NOOPT和RELEASE中的DEBUG_ERROR |
一般开启 0x00000002、0x00000040 和 0x80000000。0x00000002+0x00000040+0x80000000=0x80000042,转换为十进制为 2147483714,填入此值即可。
Target 的内容含义如下。
| 内容 | 说明 |
|---|---|
| 0x01 | 启用日志记录 |
| 0x02 | 启用屏幕调试 |
| 0x04 | 启用日志记录到Data Hub |
| 0x08 | 启用串行端口日志记录 |
| 0x10 | 启用UEFI变量日志记录 |
| 0x20 | 启用非易失性UEFI变量日志记录 |
| 0x40 | 启用在ESP分区生成日志文件 |
一般开启 0x01、0x02、0x10 和 0x40。0x01+0x02+0x10+0x40=0x53,转换为十进制为 83,填入此值即可。
Entires
指定 OpenCore 无法自动找到的无规律引导路径。
| 选项 | 内容 | 说明 |
|---|---|---|
| Arguments | / | 对该引导条目使用的引导参数 |
| Auxiliary | NO | 隐藏引导项 |
| Name | CustomOS | OpenCore启动项中显示的名称 |
| Comment | Not signed for security reasons | 注释(可不填) |
| Enabled | YES | 启用/禁用 |
| Path | PciRoot(0x0)/Pci(0x1,0x1)/Pci(0x0,0x0)/NVMe(0x1,11-22-33-44-55-66-77-88)/HD(1,GPT,00000000-0000-0000-0000-000000000000,0x800,0x64000)/EFI/BOOT/BOOTX64.EFI | 引导磁盘的PCI路径,可以通过OpenCoreShell 的map命令或在Clover引导项找到。也可添加Tools,直接输入在OC/Tools目录的文件名即可,如OpenShell.efi |
| RealPath | NO | 启动时将完整的路径传递给工具传递目录可能会使工具在没有检查文件完整性的情况下就意外地访问了文件,降低了安全性,因此通常应该禁用。需要启用该项的情况有:工具需要外部文件来正常工作;工具需要外部文件来更好地实现某些功能(如 memtest86 的记录和配置功能,Shell 自动执行脚本的功能)。此属性的开关仅对工具有效,对于引导项该属性始终为true) |
| TextMode | NO | 以文本模式而非图形模式运行条目。某些需要文本输出的旧工具需要用到此项。默认情况下所有工具都以图形模式启动 |
Security
总述
| 选项 | 内容 | 说明 |
|---|---|---|
| AllowNvramReset | YES | 允许在引导选择界面和快捷键Cmd+Opt+P+R按下时重置NVRAM,重置NVRAM后未经过bless工具备份过的开机项(如Linux)会被全部删除,BootCamp Windows因为符合bless模型而不受影响。注意极少数笔记本(如Thinkpad X1 Extreme Gen2)重置NVRAM后可能会无法开机 |
| AllowSetDefault | YES | 允许使用Ctrl+Enter和Ctrl+数字锁定默认启动项 |
| ApECID | 0 | Apple Enclave标识符,设为非零值将允许使用个性化的Apple安全启动标识符,可取SystemUUID的前8个字节(该方法即为没有T2芯片的Mac的macOS 11的操作)。如果这个值设置妥当,并且SecureBootModel值有效且不是Disabled,那么就可以实现Apple安全启动的完整安全性 |
| AuthRestart | NO | 启用与VirtualSMC兼容的authenticated restart,允许重启FileVault2分区时无需再次输密码(可在终端输入sudo fdesetup authrestart手动执行authenticated restart) |
| BlacklistAppleUpdate | NO | 忽略某些用于更新Apple外设固件的启动项(如MultiUpdater.efi)以禁用固件更新 |
| DmgLoading | Signed | 定义用于macOS Recovery的DMG加载策略(Disabled-除Recovery分区外,不允许加载存储在com.apple.recovery.boot目录中的DMG磁盘映像,Signed-仅加载Apple签名的DMG磁盘映像,Any-任何DMG磁盘映像都会作为普通文件系统挂载,当激活了Apple安全启动时会导致启动失败) |
| EnablePassword | NO | 为敏感操作启用密码保护 |
| ExposeSensitiveData | 3 | 用于向操作系统暴露敏感数据的位掩码(总和),用NVRAM.plist则必须填3来为boot-path变量提供OpenCore EFI分区的UUID(2-原生NVRAM,11-在3的基础上添加主板OEM信息,HWMonitorSMC2和NVMeFix需要主板OEM信息才能正常工作) |
| HaltLevel | 2147483648 | EDK II调试级别的位掩码(总和),使CPU在获得HaltLevel消息后中止(停止执行)。可能的值与DisplayLevel值相匹配 |
| PasswordHash | all zero | 密码使用的哈希值 |
| PasswordSalt | empty | 密码使用的盐值(Salt) |
| Vault | Optional | OpenCore自身的加密和安全保护(Optional-不强制要求vault.plist和 vault.sig文件存在,不设置Vault,不安全,Basic-强制要求vault.plist存在,提供了基本的文件系统完整性验证,Secure-强制要求vault.sig签名文件和vault.plist存在) |
| ScanPolicy | 0 | 定义操作系统检测策略,0表示允许扫描所有可用的硬盘,983299表示显示当前系统分区 |
| SecureBootModel | Default | Apple安全启动的机型 |
| BootProtect | Bootstrap | 保证opencore.efi的永久性,以免遭到其他操作系统对开机顺位的破坏(需保证RequestBootVarRouting开启),可设置为Bootstrap(新主板)、BootstrapShort(Haswell及更早主板)、None。升级OpenCore前建议设为None,升级完成后再设置为Bootstrap。每次启动都会在BIOS出现新的OpenCore引导项时,可使用BootstrapShort |
| RequireSignature | NO | 黑苹果的Vault加密方式 |
| RequireVault | NO | 是否开启黑苹果加密 |
ExposeSensitiveData
位掩码如下。根据加载顺序,暴露的启动器路径指向 OpenCore.efi 或其引导器。
| 位掩码 | 含义 |
|---|---|
| 0x01 | 将可打印的引导器路径作为UEFI变量暴露出来 |
| 0x02 | 将OpenCore版本作为UEFI变量暴露出来 |
| 0x04 | 将OpenCore版本暴露在启动选择菜单的标题位置 |
| 0x08 | 将OEM信息作为一组UEFI变量暴露出来 |
ScanPolicy
对于 ScanPolicy 值,设为 0 可允许所有存在的源都启动,但通过简单的计算,可得到更大范围的灵活性与安全性。
计算 ScanPolicy 值时只需将所有十六进制值相加即可,全部累加后需要将此十六进制值添加到 ScanPolicy(首先需要将其转换为十进制值,粘贴时 Xcode 会自动将其转换)。
| 位置 | 宏定义 | 含义 |
|---|---|---|
| 0x00000001 (bit 0) | OC_SCAN_FILE_SYSTEM_LOCK | 将扫描限制于仅扫描此策略定义的已知文件系统,已知文件系统的前缀为OC_SCAN_ALLOW_FS_ |
| 0x00000002 (bit 1) | OC_SCAN_DEVICE_LOCK | 将扫描限制于仅扫描此策略定义的已知设备类型,已知设备类型的前缀为OC_SCAN_ALLOW_DEVICE_ |
| 0x00000100 (bit 8) | OC_SCAN_ALLOW_FS_APFS | 允许扫描APFS文件系统 |
| 0x00000200 (bit 9) | OC_SCAN_ALLOW_FS_HFS | 允许扫描HFS文件系统 |
| 0x00000400 (bit 10) | OC_SCAN_ALLOW_FS_ESP | 允许扫描EFI系统分区文件系统 |
| 0x00000800 (bit 11) | OC_SCAN_ALLOW_FS_NTFS | 允许扫描NTFS文件系统 |
| 0x00001000 (bit 12) | OC_SCAN_ALLOW_FS_EXT | 允许扫描EXT文件系统 |
| 0x00010000 (bit 16) | OC_SCAN_ALLOW_DEVICE_SATA | 允许扫描SATA设备 |
| 0x00020000 (bit 17) | OC_SCAN_ALLOW_DEVICE_SASEX | 允许扫描SAS和Mac NVMe设备 |
| 0x00040000 (bit 18) | OC_SCAN_ALLOW_DEVICE_SCSI | 允许扫描SCSI设备 |
| 0x00080000 (bit 19) | OC_SCAN_ALLOW_DEVICE_NVME | 允许扫描NVMe设备 |
| 0x00100000 (bit 20) | OC_SCAN_ALLOW_DEVICE_ATAPI | 允许扫描CD/DVD和旧的SATA设备 |
| 0x00200000 (bit 21) | OC_SCAN_ALLOW_DEVICE_USB | 允许扫描USB设备 |
| 0x00400000 (bit 22) | OC_SCAN_ALLOW_DEVICE_FIREWIRE | 允许扫描FireWire设备 |
| 0x00800000 (bit 23) | OC_SCAN_ALLOW_DEVICE_SDCARD | 允许扫描读卡器设备 |
默认值为 0xF0103,十进制为 983299,是以下各项的组合。
1 | OC_SCAN_FILE_SYSTEM_LOCK |
建议添加 OC_SCAN_ALLOW_DEVICE_USB,变为 0x00200000,转换为十进制为 3080451。
SecureBootModel
选项如下。PlatformInfo 和 SecureBootModel 是相互独立的,因此可以在任何 SMBIOS 上启用 Apple 安全启动。将 SecureBootModel 设置为除 Disabled 以外的任意有效值,相当于实现了 Apple 安全启动的中等安全性。如要实现完整安全性,还需要指定 ApECID 值。不建议同时使用 ApECID 和 Default 值。
| 选项 | 含义 |
|---|---|
| Default | 最近的可用型号,目前设置为j137 |
| Disabled | 无机型,禁用Apple安全启动 |
| j137 | iMacPro1,1 (December 2017). Minimum macOS 10.13.2 (17C2111) |
| j680 | MacBookPro15,1 (July 2018). Minimum macOS 10.13.6 (17G2112) |
| j132 | MacBookPro15,2 (July 2018). Minimum macOS 10.13.6 (17G2112) |
| j174 | Macmini8,1 (October 2018). Minimum macOS 10.14 (18A2063) |
| j140k | MacBookAir8,1 (October 2018). Minimum macOS 10.14.1 (18B2084) |
| j780 | MacBookPro15,3 (May 2019). Minimum macOS 10.14.5 (18F132) |
| j213 | MacBookPro15,4 (July 2019). Minimum macOS 10.14.5 (18F2058) |
| j140a | MacBookAir8,2 (July 2019). Minimum macOS 10.14.5 (18F2058) |
| j152f | MacBookPro16,1 (November 2019). Minimum macOS 10.15.1 (19B2093) |
| j160 | MacPro7,1 (December 2019). Minimum macOS 10.15.1 (19B88) |
| j230k | MacBookAir9,1 (March 2020). Minimum macOS 10.15.3 (19D2064) |
| j214k | MacBookPro16,2 (May 2020). Minimum macOS 10.15.4 (19E2269) |
| j223 | MacBookPro16,3 (May 2020). Minimum macOS 10.15.4 (19E2265) |
| j215 | MacBookPro16,4 (June 2020). Minimum macOS 10.15.5 (19F96) |
| j185 | iMac20,1 (August 2020). Minimum macOS 10.15.6 (19G2005) |
| j185f | iMac20,2 (August 2020). Minimum macOS 10.15.6 (19G2005) |
| x86legacy | Macs and VMs without T2 chip. Minimum macOS 11.0.1 (20B29) |
Tools
用于运行 OC 调试工具,例如验证 CFG 锁(VerifyMsrE2.efi)。
| 选项 | 内容 | 说明 |
|---|---|---|
| Arguments | / | |
| Name | VerifyMsrE2 | OpenCore启动项中显示的名称 |
| Comment | Verify CFG Lock | 注释(可不填) |
| Enabled | YES | 启用/禁用 |
| Path | VerifyMsrE2.efi | Tools文件夹下的文件名 |
可在此处添加 bootx64.efi 以引导 UEFI Shell(刷 BIOS)、添加 shellx64.efi 以引导 Grub Shell(改 BIOS 条目)等。
NVRAM
某些 NVRAM 变量可通过 PlatformNVRAM 或 PlatformInfo 节的 Generic 子节添加,注意不要与现有变量发生冲突。
Add
创建的变量会设置 EFI_VARIABLE_BOOTSERVICE_ACCESS 和 EFI_VARIABLE_RUNTIME_ACCESS 的属性。变量只有在不存在且未被屏蔽的情况下才会被设置,也就是说,如果想要覆盖一个现有的变量值,请将该变量的名称添加到 Delete 部分,这种方法能够提供一个默认的值,直到操作系统接手为止。
4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14
表示 Booter Path。
| 选项 | 内容 | 说明 |
|---|---|---|
| UIScale | 01 | OpenCore UI和引导第一阶段缩放(01为正常大小,等效于Clover中BooterConfig的0x28,02为HIDPI,等效于Clover中BooterConfig的0x2A) |
| DefaultBackgroundColor | 00000000 | 控制第一阶段苹果标志后面的背景颜色,格式为16进制颜色RGBA(黑色为00000000,灰色为BFBFBF00) |
| EFILoginHiDPI | / | |
| flagstate | / | |
| UIScale | / |
7C436110-AB2A-4BBB-A880-FE41995C9F82
表示 SIP。
| 选项 | 内容 | 说明 |
|---|---|---|
| boot-args | -v debug=0x100 nv_disable=1 slide=1 vsmcgen=1 | 引导参数(vsmcgen=1为MacOS 11专用,用于暴露SMC部件) |
| bootercfg | log=0 | Booter参数,类似于boot-args,但用于boot.efi。在不同阶段,boot.efi会请求不同的调试(日志)模式(例如,在ExitBootServices之后它只会打印到串行调试接口)。有些Booter参数会控制这些请求是否成功,如log=这一参数接受一组十六进制的64位值,带或不带0x |
| nvda_drv | 删除 | 设为31时启用NVIDIA WebDrivers(仅限10.13.6以下系统),无N卡应删除此项 |
| prev-lang:kbd | 7A682D48616E733A323532 | 将默认语言设置为简体中文(留空为英文)。也可为lang-COUNTRY:keyboard的格式,如ru-RU:252代表俄语和ABC键盘。也接受简短形式,如ru:252或ru:0(美国键盘,兼容10.9)。在10.14上使用非拉丁语键盘将无法启用ABC键盘,因此使用10.14版本则不建议使用这一变量 |
| SystemAudioVolume | 0x46 | 0x80为静音 |
bootercfg 的 log 参数列表如下。
| 参数 | 含义 | 说明 |
|---|---|---|
| 0x00 | INIT | |
| 0x01 | VERBOSE | 强制控制台记录日志,AppleLoggingConOutOrErrSet/AppleLoggingConOutOrErrPrint (classical ConOut/StdErr) |
| 0x02 | EXIT | AppleLoggingStdErrSet/AppleLoggingStdErrPrint (StdErr or serial?) |
| 0x03 | RESET:OK | |
| 0x04 | RESET:FAIL | 如未知的board-id/休眠错配/Panic循环等,AppleLoggingFileSet/AppleLoggingFilePrint (BOOTER.LOG/BOOTER.OLD file on EFI partition) |
| 0x05 | RESET:RECOVERY | |
| 0x06 | RECOVERY | |
| 0x07 | REAN:START | |
| 0x08 | REAN:END | |
| 0x09 | DT | 不再将日志记录到设备树 |
| 0x0A | EXITBS:START | 仅强制的串行调试接口 |
| 0x0B | EXITBS:END | 仅强制的串行调试接口 |
| 0x0C | UNKNOWN |
bootercfg 的其它参数列表如下。可能不适用于 10.15.4 之前的版本。
| 参数 | 取值 | 取值说明 | 参数含义 |
|---|---|---|---|
| boot-save-log=VALUE | 正常启动时的调试日志保存模式 | ||
| 0 | |||
| 1 | |||
| 2 | 默认 | ||
| 3 | |||
| 4 | 保存到文件 | ||
| wake-save-log=VALUE | 休眠唤醒时的调试日志保存模式 | ||
| 0 | 禁用 | ||
| 1 | |||
| 2 | 默认 | ||
| 3 | 不可用 | ||
| 4 | 保存到文件,不可用 | ||
| breakpoint=VALUE | 错误时的调试中断 | ||
| 0 | 禁用(默认) | ||
| 1 | 启用 | ||
| console=VALUE | 控制台日志记录 | ||
| 0 | 禁用 | ||
| 1 | 当缺少调试协议时启用(默认) | ||
| 2 | 无条件启用(不可用) | ||
| embed-log-dt=VALUE | 设备树日志记录 | ||
| 0 | 禁用 | ||
| 1 | 启用 | ||
| kc-read-size=VALUE | 网络或磁盘缓冲I/O的数据块大小,用于预链接内核读取和相关用途 | ||
| 0x100000 | 1MB(默认) | ||
| log-level=VALUE | 日志等级位掩码 | ||
| 0x01 | 启用跟踪记录(默认) | ||
| serial=VALUE | 串行控制台日志记录 | ||
| 0 | 禁用(默认) | ||
| 1 | 从EXITBS:END开始启用 | ||
| 2 | 从EXITBS:START开始启用 | ||
| 3 | 当缺少调试协议时启用 | ||
| 4 | 无条件启用 | ||
| timestamps=VALUE | 时间戳日志记录 | ||
| 0 | 禁用 | ||
| 1 | 启用(默认) | ||
| debug=VALUE | 10.15开始弃用 | ||
| 1 | 启用输出到BOOTER.LOG,如果出现了被精简过的代码,则可能发生过崩溃 | ||
| 2 | 启用性能日志(Perf Log),记录到 /efi/debug-log | ||
| 4 | 为调用printf启用时间戳输出 | ||
| level=VALUE | 10.15开始弃用。DEBUG输出的详细程度,默认除0x80000000以外,其他内容都会被精简掉 |
prev-lang:kbd 中的键盘布局数字代码如下。
| 数字 | 键盘布局 |
|---|---|
| 30778 | cs - Czech-QWERTY |
| 30776 | cs - Czech |
| 30764 | et - Estonian |
| 30767 | hu - Hungarian-QWERTY |
| 30763 | hu - Hungarian |
| 30765 | lv - Latvian |
| 30761 | lt - Lithuanian |
| 30788 | pl - Polish Pro |
| 30762 | pl - Polish |
| 30777 | sk - Slovak |
| 30779 | sk - Slovak-QWERTY |
| 19529 | bg - Bulgarian - Phonetic |
| 19528 | bg - Bulgarian |
| 19517 | be - Byelorussian |
| 19523 | mk - Macedonian |
| 19457 | ru - Russian - Phonetic |
| 19456 | ru - Russian |
| 19458 | ru - RussianWin |
| 19521 | sr-Cyrl - Serbian |
| 195138 | uk - Ukrainian-PC |
| 19518 | uk - Ukrainian |
| 12825 | en - Colemak |
| 16302 | en - Dvorak - Left |
| 16303 | en - Dvorak - Right |
| 16300 | en - Dvorak |
| 16301 | en - DVORAK - QWERTY CMD |
| 16384 | ja - KANA |
| 251 | fr - ABC-AZERTY |
| 253 | de - ABC-QWERTZ |
| 252 | en - ABC |
| 15 | en_AU - Australian |
| 92 | de_AT - Austrian |
| 6 | nl_BE - Belgian |
| 128 | pt_BR - Brazilian-ABNT2 |
| 72 | pt_BR - Brazilian - Pro |
| 71 | pt_BR - Brazilian |
| 250 | en_GB - British-PC |
| 2 | en_GB - British |
| 80 | fr_CA - Canadian - CSA |
| 29 | en_CA - Canadian |
| 9 | da - Danish |
| 26 | nl - Dutch |
| 17 | fi - Finnish |
| 60 | fr - French-PC |
| 1111 | fr - French - numerical |
| 1 | fr - French |
| 3 | de - German |
| 50 | en - Irish |
| 223 | it - Italian - Pro |
| 4 | it - Italian |
| 12 | nb - Norwegian |
| 10 | pt_PT - Portuguese |
| 87 | es - Spanish - ISO |
| 8 | es - Spanish |
| 7 | sv - Swedish - Pro |
| 224 | sv - Swedish |
| 18 | fr_CH - Swiss French |
| 19 | de_CH - Swiss German |
| 88 | to - Tongan |
| 0 | en_US - U.S |
| 15000 | en_US - USInternational-PC |
| -17409 | ko - 2SetHangul |
| -2902 | fa - Afghan Dari |
| -2904 | ps - Afghan Pashto |
| -2903 | uz-Arab - Afghan Uzbek |
| -20000 | ta - Anjal |
| -17940 | ar - Arabic-AZERTY |
| -17923 | ar - Arabic-North_Africa |
| -18000 | ar - Arabic-QWERTY |
| -17920 | ar - Arabic |
| -17921 | ar - Arabic PC |
| -28161 | hy - Armenian-HM QWERTY |
| -28164 | hy - Armenian-Western QWERTY |
| -49 | az-Latn - Azeri |
| -22529 | bn - Bangla-QWERTY |
| -22528 | bn - Bangla |
| -16899 | zh-Hant - CangjieKeyboard |
| -26112 | chr - Cherokee-Nation |
| -26113 | chr - Cherokee-QWERTY |
| -68 | hr - Croatian |
| -69 | hr - Croatian-PC |
| -20481 | hi - Devanagari-QWERTY |
| -20480 | hi - Devanagari |
| -47 | fo - Faroese |
| -17 | fi - Finnish Extended |
| -18 | fi - FinnishSami-PC |
| -27650 | ka - Georgian-QWERTY |
| -18944 | el - Greek |
| -18945 | el - Greek Polytonic |
| -21505 | gu - Gujarati-QWERTY |
| -21504 | gu - Gujarati |
| -20993 | pa - Gurmukhi-QWERTY |
| -20992 | pa - Gurmukhi |
| -50 | haw - Hawaiian |
| -18500 | he - Hebrew-QWERTY |
| -18432 | he - Hebrew |
| -18433 | he - Hebrew-PC |
| -21 | is - Icelandic |
| -30604 | iu - Inuktitut-Nunavut |
| -30602 | iu - Inuktitut-Nutaaq |
| -30600 | iu - Inuktitut-QWERTY |
| -30603 | iu - Inuttitut Nunavik |
| -500 | ga - Irish Extended |
| -19000 | ms-Arab - Jawi-QWERTY |
| -24065 | kn - Kannada-QWERTY |
| -24064 | kn - Kannada |
| -19501 | kk - Kazakh |
| -26114 | km - Khmer |
| -17926 | ckb - Kurdish-Sorani |
| -24577 | ml - Malayalam-QWERTY |
| -24576 | ml - Malayalam |
| -501 | mt - Maltese |
| -51 | mi - Maori |
| -25601 | my - Myanmar-QWERTY |
| -20484 | ne - Nepali |
| -1200 | se - Northern Sami |
| -12 | nb - Norwegian Extended |
| -13 | nb - NorwegianSami-PC |
| -22017 | or - Oriya-QWERTY |
| -22016 | or - Oriya |
| -1959 | fa - Persian-QWERTY |
| -17960 | fa - Persian |
| -2901 | fa - Persian-ISIRI 2901 |
| -38 | ro - Romanian-Standard |
| -39 | ro - Romanian |
| -1201 | se - Sami-PC |
| -19521 | sr-Latn - Serbian-Latin |
| -25089 | si - Sinhala-QWERTY |
| -25088 | si - Sinhala |
| -66 | sl - Slovenian |
| -15 | sv - SwedishSami-PC |
| -20001 | ta - Tamil99 |
| -23553 | te - Telugu-QWERTY |
| -23552 | te - Telugu |
| -26626 | th - Thai-PattaChote |
| -26624 | th - Thai |
| -26628 | bo - TibetanOtaniUS |
| -26625 | bo - Tibetan-QWERTY |
| -2398 | bo - Tibetan-Wylie |
| -36 | tr - Turkish-QWERTY-PC |
| -35 | tr - Turkish-QWERTY |
| -23 | tr - Turkish-Standard |
| -24 | tr - Turkish |
| -2 | en - US Extended |
| -1 | |
| -17925 | ur - Urdu |
| -27000 | ug - Uyghur |
| -31232 | vi - Vietnamese |
| -790 | cy - Welsh |
| -16900 | zh-Hant - Zhuyin Bopomofo |
Delete
强制重写 NVRAM 变量,由于 Add 不会覆盖 NVRAM 中已经存在的值,boot-args 需要利用此项来刷新。
LegacyEnable
允许从 ESP 分区的根目录中的 NVRAM.plist 中读取 NVRAM 变量。没有原生 NVRAM 的设备或 macOS 下硬件 NVRAM 工作不正常的设备设置为 YES,工作正常的设备设置为 NO。
NVRAM.plist 应包含以下字段。
| 字段 | 类型 | 说明 |
|---|---|---|
| Version | plist integer | 文件版本,必须设定为1 |
| Add | plist dictionary | 等同于config.plist中的Add |
LegecyOverwrite
允许 nvram.plist 中的变量覆盖现有 NVRAM 的变量,只有操作系统访问的到的变量会被覆盖。一般选择 NO。
LegacySchema
用于分配 NVRAM 变量,与 LegacyEnable 配合使用。允许设置的变量必须指定于 LegacySchema 中。可用*值来接受所有用来选择 GUID 的变量。
打开 7C436110-AB2A-4BBB-A880-FE41995C9F82 这一栏,添加以下两个 item。
| 名称 | 类型 | 内容 |
|---|---|---|
| item 11 | String | efi-boot-device |
| item 12 | String | efi-boot-device-data |
WriteFlash
允许将所有添加的变量写入闪存,在某些系统运行时不能将易失性变量转换为非易失性变量的 UEFI 固件上可开启此项。一般选择 NO。
PlatformInfo
总述
| 选项 | 内容 | 说明 |
|---|---|---|
| Auto | YES | 自动注入机型信息(基于Generic属性而非DataHub/NVRAM/SMBIOS) |
| CustomMemory | 使用在Memory部分所填写的自定义内存配置。该选项将完全取代SMBIOS中任何现有的内存配置,只有当UpdateSMBIOS设置为true时才生效 | |
| Generic | 在Automatic模式下更新所有字段。当Automatic为false时将自动忽略此部分,但不可将此部分整段删除 | |
| DataHub | 在非Automatic模式下更新Data Hub字段。当Automatic为true时将自动忽略此部分,但不可将此部分整段删除 | |
| Memory | 设置自定义的内存配置。当CustomMemory为false时将自动忽略此部分,但不可将此部分整段删除 | |
| PlatformNVRAM | 在非Automatic模式下更新platform NVRAM字段。当Automatic为true时将自动忽略此部分,但不可将此部分整段删除 | |
| SMBIOS | 在非Automatic模式下更新SMBIOS字段。当Automatic为true时将自动忽略此部分,但不可将此部分整段删除 | |
| UpdateDataHub | YES | 更新DataHub(根据Automatic的值,这些字段会从Generic或DataHub中读取) |
| UpdateNVRAM | YES | 更新NVRAM中关于机型信息的相关字段(根据Automatic的值,这些字段会从Generic或PlatformNVRAM中读取,所有其他字段都将在NVRAM部分中指定。设置为false则可以使用nvram部分更新上述变量,设置为true而同时nvram部分存在任何字段则会产生未定义行为) |
| UpdateSMBIOS | YES | 更新SMBIOS(根据Automatic的值,这些字段会从Generic或SMBIOS中读取。Dell笔记本可能需要改为Custom,相当于Clover的DellSMBIOSPatch的一部分) |
| UpdateSMBIOSMode | Create | 用新分配的EfiReservedMemoryType替换原有的表,戴尔笔记本需要使用Custom并开启CustomSMBIOSGuid |
| UseRawUuidEncoding | 对SMBIOS的UUID使用Apple原始编码(Big Endian),关闭时使用Little Endian |
UpdateSMBIOSMode 选项含义如下。注意,使用 Custom 时 SMBIOS 设置只对 macOS 生效。
| 选项 | 说明 |
|---|---|
| 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”in ASCII,这一步由CustomSMBIOSGuid这一Quirk自动完成。设置为Custom可避免OEM激活失效 |
Generic
| 选项 | 内容 | 说明 |
|---|---|---|
| SpoofVendor | YES | 仿冒制造商为Acidanthera以避免冲突(在SMBIOS的Vendor字段中使用Apple是危险的) |
| AdviseWindows | 在FirmwareFeatures中强制提供Windows支持,允许重启到ESP分区不是磁盘中第一个分区的磁盘中的Windows | |
| MaxBIOSVersion | 将BIOSVersion设置为9999.999.999.999.999,建议使用Automatic选项的旧款Mac设置,在运行非官方支持的macOS版本时可避免BIOS升级 | |
| SystemMemoryStatus | 用来表示内存是否可以更换和升级,控制关于本机-内存选项卡的可见性 |
|
| ProcessorType | ||
| SystemProductName | MacBookPro15,3 | 系统型号(从Clover复制) |
| SystemSerialNumber | C02Z5TZ6LVCG | 系统序列号(从Clover复制) |
| SystemUUID | 0CC4E03F-2998-4685-A433-B5ACAB56E9C3 | 硬件UUID(从Clover复制) |
| MLB | C029314044N0000CB | MLB(从Clover复制) |
| ROM | 3631A456E9C3 | ROM(从Clover复制) |
AdviseWindows 向 FirmwareFeatures 中添加两个 bit,FW_FEATURE_SUPPORTS_CSM_LEGACY_MODE (0x1)和 FW_FEATURE_SUPPORTS_UEFI_WINDOWS_BOOT (0x20000000)。
如果没有 FW_FEATURE_SUPPORTS_CSM_LEGACY_MODE,且 EFI 分区不是硬盘中的第一个分区,或如果没有 FW_FEATURE_SUPPORTS_UEFI_WINDOWS_BOOT,且 EFI 分区是硬盘中的第一个分区,则无法重新启动到硬盘里的 Windows 系统。
SystemMemoryStatus 选项含义如下。注意在某些型号的 Mac 上,SPMemoryReporter.spreporter 会自动忽略 PT_FEATURE_HAS_SOLDERED_SYSTEM_MEMORY,并认为其内存是不可升级的,如 MacBookPro10,x 和所有的 MacBookAir
| 选项 | 说明 |
|---|---|
| Auto | 使用原始的PlatformFeature值 |
| Upgradable | 显式取消设置PlatformFeature中PT_FEATURE_HAS_SOLDERED_SYSTEM_MEMORY (0x2) |
| Soldered | 显式设置PlatformFeature中PT_FEATURE_HAS_SOLDERED_SYSTEM_MEMORY (0x2) |
对于 SystemUUID,一般应使用主板 UUID,以免破坏 Windows 的激活环境。
主板的 UUID 可以在 BIOS 中查看,如果 BIOS 中看不到,可以通过传统方式启动 Windows(不能是 OC 引导),在命令行中查看。打开 cmd,输入以下命令即可。
1 | wmic |
DataHub
| 选项 | 内容 | 说明 |
|---|---|---|
| PlatformName | 在gEfiMiscSubClassGuid中设置name。在Mac上找到的值为ASCII码形式的platform | |
| SystemProductName | 在gEfiMiscSubClassGuid中设置Model。在Mac上找到的值等于Unicode形式的SMBIOS SystemProductName | |
| SystemSerialNumber | 在gEfiMiscSubClassGuid中设置SystemSerialNumber。在Mac上找到的值等于Unicode形式的SMBIOS SystemSerialNumber | |
| SystemUUID | 在gEfiMiscSubClassGuid中设置system-id。在Mac上找到的值等于SMBIOS SystemUUID(字节顺序调换) | |
| BoardProduct | 在gEfiMiscSubClassGuid中设置board-id。在Mac上找到的值等于ASCII码形式的SMBIOS BoardProduct | |
| BoardRevision | 在gEfiMiscSubClassGuid中设置board-rev。在Mac上找到的值似乎与Internal Board Revision相对应(如01) | |
| StartupPowerEvents | 在gEfiMiscSubClassGuid Sets中设置StartupPowerEvents。在Mac上找到的值是Power Management State位掩码,通常为0 | |
| InitialTSC | 在gEfiProcessorSubClassGuid中设置InitialTSC。设置初始TSC值,通常为0 | |
| FSBFrequency | 在gEfiProcessorSubClassGuid中设置FSBFrequency。此值等于CPU主频除以最高总线比率,以Hz为单位(不用于Skylake或更新平台) | |
| ARTFrequency | 在gEfiProcessorSubClassGuid中设置ARTFrequency。晶体时钟频率,为Skylake或更新的平台独有,以Hz为单位,Client Intel segment通常为24MHz,Server Intel segment通常为25MHz,Intel Atom CPUs通常为19.2MHz。10.15及以下均默认为24MHz | |
| DevicePathsSupported | 在gEfiMiscSubClassGuid中设置DevicePathsSupported。必须设置为1才能确保 AppleACPIPlatform.kext将SATA设备路径添加到Boot####和efi-boot-device-data变量。所有新款Mac都设置为1 | |
| SmcRevision | 在gEfiMiscSubClassGuid中设置REV。自定义属性由VirtualSMC/FakeSMC读取,用于生成SMC REV key | |
| SmcBranch | 在 gEfiMiscSubClassGuid中设置RBr。自定义属性由VirtualSMC/FakeSMC读取,用于生成SMC RBr key | |
| SmcPlatform | 在gEfiMiscSubClassGuid中设置RPlt。自定义属性由VirtualSMC/FakeSMC读取,用于生成SMC RPlt key |
Memory
| 选项 | 内容 | 说明 |
|---|---|---|
| DataWidth | 指定内存的数据宽度,以位为单位。DataWidth为0且TotalWidth为8时,表示改设备仅用于提供8个纠错位 | |
| Devices | 指定要添加的自定义内存设备,用plist dictionary来描述每个内存设备。应该填写所有的内存插槽,包括没有插内存的插槽 | |
| ErrorCorrection | 指定内存支持的主要硬件纠错或检测方法 | |
| FormFactor | 指定内存的规格。在Mac上通常是DIMM或SODIMM。当CustomMemory设置为 false 时,该值会根据所设置的 Mac 机型自动设置 | |
| MaxCapacity | 指定系统支持的最大内存量,以字节为单位 | |
| TotalWidth | 指定内存的总宽度,以位为单位,包括任何检查或纠错位。如果没有纠错位,则这个值应该等于DataWidth | |
| Type | 指定内存类型 | |
| TypeDetail | 指定附加的内存类型信息 |
ErrorCorrection 的选项如下。
| 选项 | 说明 |
|---|---|
| 0x01 | Other |
| 0x02 | Unknown |
| 0x03 | None |
| 0x04 | Parity |
| 0x05 | Single-bit ECC |
| 0x06 | Multi-bit ECC |
| 0x07 | CRC |
FormFactor 的选项如下。
| 选项 | 说明 |
|---|---|
| 0x01 | Other |
| 0x02 | Unknown |
| 0x09 | DIMM |
| 0x0D | SODIMM |
| 0x0F | FB-DIMM |
Type 的选项如下。
| 选项 | 说明 |
|---|---|
| 0x01 | Other |
| 0x02 | Unknown |
| 0x0F | SDRAM |
| 0x12 | DDR |
| 0x13 | DDR2 |
| 0x14 | DDR2 FB-DIMM |
| 0x18 | DDR3 |
| 0x1A | DDR4 |
| 0x1B | LPDDR |
| 0x1C | LPDDR2 |
| 0x1D | LPDDR3 |
| 0x1E | LPDDR4 |
TypeDetail 的选项如下。
| 选项 | 说明 |
|---|---|
| Bit 0 | Reserved, set to 0 |
| Bit 1 | Other |
| Bit 2 | Unknown |
| Bit 7 | Synchronous |
| Bit 13 | Registered (buffered) |
| Bit 14 | Unbuffered (unregistered) |
Memory Device
| 选项 | 内容 | 说明 |
|---|---|---|
| AssetTag | 指定该内存的资产标签 | |
| BankLocator | 指定内存设备所在的物理标签库 | |
| DeviceLocator | 指定内存设备所在的物理标签插槽或主板上的位置 | |
| Manufacturer | 指定该内存设备的制造商 | |
| PartNumber | 指定该内存设备的部件号 | |
| SerialNumber | 指定该内存设备的序列号 | |
| Size | 指定内存设备的大小,以兆字节为单位。0表示该插槽未插入内存 | |
| Speed | 指定设备的最大速度,单位为每秒百万传输量(MT/s)。0表示未知速度 |
PlatformNVRAM
| 选项 | 内容 | 说明 |
|---|---|---|
| BID | 指定NVRAM变量4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:HW_BID | |
| ROM | 指定NVRAM变量4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:HW_ROM和4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:ROM | |
| MLB | 指定NVRAM变量4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:HW_MLB和4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:MLB | |
| FirmwareFeatures | 与FirmwareFeaturesMask配对使用,指定NVRAM变量4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:FirmwareFeatures、4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:ExtendedFirmwareFeatures | |
| FirmwareFeaturesMask | 与FirmwareFeatures配对使用,指定NVRAM变量4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:FirmwareFeaturesMask、4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:ExtendedFirmwareFeaturesMask | |
| SystemUUID | 指定NVRAM变量4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:system-id的值,仅用于启动服务。在Mac上找到的值等于SMBIOS SystemUUID |
SMBIOS
| 选项 | 内容 | 说明 |
|---|---|---|
| BIOSVendor | BIOS供应商。SystemManufacturer的所有规则都适用 | |
| BIOSVersion | 固件版本。在较旧的固件中看起来类似于 MM71.88Z.0234.B00.1809171422,在较新的固件中看起来类似于 236.0.0.0.0 或 220.230.16.0.0 (iBridge: 16.16.2542.0.0,0)。iBridge版本从BridgeOSVersion变量读取,并且只在具有T2芯片的Mac上显示 | |
| BIOSReleaseDate | 固件发布日期。格式类似12/08/2017 | |
| SystemManufacturer | 特定主板的OEM制造商。非必要不设定,不要包含Apple Inc.字样,否则会混淆操作系统中的大量服务(固件更新、eficheck、Lilu及其插件),还可能导致某些操作系统(如Linux)无法引导 | |
| SystemProductName | 选择偏好的Mac机型来把设备标记为系统支持的机型。如果SystemProductName与目标操作系统不兼容,可用引导参数-no_compat_check来覆盖。若未指定,则默认值会被设定为MacPro6,1 | |
| SystemVersion | 产品迭代版本号。类似于1.1 | |
| SystemSerialNumber | 按照格式定义的产品序列号 | |
| SystemUUID | 唯一标识符 | |
| SystemSKUNumber | Mac主板ID,在旧型号的机器类似于Mac-7BA5B2D9E42DDD94或Mac-F221BEC8。有时可以直接留空 | |
| SystemFamily | 机型名称。类似于iMac Pro | |
| BoardManufacturer | 主板制造商。SystemManufacturer的所有规则都适用 | |
| BoardProduct | Mac主板ID,在旧型号的机器类似于Mac-7BA5B2D9E42DDD94或Mac-F221BEC8 | |
| BoardVersion | 主板版本号 | |
| BoardSerialNumber | 主板序列号 | |
| BoardAssetTag | 资产标签号。可留空或填Type2 - Board Asset Tag | |
| BoardType | 板类型。0xA表示主板(包括处理器/内存/IO等),0xB表示处理器/内存模块 | |
| BoardLocationInChassis | 可留空或填Part Component | |
| ChassisManufacturer | 主板制造商。SystemManufacturer的所有规则都适用 | |
| ChassisType | 机箱类型 | |
| ChassisVersion | 和BoardProduct符合 | |
| ChassisSerialNumber | 和SystemSerialNumber符合 | |
| ChassisAssetTag | 机箱类型名称。可留空或填MacBook-Aluminum | |
| PlatformFeature | 平台功能位掩码。填写0xFFFFFFFF值时不提供此表 | |
| SmcVersion | ASCII字符串,包含SMC版本号(大写)。配备Apple T2安全芯片的Mac没有这一字段。当此值设置为零时,这一选项会被忽略 | |
| FirmwareFeatures | 64位固件功能位掩码。低32位与FirmwareFeatures匹配,高64位与ExtendedFirmwareFeatures匹配 | |
| FirmwareFeaturesMask | 扩展固件功能位掩码。低32位与FirmwareFeatures匹配,高64位与ExtendedFirmwareFeatures匹配 | |
| ProcessorType | Automatic | 自动生成的值(Automatic)是根据当前的CPU规格提供的最准确的值 |
UEFI
ConnectDrivers
强制加载.efi 驱动程序,更改为 NO 将自动连接 UEFI 驱动程序以获得更快的启动速度。但并非所有驱动程序都可以自行连接,某些文件系统驱动程序可能无法加载,因此此处填 YES。
Drivers
添加 efi 驱动的名称。
Audio
这里的声卡设置只与UEFI环境相关,不影响系统内音频。如果要让Duang和VoiceOver等其它音频功能工作,需要将OCBinaryData中的语音资源包放置于EFI分区的EFI/OC/Resources/Audio下,同时AudioDxe需要安装在Driver文件夹中。
| 选项 | 内容 | 说明 |
|---|---|---|
| AudioSupport | YES | 启用音频支持(不支持DP类的数字音频) |
| AudioDevice | PciRoot(0x0)/Pci… | 声卡设备的PCI地址 |
| AudioCodec | 0 | 声卡的Codec地址,可以在IORegistryExplorer的HDEF-IOHDACodecDevice-IOHDACodecAddress中获得(一般是0x0) |
| AudioOut | 指定的输出设备,从0到声卡总输出数每个都试一遍,声卡的总输出数可以在Debug 版本的OpenCore日志中获得(n Outputs) | |
| MinimumVolume | 输出最小音量,有效值为0-100(如果VolumeAmplifier公式计算出的最小音量小于这里给出的值,Duang就不会被播放) | |
| PlayChime | YES | 播放Duang(Auto表示当StartupMute NVRAM变量不存在或设置为00时启用开机声音,Enabled为无条件启用,Disabled为无条件禁用) |
| SetupDelay | 音频编解码器重新配置的延迟,单位为微秒。必要的延迟时间可能长达0.5秒 | |
| VolumeAmplifier | 1000 | 音量在原有基础上放的百分比,有效范围0-1000 |
Input
为输入(键盘和鼠标)而设计的个性化设置。
| 选项 | 内容 | 说明 |
|---|---|---|
| KeyFiltering | 启用键盘输入的合理性检查。这个选项会舍弃那些既不是ASCII码,也不是UEFI规范中定义的键 | |
| KeyForgetThreshold | 5 | 按住按键后每个键之间的时间间隔(单位毫秒)。在大多数平台上有效的推荐值为5毫秒,当OpenCanopy检测到按键丢失时尝试稍高的值,当检测到按键停滞时尝试稍低的值 |
| KeyMergeTheshold | 2 | 按住按键被重置的时间间隔(单位毫秒)。此选项的建议值为2毫秒,对于较快的平台可以选取较小的值 |
| KeySupport | YES | 开启OC的内置键盘支持(若引导界面无法选择分区,或使用了单独的驱动程序,则禁用) |
| KeySupportMode | Auto | 键值转换协议模式(Auto-自动,V1-UEFI旧版输入协议EFI_SIMPLE_TEXT_INPUT_PROTOCOL,V2-UEFI新输入协议EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL,AMI-APTIO输入协议AMI_EFIKEYCODE_PROTOCOL) |
| KeySwap | NO | 交换Command和Option键 |
| PointerSupport | NO | 修复UEFI选择器协议,实现标准UEFI指针协议EFI_SIMPLE_POINTER_PROTOCOL(华硕z87/z97需要开启) |
| PointerSupportMode | / | 指定OEM协议,当前仅支持Z87和Z97 ASUS板(如果启用了PointerSupport,此处值不能为空) |
| TimerResolution | 60000 | 固件时钟刷新的频率(单位100纳秒),普通电脑填50000,华硕主板填60000,苹果主板填100000,0表示自动计算 |
Output
为输出(文本和图形)而设计的个性化设置。
| 选项 | 内容 | 说明 |
|---|---|---|
| TextRenderer | BuiltinGraphics | 文字渲染模式(BuiltinGraphics-使用OpenCore内置文字渲染的图形模式,并同时启用OpenCore自带的控制台管理,支持HIDPI和全屏范围显示,SystemGraphics-使用主板固件自带文字渲染的图形模式,并同时启用OpenCore自带的控制台管理,SystemText-使用主板固件自带文字渲染的文字模式,并同时启用OpenCore自带的控制台管理,SystemGeneric-使用主板固件自带文字渲染的文字模式和自带的控制台管理) |
| ConsoleMode | / | TextRenderer使用Builtin时此项设置不生效。设置为空字符串则不会改变控制台模式,设置为Max则会尝试最大的可用控制台模式。在大多数固件上,这个字段最好留空 |
| Resolution | Max | Max将会尝试开启最大分辨率,也可填写宽x高@Bpp(如3840x2160@32),其中Bpp为显示位深,留空将不会改变UEFIe的默认分辨率(在固件没有GOP时该选项失效,当固件不再提供时可以将ProvideConsoleGop设置为true并添加) |
| ForceResolution | 当默认情况下无法获得所需分辨率时,强制设置Resolution中所填写的分辨率,多用于老的Intel GMA和第一代Intel HD Graphics(Ironlake/Arrandale)。将Resolution设置为Max时,将尝试从所连接的显示器的EDID中提取最大的可用分辨率。该选项依赖OC_FORCE_RESOLUTION_PROTOCOL协议,目前只有 OpenDuetPkg支持该协议,而OpenDuetPkg的实现目前仅支持Intel iGPU | |
| ClearScreenOnModeSwitch | NO | 切换到文本模式之前用黑色填充整个屏幕,只在System渲染器上生效(从图形模式切换到文本模式时,某些固件仅清除屏幕的一部分,导致屏幕上残留之前绘制的图片,此情况可打开该选项) |
| DirectGopRendering | NO | 直接使用OpenCore内置的GOP渲染控制台,主要用于提升或修复MacPro5,1的渲染问题(除非开启后能明显感觉到有改进,否则不要开启,开启可能会导致滚动速度变慢) |
| IgnoreTextInGraphics | NO | 在控制台处于与Text不同的模式时舍弃所有文本输出,只在System渲染器上生效。修复不用-v开机时日志覆盖苹果标志输出的问题 |
| ReplaceTabWithSpace | NO | 使控制台输出空格来替代tab,在某些设备在UEFIShell中编辑文件使用Tab键出问题时启用(只在System渲染器上生效) |
| ProvideConsoleGop | YES | 选择启动项之后不出现啰嗦模式跑码时启用,开启此选项能确保GOP和UGA(如果存在)在控制台句柄上可用,最大可能保证OpenCore UI和苹果标志以正确分辨率显示(macOS引导加载程序需要GOP,即图形输出协议,存在于控制台句柄上,大部分的笔记本都不提供GOP,台式机的独立显卡可以单独刷入GOP) |
| ReconnectOnResChange | NO | 改变屏幕分辨率后重新连接控制台控制器。有些固件在GOP分辨率改变后要求重新连接控制器才能输出文本,开启这个选项会导致UEFI Shell中启动OpenCore时直接黑屏,尽量避免开启 |
| SanitiseClearScreen | YES | 修复OpenCore在高分屏中以1024x768显示的问题,可能会有反效果,只在System渲染器上生效(要将ConsoleMode的内容留空) |
| DirectGopRendering | NO | 使用内置显卡直接渲染开机画面 |
| UgaPassThrough | NO | 通过UGA代替无法使用GOP的主板,一般带UEFI的主板以及显卡请选择NO。有些固件不会去实现老旧的UGA协议,但是有些更老的EFI应用程序(如10.4的EfiBoot)可能需要用它来进行屏幕输出 |
对于控制台输出,可选择 Builtin 或 System 渲染器。System 渲染器使用固件服务进行文本渲染,Builtin 渲染器则绕过固件服务,自行渲染文本。建议使用 Builtin 渲染器,因为它支持 HiDPI 模式,并能够使用全屏分辨率。
对于 UEFI 固件,用于支持 ConsoleControl 的渲染模式有 Graphics 和 Text。OpenCore 和 macOS 希望文本只在 Graphics 模式下显示,而图形可以在任何模式下绘制。
TextRenderer 的选项分别为 BuiltinGraphics、BuiltinText、SystemGraphics、SystemText,分别对应不同的渲染器和渲染模式。SystemGeneric 选项则表示使用 System 渲染器和系统 ConsoleControl。
将TextRenderer设置为BuiltinGraphics/SystemGraphics/SystemText时,需启用ProvideConsoleGop,并将Resolution设置为Max。
ProtocolOverrides
强制执行从下面的 ProtocolOverrides 属性部分所选协议的内置版本。注意所有协议实例的安装都优先于驱动程序的加载。
| 选项 | 内容 | 说明 |
|---|---|---|
| AppleAudio | YES | 重新安装内置版本的Apple Audio协议,以在OpenCore中使用 VoiceOver,目前该协议支持在macOS 10.13及以上播放音频,老系统使用的AppleHDA协议暂未支持 |
| AppleBootPolicy | NO | 重新安装内置的Apple Boot Policy协议,确保虚拟机/旧白苹果上兼容APFS |
| AppleDebugLog | NO | 重新安装苹果调试日志输出协议 |
| AppleEvent | NO | 重新安装内置的Apple Event协议,虚拟机并具有Vault(文件保险箱)的Mac需要开启 |
| AppleFramebufferInfo | NO | 虚拟机专用。重新安装内置的Apple Framebuffer Info协议,可覆盖虚拟机或者旧款Mac上的缓冲帧信息,从而提高与旧版EfiBoot(如macOS 10.4中的EfiBoot)的兼容性 |
| AppleImageConversion | NO | 重建Apple图标(重新安装Apple Image Conservation协议) |
| AppleImg4Verification | 重新安装内置的Apple IMG4验证协议。该协议用于验证Apple安全启动所使用的im4m清单文件 | |
| AppleKeyMap | NO | 重建苹果功能键(重新安装Apple Key Map协议) |
| AppleRtcRam | NO | 重装Apple RTC RAM协议(可能会过滤掉RTC内存地址的潜在I/O,地址列表可以在4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:rtc-blacklist中以数组的方式指定) |
| AppleSecureBoot | 重新安装内置的Apple安全启动协议 | |
| AppleSmcIO | YES | 重新安装Apple SMC I/O协议(VirtualSmc.efi已经被替代为此选项) |
| AppleUserInterfaceTheme | NO | 重新安装Apple User Interface Theme协议 |
| ConsoleControl | YES | 用内置版本替换控制台控制协议 |
| DataHub | NO | 重新安装Data Hub协议。如果已经安装了协议,这将删除所有先前的属性 |
| DeviceProperties | NO | 重新安装内置版本的Device Property协议。 如果已经安装,它将删除所有以前的属性。这一选项可用于确保确保在VM/旧白苹果上完全兼容 |
| FirmwareVolume | NO | 强制包装固件卷协议或安装新版本以支持FileVault 2的自定义光标图像。该选项可修复Filevault的UI问题,提高FileVault的兼容性(包括VMWare在内的多个虚拟机在HiDPI模式下光标会损坏,因此建议为所有虚拟机启用这一选项) |
| HashServices | NO | 强制重新安装内置版本的Hash Services协议,在SHA-1哈希协议不完整的固件上确保FileVault 2的兼容性,修复运行FileVault时鼠标光标大小不正确的问题。对于大多数固件,可通过将UIScale设置为02查看是否会出现禁行图标,来诊断固件是否需要这一Quirk。一般来说APTIO V(Haswell和更早)之前的平台都会受到影响 |
| OSInfo | NO | 强制使用内置版本重新安装OS Info协议,为主板或者其它程序接收来自macOS引导工具的消息 |
| UnicodeCollation | NO | 制重新安装内置版本的Unicode Collation 服务,修复主板UEFI Shell的兼容性(通常用于IvyBridge或更旧的设备) |
Quirks
| 选项 | 内容 | 说明 |
|---|---|---|
| DeduplicateBootOrder | NO | 当RequestBootVarRouting选项开启时,一些其他的操作系统可能在某些主板(如华硕)中会找不到自己的引导而重新创建,最终导致黑果在没有清理NVRAM的情况下无法进入系统时,出现该情况则可开启 |
| DisableSecurityPolicy | 禁用平台安全策略,会同时破坏安全启动策略,使用UEFI安全启动时需要禁用 | |
| ExitBootServicesDelay | 0 | 主板退出时间(单位微秒),在EXIT_BOOT_SERVICES事件后添加延迟。新主板填0,旧主板(如Z87pro)填3000000-5000000 ,用于修复Still waiting for root device提示信息 |
| IgnoreInvalidFlexRatio | YES | BIOS中无法禁用MSR_FLEX_RATIO(0x194)时开启,在不需要的情况下不建议启用 |
| ReleaseUsbOwnership | NO | 从固件驱动程序中释放USB控制器所属权,相当于Clover的FixOwnership(大部分主板都有自动释放USB所有权的功能) |
| RequestBootVarFallback | NO | 一些固件会主动扫描系统启动盘的位置而阻止OC扫描,遇到此问题时可开启 |
| RequestBootVarRouting | YES | 请求将所有带有Boot前缀的变量从EFI_GLOBAL_VARIABLE_GUID重定向到OC_VENDOR_VARIABLE_GUID,启用此项以便能够在与macOS引导项设计上不兼容的固件中可靠地使用启动磁盘设置,并使操作系统只受OpenCore引导环境的控制,而不会被其它操作系统搞乱优先级 |
| TscSyncTimeout | 0 | 帮助X99/X299主板开启全核同步功能(应优先使用TSCAdjustReset/VoodooTSCSync/CpuTscSync来做全核同步,因为这个Quirk不能在ACPI S3 模式即睡眠唤醒下运行,会导致睡眠唤醒后失效,而且UEFI固件提供的多核心支持非常有限,无法精确地更新MSR寄存器) |
| UnblockFsConnect | YES | 惠普笔记本在OpenCore引导界面没有引导项时设置为YES(某些固件通过按驱动程序模式下来阻止引导项加载,导致文件系统协议无法安装) |
APFS
| 选项 | 内容 | 说明 |
|---|---|---|
| EnableJumpstart | YES | 从APFS容器中加载内置APFS驱动(APFS的EFI驱动内置在所有可以作为系统启动盘的APFS容器之中,确保在Scanpolicy中放开APFS格式) |
| GlobalConnect | NO | 在APFS加载期间执行完整的设备连接,一些主板需要选择YES才能完全加载APFS(如HP笔记本) |
| HideVerbose | YES | 隐藏啰嗦模式 |
| JumpstartHotPlug | YES | 允许从进入OpenCore引导菜单后插入的可移除硬盘上的APFS容器中加载APFS驱动 |
| MinDate | 0 | 允许加载的最老APFS驱动的发布日期(0表示使用默认数值,-1表示允许使用任何版本的APFS驱动,其它为时间如20200401) |
| MinVersion | 0 | 允许加载的最老APFS驱动的版本号(0代表默认数值,当前为从high sierra开始加载,-1代表所有版本,其它为APFS驱动版本号如1412101001000000) |
ReservedMemory
用于保留内存。一些硬件会在把硬件 EFI 写进内存过程中占用必要的 UEFI 运行空间,所以可以通过此项预留内存保证 UEFI 的运行。一般情况下无需处理。
| 选项 | 内容 | 说明 |
|---|---|---|
| Address | 保留内存区域的起始地址,该区域应被分配为保留区,有效地将此类型的内存标记标记为操作系统不可访问。这里写的地址必须是内存映射的一部分,具有EfiConventionalMemory类型,并且按页对齐(4KB)。禁用CSM后,某些固件可能不会为S3(睡眠)和S4(休眠)分配内存区域,因此导致唤醒失败,可以分别比较禁用和启用CSM的内存映射,从低层内存中找到这些区域,并保留该区域来修复这个问题 | |
| Comment | 注释 | |
| Size | 保留的内存区域的大小,必须按页对齐(4KB) | |
| Type | 内存区域类型 | |
| Enabled | 启用/禁用 |
Type 的选项如下。
| 选项 | 与UEFI规范的内存描述符类型的匹配映射 |
|---|---|
| Reserved | EfiReservedMemoryType |
| LoaderCode | EfiLoaderCode |
| LoaderData | EfiLoaderData |
| BootServiceCode | EfiBootServicesCode |
| BootServiceData | EfiBootServicesData |
| RuntimeCode | EfiRuntimeServicesCode |
| RuntimeData | EfiRuntimeServicesData |
| Available | EfiConventionalMemory |
| Persistent | EfiPersistentMemory |
| UnusableMemory | EfiUnusableMemory |
| ACPIReclaimMemory | EfiACPIReclaimMemory |
| ACPIMemoryNVS | EfiACPIMemoryNVS |
| MemoryMappedIO | EfiMemoryMappedIO |
| MemoryMappedIOPortSpace | EfiMemoryMappedIOPortSpace |
| PalCode | EfiPalCode |
配置文件检查
可在终端输入以下命令进行基本检查。
1 | plutil -convert xml1 config.plist && plutil config.plist |
也可通过以下网站。
1 | https://opencore.slowgeek.com/ |
也可通过以下脚本。
1 | https://github.com/corpnewt/OCConfigCompare |
组件
内核
在添加引导项时,OpenCore必须从EFI/BOOT/BOOTx64.efi启动而不是从EFI/OC/OpenCore.efi启动。
基本配置
内存分配
有以下两种关于内存的设置。
KASLR 内存注入
KASLR 是更加高效的内存注入方式。
DevirtualiseMmio 选择 yes,ProtectUefiServices 选择 yes,删除 boot-args 里面的 slide=1,删除 Drivers 文件夹下的 Memoryallocations.efi。
连续性内存注入
DevirtualiseMmio 选择 yes,ProtectUefiServices 选择 no,保留 boot-args 里面的 slide=1,保留 Drivers 文件夹下的 Memoryallocations.efi。
修复引导界面显示
在 config.plist 中修改以下配置。
| 路径 | 选项 | 设置 |
|---|---|---|
| UEFI->Protocols | ConsoleControl | YES |
| UEFI->Quirks | ProvideConsoleGop | YES |
| IgnoreTextInGraphics | YES | |
| SanitiseClearScreen | YES | |
| Misc->Boot | ConsoleMode | 留空(有时可设置为Max) |
| Resolution | 显示器的正常分辨率(如4k为3840x2160) | |
| 4代及以下 | ||
| ConsoleBehaviourOs | Graphics | |
| ConsoleBehaviourUi | ForceText | |
| 5代+ | ||
| ConsoleBehaviourOs | ForceGraphics | |
| ConsoleBehaviourUi | ForceText(有时可设置为Graphics/Text) |
安全启动
将 Misc-Security-SecureBootModel 设置为 Default 或其他有效值即可。若不能开启,则可强制加载 IO80211Family,在 Kernel-Force 下添加以下项即可。
| 键 | 类型 | 值 |
|---|---|---|
| Arch | String | Any |
| BundlePath | String | System/Library/Extensions/IO80211Family.kext |
| Comment | String | |
| Enabled | Boolean | True |
| Identifier | String | com.apple.iokit.IO80211Family |
| ExecutablePath | String | Contents/MacOS/IO80211Family |
| MaxKernel | String | |
| MinKernel | String | |
| PlistPath | String | Contents/Info.plist |
外置主题
首先需要保证有 OpenCanopy.efi,且 PickerMode 设置为 External。然后将资源放置在 Resources 目录即可,资源如下。
1 | # 官方资源包 |
默认选择的图标由 DefaultBackgroundColor 变量决定,当该变量的值定义为浅灰时,则使用 Old 前缀的图标,定义为其他颜色时则使用没有前缀名的图标。
调试模式
普通设置
需要将 OpenCore、Lilu 及其插件更换为 DEBUG 版本。对于 OpenCore,需要更换以下文件。
1 | EFI/BOOT/BOOTx64.efi |
可使用以下工具增强调试能力。
1 | # DebugEnhancer.kext |
在 OpenCore 的配置文件中设置以下内容。
1 | # 提供更多调试信息,特别是与boot.efi相关的信息,并将日志存储到磁盘 |
【进阶】AppleDebug与log=1
AppleDebug 选项适用于较新的 Mac 版本,会把 boot.efi 的 verbose 输出日志保存到通用 OpenCore 日志中。
对于 10.15.4 之前的版本,将 bootercfg 设置为 log=1,可以将 verbose 输出打印在屏幕上。
串行设置
若需要启用串行输出,需要在以上设置的基础上,在配置文件中设置以下内容。
1 | # 执行串口初始化 |
插入串口后使用 CoolTerm 进行调试,链接如下。
1 | https://freeware.the-meiers.org/ |
打开 CoolTerm 并点击 Options,确保 Port 为串口控制器,Baudrate 选择 115200,Data Bits 选择 8,Parity 选择 none,Stop Bit 选择 1。然后点击 Connect 即可开始监听串口。
设置默认启动盘
在配置文件中开启 Misc-Security-AllowSetDefault,然后在引导界面按 Ctrl+Enter 设置。
获取错误信息
若系统无法启动,可通过 OpenCore 获取错误信息。需确保 OpenCore 为 DEBUG 或 NOOPT 版本。在配置文件中按照以下内容设置。
1 | Misc-Debug-Target=3 |
对于 Early Boot 出现的问题(如 OpenCore 启动菜单无法显示),通过 UEFI Shell 可以查看相关调试信息。
自定义启动项
OpenCore 遵循 Apple Bless 标准模型,从引导目录中的.contentDetails和.disk_label.contentDetails文件中提取条目名称。这些文件包含带有输入标题的 ASCII 字符串,可以修改它们以自定义启动项名称。
Windows 安装与配置
在 OpenCore 上应用的所有更改(ACPI、NVRAM、SMBIOS)都应该与操作系统本身无关。OpenCore 会将这些改动生效于所有操作系统,包括 Windows。
安装
应当使用 Boot Camp 安装 Windows,以保证其可被 OpenCore 引导。也可使用 Brigadier 对现有 Windows 进行配置,链接如下。
1 | https://github.com/timsutton/brigadier |
注意使用Brigadier时,需要传递最新型号的Mac,如./brigadier.exe -m iMac19,1,以防止Boot Camp版本过低导致无法运行。
在不受支持的Mac型号上安装Boot Camp,可以管理员身份运行PowerShell,输入msiexec /i BootCamp.msi即可。如果之前不小心已经安装了旧版本的Boot Camp,则必须先通过运行msiexec /x BootCamp.msi将其卸载。BootCamp.msi文件位于BootCamp/Drivers/Apple目录。
配置
反转鼠标滚轮滚动方向
打开 PowerShell 并输入以下命令即可。
1 | # 获取当前设置 |
若需要撤销更改,可通过以下命令。
1 | Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Enum\HID\*\*\Device` Parameters FlipFlopWheel -EA 1 | ForEach-Object { Set-ItemProperty $_.PSPath FlipFlopWheel 0 } |
修复 Boot Camp 启动硬盘控制面板的 Basic data partition
需要手动重新标记分区,可通过 gdisk,方法如下。
1 | PS C:\gdisk> .\gdisk64.exe \\.\physicaldrive0 |
安装到实体 Mac 上
以 Mac Pro 5,1 为例。在实体 Mac 上使用 OpenCore,可以让旧版 Mac 拥有启动选择器屏幕、软件更新、硬件加速、DRM 支持等。示例机器配置如下。
| 内容 | |
|---|---|
| Mac Pro型号 | MacPro5,1 (Early 2009/Mid 2010/Mid 2012) |
| 处理器架构 | Westmere (E56xx/L56xx/X56xx), Gulftown (W36xx) |
| ROM版本 | 144.0.0.0.0 |
| 显卡 | 在Catalina/Big Sur受支持的型号 |
| 无线网卡 | 在Catalina/Big Sur受支持的型号 (BCM943224/BCM9435x/BCM9436x) |
【特殊】Big Sur 11.3/11.4对Mac Pro的兼容性
Big Sur 11.3/11.4可能已不再支持Mac Pro(Early 2009-Mid 2012)。可使用Big Sur 11.2.3。
修改启动器
操作时建议使用第二块硬盘,在配置失败时仍可以使用原来的硬盘启动。
开启 OpenCore
将第二块硬盘设置为 GUID 分区表,挂载 EFI 分区,放置 OpenCore 并使用以下配置文件。
1 | https://forums.macrumors.com/attachments/config-zip.1789995/ |
在终端输入以下命令以进入恢复模式。
1 | sudo nvram "recovery-boot-mode=unused" && sudo reboot recovery |
进入恢复模式后,打开终端并输入以下命令。
1 | # 列出分区及其标志符 |
重启后即跳出 OpenCore 界面,选择要引导的系统即可。启动成功后打开终端并输入以下命令,查看当前引导器是否为 OpenCore,若有输出则证明 OpenCore 已引导系统。
1 | nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:opencore-version |
关闭 OpenCore
将配置文件中 RequestBootVarRouting 设置为 false,重启后在系统偏好设置-启动磁盘中选择当前系统盘并重新启动即可。
修复启动
若开启 OpenCore 后无法启动,则移除第二块硬盘,启动时按住 Option+Command+P+R,在 20 秒或听到第二声启动提示音后松手,Mac 将重置 NVRAM 并按照正常方式启动。
修改配置文件
开启虚拟化
在 SMBIOS 下,修改 BIOSVersion 为 9999.0.0.0.0,BoardProduct 为 Mac-7BA5B2D9E42DDD94,并将 UpdateSMBIOS 设置为 true。
VMM 标志
将 VMM 标志添加到 CPUID 有助于启用安装和软件更新。因为 VMM 标志会导致大约 5%的性能损失并禁用电源管理,所以建议仅在安装或检查更新时打开该标志。注意,若使用了虚拟化,则安装和更新 Big Sur 并不需要开启 VMM 标志。
修改 CPUID 为如下即可。
1 | # 打开VMM标志 |
GOP 渲染器
对于 Radeon VII 和某些版本的 5700 XT,需要启用 GOP 渲染器以显示启动选择器菜单。但对于 RX 580,不需要启用 GOP 渲染器。建议非必要时禁用 GOP 渲染器。
将 DirectGopRendering 设置为 true 即开启,设置为 false 即关闭。
启动选择器屏幕
若有 HiDPI 显示屏,可将 UIScale 从 AQ==改为 Ag==。
若需要显示灰色启动屏幕,可将ConsoleAttributes从15改为112,将DefaultBackgroundColor从AAAAAA==改为v7+/AA==。
若需要隐藏启动屏幕,可将 ShowPicker 改为 false。若在隐藏后需要在启动时重新显示,可长按 Esc。
启用硬件加速
放置 Lilu 和 WhateverGreen,若为双处理器则还需要放置 AppleMCEReporterDisabler。在配置文件中加载以上 kext,并在 DeviceProperties 添加显卡路径,该路径可通过 gfxutil 查询到。然后在显卡路径下添加以下键。
| 键 | 类型 | 值 |
|---|---|---|
| agdpmod | Data | 70696B65 726100 |
| rebuild-device-tree | Data | 00 |
| shikigva | Data | 50 |
| unfairgva | Data | 01000000 |
设置启动标志
将 NVRAM-7C436110-AB2A-4BBB-A880-FE41995C9F82-boot-args下的内容清空即可。
开启 Night Shift
放置 Lilu 和 NightShiftEnabler,在配置文件中加载以上 kext 即可。
安装 Windows
确保配置文件中 ProtectSecureBoot 设置为 true,VMM 标志关闭,并添加 ExFatDxeLegacy.efi 驱动。准备一个 USB 作为安装介质,使用 MBR 分区表并格式化为 exFAT 格式。下载 Windows 安装镜像,双击挂载 ISO 后将出现 CCCOMA_X64 映像。
打开终端并输入以下命令,注意需要将 USB 替换为安装介质的名称。
1 | rsync -r /Volumes/CCCOMA_X64/ /Volumes/USB |
重启后在启动选择器选择 Windows (External)以启动安装环境。启动完成后按 Shift+F10 打开命令提示符,然后输入以下命令。
1 | # 进入磁盘工具 |
完成后关闭命令提示符并重启,进入Mac系统。挂载EFI分区后,将安装盘中生成的EFI/Microsoft文件夹复制到EFI分区的EFI文件夹中。然后删除安装盘中的EFI文件夹,将efi.bak重命名为efi,弹出USB。完成后重启并进入Windows即可。
安装 Ubuntu
常见问题
出现 kextd stall (60s) ‘IOUSBHostInterface’或 kextd stall (60s) ‘IOHIDInterface’
使用 Catalina Beta 1-3 时会出现此问题。在 Beta 2 中无解决方案,在 Beta 3 中未测试。
在 Beta 1 中,可添加以下内核补丁。
| 键 | 类型 | 值 |
|---|---|---|
| Base | String | _isSingleUser |
| Count | Integer | 1 |
| Enabled | Boolean | True |
| Find | Data | |
| Identifier | String | com.apple.iokit.IOHIDFamily |
| Limit | Integer | 0 |
| Mask | Data | |
| MaxKernel | String | |
| MinKernel | String | 20.0.0 |
| Replace | Data | B801000000C3 |
| ReplaceMask | Data | |
| Skip | Integer | 0 |
出现 OCB: boot LoadImage failed
可尝试将 ScanPolicy 设为 983299(0xF0103)。
出现 OC:configuration requires vault but no vault procide
更新 OpenCore 即可。
出现 OCS: No schema for xxxxx at xx index!
在 config.plist 中删除对应项即可。
出现 OCB:OcScanForBootEntries failure - Not Found Halting on critical error
修改 config.plist 中的 Misc-Security-ScanPolicy 为 0 即可。
Recovery 无法进入
勾选 UEFI-APFS-JumpstartHotPlug 即可。
卡在[EB|#LOG:EXITBS:START]
未关闭 BIOS 的 CFG 锁导致。
在 OpenCore 配置文件中设置 Kernel-Quirks-AppleCpuPmCfgLock,Kernel-Quirks-AppleXcpmCfgLock 和 UEFI-Quirks-IgnoreInvalidFlexRatio 为 Yes。
BIOS 重设或重启/关机后发送到安全模式
AppleRTC 的问题。
在 OpenCore 配置文件中设置 Kernel-Quirks-DisableRtcChecksum 为 Yes。如果仍然有问题,则需要使用 RTCMemoryFixup.kext 并排除范围。
使用 OpenCore 引导启动 Windows 出现蓝屏
在 OpenCore 配置文件中设置 Booter-Quirks-SyncRuntimePermissions。
Z390 关机重启
打开 RequestBootVarRouting。
引导时卡在[EB|`B:WFDW] Err(0xE), 0 @ LocHB 71B4903C-14EC-42C4-BDC6-CE1449930E49
在config.plist中勾选UEFI-Quirks-IgnoreInvalidFlexRatio即可。若无效,则勾选Kernel-Quirks-AppleCpuPmCfgLock/AppleXcpmCfgLock。若仍无效,则尝试在BIOS关闭CFG Lock,也可尝试勾选Booter-Quirks-SetupVirtualMap。
出现 OC: Driver xxxxxxxx.efi at 3 cannot be started Already started! Halting on critical error
删除对应的驱动即可。
引导 OpenCore 后回到 BIOS/引导选择界面
确定ESP分区内分区结构正确。然后确保引导的是EFI/BOOT/bootx64.efi而不是EFI/OC/OpenCore.efi。
引导时提示 no vault provided!
关闭 Misc-Security 中的 RequireSignature 和 RequireVault,关闭 FileVault。
卡在 EndRandomSeed
对于 AMD CPU,可能是缺少内核补丁。
对于 Broadwell 和更老的机型,需要勾选 IgnoreInvalidFlexRatio。对于奔腾、HEDT,可能需要勾选 AppleXcpmExtraMsrs。
也有可能需要勾选 UEFI-Output-ProvideConsoleGop,或关闭 CFG 锁,或使用 SSDTTime 的 FixHPET 选项并放置生成的 SSDT。
看不到 Mac 分区
ScanPolicy 设置为 0,显示所有驱动器。需要放置分区格式驱动,如 ApfsDriverLoader 和 HfsPlus(或 VBoxHfs)。若进行网络恢复安装,则应当启用 AvoidHighAlloc。
选择 OpenCore 引导后黑屏
启用 UEFI-Output-ProvideConsoleGOP。
卡在 OC: OcAppleGenericInput… - Success
关闭 CFG 锁。对于 AMD CPU,应检查是否已添加内核补丁。
引导系统时卡在 PCI Configuration Begins, Previous Shutdown…, HID: Legacy… apfs_module_start…等
确保 EC 控制器名称为 EC,以及使用了 SSDT-AWAC.aml 补丁。若无效,则可添加 npci=0x2000 参数。若仍无效,则关闭 UEFI-Quirks-ReleaseUsbOwnership 选项。
Kernel Panic 并提示“Cannot perform kext summary”
kext 的加载顺序错误。
因为 AppleIntel***Framebuffer 导致的 Kernel Panic
DVMT Pre-allocated 的问题。也可能是没有加载 SSDT-PLUG.aml,即没有注入 plugin-type=1。
I2C 触摸板不可用,但驱动已经加载
强制IOGraphicsFamily.kext加载即可。由于OC没有ForceKextsToLoad的功能,需从System/Library/Extension下提取这个kext放到EFI/OC/Kexts,并在config.plist的Kernel-Add 中添加此Kext。
出现 OCB: Apple Secure Boot prohibits this boot entry, enforcing!
已安装的系统Preboot分区上的Apple安全启动清单是过时的,从而导致启动失败。可重新安装操作系统,或将/usr/standalone/i386中扩展名为im4m的文件复制到/Volumes/Preboot/
出现 OCABC: Memory pool allocation failure - Not Found
保证 BIOS 已启用 4G 以上解码,且已禁用 CSM。
出现** In Memory Panic Stackshot Succeeded ** Bytes Traced xxxxx ** Attenmpting system restart. . . MACH Reboot
可能使用的kext存在问题,或引导器需要更新。若无效,可在config.plist中勾选Kernel-Quirks-AppleCpuPmCfgLock/AppleXcpmCfgLock,或添加阻止补丁DeviceProperties-Block-PciRoot(0x0)/Pci(0x1b,0x0)-MaximumBootBeepVolume。
出现 SMCSuper IO ssio: @ failed to detect supported Super IO chip 或 RTC…, PCI Configuration Begins, Previous Shutdown…, HPET, HID: Legacy…或 AppleNVMe Assert failed:( 0 != data )Release file:/AppleInternal/BuildRoot/Library/Caches/
可能为 IRQ 冲突,使用 SSDTTime 的 FixHPET 选项并放置生成的 SSDT 即可。
若无效,则可能是PCI分配问题,可尝试更新BIOS,且启用Above4GDecoding,禁用CSM,启用Windows 8.1 / 10 UEFI模式。
对于 Catalina 及以上版本,可能是缺少 EC 设备。对于有电池的设备,需将 EC 设备进行改名。对于无电池的设备,直接使用 SSDT-EC 即可。
内核 Panic 并显示 Cannot perform kext summary
预链接内核问题。需验证 kext 顺序是否正确。
出现 Buffer Too Small
开启 UEFI-Quirks-AvoidHighAlloc,并在 BIOS 启用 Above4GDecoding。
出现 Plist only kext has CFBundleExecutable key
当一个值不应该是实数时,它被设置为实数,通常是 Xcode 意外地转换了 HaltLevel,如下。
1 | <key>HaltLevel</key> |
修复为如下即可。
1 | <key>HaltLevel</key> |
选择 macOS 分区后卡住
关闭 CFG 锁,或启用 AppleXcpmCfgLock 和 AppleCpuPmCfgLock。
无法在引导界面选择器中选择任何内容
键盘驱动程序不兼容。
禁用 PollAppleHotKeys 并启用 KeySupport,然后在删除 OpenUsbKbDxe 驱动。若不起作用,则进行相反操作。
出现[EB|’WL:DT] Err(0xE) @ WL:PWLFRTC 错误
关闭 CFG 锁,并将 Misc-Debug-DisplayLevel 改为 0。
系统进入后,关于本机处无法显示序列号或者序列号不可用
关闭 Kernel-Quirks-CustomSMBISOGuid。
出现 OCB:LoadImage failed - Unsupported
添加 HFSPlus.efi 或 VBoxHfs.efi 驱动。
出现 OC:Failed to show boot menu,或 no boot device found. press any key to reboot the machine
Misc-Security-ScanPolicy 设为 0。
出现 OCB: Start Image failed - Aborted
将 ACPI-Delete 的补丁全部删除。
出现 OCTY:failed to locate apple event protocol - not found
将 UEFI-Applelnput-AppleEvent 设为 Auto。
Chameleon
Chameleon 只支持传统 BIOS,不支持 UEFI。Enoch 和 Chimera 都属于 Chameleon 的分支。
下载
1 | # r2908 |
手动安装
Chameleon 关于启动的文件如下。
| 名称 | 作用 |
|---|---|
| fdisk440 | 帮助写入boot0、boot0hfs的工具,只会写入440bytes,不破坏MBR中的关于Windows的任何资料 |
| boot0 | 写入到MBR,boot0会搜索boot1h所在的第一个活动分区 |
| boot0hfs | 写入到MBR中,boot0hfs会搜索boot1h所在的第一个分区,无论是否设为活动分区 |
| boot1h | 写入到分区引导区块中,借此引导Boot文件 |
| boot | 放置于开机分区以完成开机引导程序 |
将文件复制到 EFI 分区后,Mac 下终端执行以下命令即可将 Chameleon 安装到 EFI 分区。
1 | # 以下dev/rdisk1表示磁盘号 |
目录层级
Extra/Extensions
相当于Clover的kexts/Other目录。
配置文件详解
开启 32 位
变色龙RC5 r75x版起,开启32位的方法修改为在/Extra/com.apple.Boot.plist内容加入下面设置。
变色龙RC5 r1105版起,开启32位的方法修改为在/Extra/org.chameleon.Boot.plist内容加入下面设置。
1 | <key>arch</key> |
启动参数
com.apple.Boot.plist 的参数如下。
| 参数 | 含义 | 备注 |
|---|---|---|
| -F | 忽略org.Chameleon.boot.plist中额外的启动标志 | |
| UseKernelCache=Yes | 使用内核缓存安装kexts,使用RAID安装Lion则必须开启 | |
| GraphicsEnabler=Yes | 打开Graphics Enabler功能 | 等同于Clover中的InjectAMD/Nvidia,注意运行WhateverGreen即可实现该效果 |
| IGPEnabler=Yes | 打开IGP启动器,帮助Mac在集显下更好的使用 | 等同于Clover中的InjectIntel,注意运行WhateverGreen并使用帧补丁即可实现该效果 |
| Theme=Default | 设置图形化界面,Default是布景主题名称,可改为任意第三方布景主题名称 | |
| Wait=Yes(No) | 点击按键后才开始启动内核 | |
| Quiet Boot=Yes(No) | 开机时不显示文字或图形选单,直接进入系统 | |
| Timeout=8 | 设定开机选择启动分区的秒数 | |
| Instant Menu=Yes | 强制显示分区选择菜单 | |
| Default Partition=hd(x,y)/(=UUID)/(=”Label”) | 设定预设开机分区,可使用代码、UUID、标签表示。x代表硬盘代号,y代表分区代号 | |
| Hide Partition=hd(x,y)/(=UUID)/(=”Label”) | 设定隐藏分区,可使用代码、UUID、标签表示,也可以添加多个参数以隐藏多个分区,使用空白键作分隔。x代表硬盘代号,y代表分区代号 | |
Rename Partition=hd(x,y)/(=UUID)/(="Label") <alias> |
设置分区名字,可使用代码、UUID、标签表示,也可以添加多个参数以命名多个分区,使用空白键作分隔。x代表硬盘代号,y代表分区代号,<alias>代表修改名称(因为使用空白键作分隔,所以命名不可包含空白键) |
|
| GUI=Yes(No) | 设定启用单图形化界面的开机选单,默认为YES | |
| Boot Banner=Yes(No) | 启用在图形化介面显示变色龙版本等讯息文字横幅,默认为YES | |
| Legacy Logo=Yes(No) | 启用在进入系统化面显示原苹果Logo,默认为NO | |
| SystemID= | 设定开机UUID | |
| RestartFix=Yes | 启用重新启动修正功能,建议开启 | |
| System-Type=(1),2,3 | 1=PC,2=笔记本,3=服务器,默认为1 | |
| DropSSDT=Yes(No) | 忽略BIOS中的SSDT,读取Extra资料中的SSDT资料,默认为NO | |
| GenerateCStates=Yes | 启用生成CPU C-State功能(C-State管理CPU电源状态,可以让CPU在闲置状态下处于不同低功耗状态) | |
| GeneratePStates=Yes | 启用生成CPU P-State功能(P-State管理CPU性能状态,可以让CPU在不同负载下改变功耗) | |
| EnableC2State=Yes | 启用C2 State功能(C2 State管理CPU电源状态,可以让CPU在闲置状态下处于低功耗状态) | |
| EnableC3State=Yes | 启用C3 State功能(C3 State管理CPU电源状态,可以让CPU在闲置状态下处于低功耗状态) | |
| EnableC4State=Yes | 启用C4 State功能(C4 State管理CPU电源状态,可以让CPU在闲置状态下处于低功耗状态。C2/C3/C4中,数字越大节能效果越明显) | |
| GraphicsEnabler=Yes(No) | 启用侦测显卡功能,可取代在DSDT添加的显卡参数,默认为NO | |
| UseNvidiaROM=Yes(No) | 启用Nvidia EEPRom功能,可以在不刷显卡BIOS的情况下使用修改的Rom,需要将ROM文件命名为VenderID_DeviceID.rom并放置Extra资料夹,如10de_0614.rom,默认为NO |
|
| UseAtiROM=Yes(No) | 启用ATI EEPRom功能,可以在不刷显卡BIOS的情况下使用修改的Rom,需要将ROM文件命名为VenderID_DeviceID.rom并放置Extra资料夹,如10de_0614.rom,默认为NO |
|
| VBIOS=Yes(No) | 仅针对NVIDIA显卡,启用读取显卡参数,可在显示卡资讯中显示ROM修正版资讯(如果在Extra资料夹放置显卡Rom文件,版本号会变成显卡Rom文件路径) | |
| EthernetBuiltIn=Yes(No) | 启用网卡内建设定侦测功能,默认为NO | |
| EHCIacquire=Yes(No) | 启用EHCI功能修正,非必要不开启,默认为NO | |
| UHCIreset=Yes(No) | 启用UHCI功能修正,非必要不开启,默认为NO | |
| USBLegacyOff=Yes(No) | 启用USB原生功能修正,非必要不开启,默认为NO | |
| USBBusFix=Yes(No) | 启用EHCI功能修正、UHCI功能修正、USB原生功能修正,非必要不开启,默认为NO | |
| Wake=Yes(No) | 启用睡眠唤醒功能,默认为YES | |
| ForceHPET=Yes(No) | 启用强制HPET功能,默认为NO | |
| ForceWake=Yes(No) | 启用强制使用睡眠资料映像功能,默认为NO | |
| SMBIOSdefaults=Yes(No) | 启用SMBIOS的预设值,默认为NO | |
| Scan Single Drive=Yes(No) | 启用扫描单一光驱模式,默认为NO | |
| Rescan=Yes | 启用光驱重新扫描模式 | |
| config=/Extra/com.apple.Boot.plist | 设定com.apple.Boot.plist的位置 | |
| SMBIOS=/Extra/SMBIOS.plist | 设定SMBIOS.plist的位置 | |
| DSDT=/Extra/DSDT.aml | 设定DSDT.aml的位置 | |
| md0=/Extra/Postboot.img | 设定Postboot.img的位置 | |
| WakeImage=/private/var/vm/sleepimage | 设定睡眠资料映像文件位置 | |
| kext=/Extra/Extensions | 设定kext/mkext所在位置 | |
| ShowInfo=No | 取消硬盘分卷与解析度细节显示 | |
| CSTUsingSystemIO=Yes | 启用新式生成CPU C-State功能 | |
AtiConfig=<cardcfg> |
设定ATI显卡Framebuffer,更有效驱动显示卡,如AtiConfig=Uakari | |
AtiPorts=<value> |
设定ATI显卡接口数目 | |
display_0=<value> |
写入Nvidia显卡NVDA,Display-A@0的display-cfg参数 | |
display_1=<value> |
写入Nvidia显卡NVDA,Display-B@1的display-cfg参数 | |
| InjectIntel-ig=x | 注入ig-platform-id,适用于HD 4000/4400/4600/5000/Iris,x为Intel iGPU的ID | |
| IntelAzulFB=x | 注入可用的ig-platform-id,适用于HD4400/4600/5000/Iris,x范围为0-15 | |
| IntelCapriFB=x | 注入可用的ig-platform-id,适用于HD4000,x范围为0-11 | |
| EnableDualLink=Yes/No | 注入Intel iGPU双Dual信息,对于1366x768分辨率使用No,对于1600x900或更高分辨率使用Yes | |
| PCIRootUID=0 | 内核将在内部主板或CPU GFX寻找视频硬件 | |
| PCIRootUID=1 | 内核将在外部/PCIe插槽寻找视频硬件 |
对于 PCIRootUID 应当使用的参数,可通过查看 DSDT 确定。在 DSDT 中查找 PCI0 设备,示例如下。
1 | # 应当使用PCIRootUID=1 |
SMBIOS.plist 参数如下。
| 参数 | 含义 |
|---|---|
| SMfamily=MacPro (Mac) (MacBookPro) | 设定产品类型(iMac设定会影响声卡使用时产生电流声,改用MacPro即可) |
| SMproductname=MacPro3,1 (iMac11,1) (MacBookPro6,1) | 设定产品型号(非Nehalem系列处理器不要设定为MacPro4,1,需设定为MacPro3,1或其它) |
| SMmanufacturer=Apple Inc. | 设定制造者 |
| SMbiosvendor=Apple Inc. | 设定BIOS供应商 |
| SMboardmanufacturer=Apple Inc. | 设定主板制造者 |
| SMboardproduct=Mac-F221BEC8 | 设定主板型号 |
| SMbiosversion=MP41.88Z.0081.B04.0903051113 | 设定BIOS版本 |
| SMserial=CK916000000 | 设定序号 |
| SMsystemversion=1.0 | |
| SMcputype=1793(1537) | 设定处理器的类型(Core 2 Solo=257,Core 2 Duo=769,Core 2 Quad=1281,Core i5=1537,Core i7=1793) |
| SMmaximalclock=2926 | 设定处理器内频(主频)=外频X倍频(内频/主频=CPU Frequency,外频=Base Clock Frequency,倍频=CPU Clock Ratio) |
| SMexternalclock=133 | 设定处理器外频 |
| SMbusspeed=4800 | 设定总线速度 |
| SMmemtype=24 | 设定内存规格(DDR2=19,DDR3=24) |
| SMmemspeed=1333 | 设定内存时脉(DDR2 667=667,DDR2 800=800,DDR3 1066=1066,DDR3 1333=1333,DDR3 1600=1600) |
| SMmemmanufacturer_1=Kingston | 设定内存制造商 |
| SMmemmanufacturer_2=Kingston | 设定内存制造商 |
| SMmemmanufacturer_3=Kingston | 设定内存制造商 |
| SMmemmanufacturer_4=Kingston | 设定内存制造商 |
| SMmemmanufacturer_5=Kingston | 设定内存制造商 |
| SMmemmanufacturer_6=Kingston | 设定内存制造商 |
| SMmempart_1=9905458-009.A00LF | 设定内存零件编号 |
| SMmempart_2=9905458-009.A00LF | 设定内存零件编号 |
| SMmempart_3=9905458-009.A00LF | 设定内存零件编号 |
| SMmempart_4=9905458-009.A00LF | 设定内存零件编号 |
| SMmempart_5=9905458-009.A00LF | 设定内存零件编号 |
| SMmempart_6=9905458-009.A00LF | 设定内存零件编号 |
| SMmemserial_1=76344B29 | 设定内存序号 |
| SMmemserial_2=76344B29 | 设定内存序号 |
| SMmemserial_3=76344B29 | 设定内存序号 |
| SMmemserial_4=76344B29 | 设定内存序号 |
| SMmemserial_5=76344B29 | 设定内存序号 |
| SMmemserial_6=76344B29 | 设定内存序号 |
NVRAM 支持
Chameleon本身不保存EFI中的内容,因此NVRAM不起作用,需要FileNVRAM模块把nvram文件从磁盘提前加载到内存中。同时该模块向系统插入一个kext,在更改NVRAM时写入内容到/Extra/nvramxxxxxxxx.plist。
常见问题
引导器启动
Boot0: error
一般出现在引导 Advanced Format 4 格式的 HDD 上。下载以下文件并复制 boot1h 到 USB 安装盘根目录。
1 | https://www.dropbox.com/s/owacbzyriibee5o/boot1h.zip |
引导到安装程序后,打开磁盘工具,取消挂载系统盘后打开终端,输入以下命令即可。
1 | # identifier为系统盘的索引号,如disk0s2 |
引导启动
找不到 mach_kernel
打开 org.chameleon.Boot.plist,修改以下内容。
1 | <key>Kernel</key> |
若无效,则修改为以下内容。
1 | <key>Kernel</key> |
BootThink
支持GUID/MBR分区表,2.5.2版可引导Lion。启动时按F8可键入启动参数。
运行Darwin/MBR/SetupMBR.bat,可将BootThink设为第一引导。
安装
在苹果系统下运行安装包。BootThink 提供以下安装方式。
| 安装方式 | 说明 |
|---|---|
| 勾选Boot1h | 将boot1h文件写入到所选择安装分区的某个扇区(即dd if=boot1h of=/dev/rdiskXsY) |
| 勾选Boot1h和boot0 | 除以上操作外,还将boot0文件写入整个磁盘的MBR扇区(即fdisk -f boot0 -u -y /dev/rdiskX) |
| 勾选EFI | 安装到EFI分区 |
卸载
执行 Darwin 文件夹下的 Uninstall。重启计算机后手动删除系统目录下的 Darwin 文件夹、boot、nbldr 和 nbldr.mbr 即可。
目录层级
以Snow Leopard为例,引导时将加载Darwin/rc/mkext、Darwin/System/LibrarySL/Extensions.mkext和Darwin/System/LibrarySL/Extensions文件夹下的所有kexts。
若需要安装kexts,放置到Darwin/System/LibrarySL/Extensions即可。
为防止 kexts 冲突,建议删除以下 kexts。
1 | Darwin/System/LibrarySL/Extensions/Extensions.mkext |
若为Lion,则加载Darwin/System/LibraryLion/Extensions。
引导启动
BootThink会优先使用系统/Library/Preferences/SystemConfiguration下的com.apple.Boot.plist启动配置文件。若不存在则会使用Darwin下的 com.apple.Boot.plist文件。
若需要加载DSDT.aml/SMBIOS.plist,可以直接将此文件放到Darwin下,BootThink会自动加载。
启动参数
| 参数 | 含义 |
|---|---|
| b=x | 设置当前选中分区为默认启动分区,延时x秒钟启动(0<=x<=32767) |
| b=~ | 取消默认启动分区设置 |
| p=- | 只显示可引导分区 |
| p=+ | 显示恢复分区 |
| g=1024x768x32 | 设置默认启动分辨率为1024x768,深度为32 |
| g=~ | 取消分辨率设置 |
| -x32 | 强制使用32位模式启动 |
Refind
1 | https://www.rodsbooks.com/refind/installing.html |
其它
包括 XPC Bootloader 等。
附录
旧版资源
1 | https://github.com/OSXLatitude/EDP |
工具
ProperTree
1 | https://github.com/corpnewt/ProperTree |
OpenCore Configurator
1 | https://mackie100projects.altervista.org/download-opencore-configurator/ |
本机文件内容
Clover 结构
Mojave/Catalina
1 | ├── ACPI |
Big Sur
1 | ├── ACPI |
OpenCore 结构
Catalina
1 | ├── ACPI |
Big Sur
1 | ├── ACPI |
参考教程
OpenCore引导教程
https://blog.daliansky.net/From-Clover-To-OpenCore.html
https://blog.skk.moe/post/from-clover-to-opencore/
https://blog.xjn819.com/?p=543
https://khronokernel-2.gitbook.io/opencore-vanilla-desktop-guide/
https://dortania.github.io/OpenCore-Desktop-Guide/
https://kirainmoe.com/blog/post/opencore-migration-experience/#13-%e4%bf%ae%e6%94%b9-configplist
热补丁制作教程
https://xstar-dev.github.io/hackintosh_advanced/Guide_For_Battery_Hotpatch.html
http://yqp7js.coding-pages.com/2020/05/16/%E8%BF%9B%E9%98%B6%EF%BC%9A%E7%94%B5%E6%B1%A0%E7%83%AD%E8%A1%A5%E4%B8%81%EF%BC%88Battery-Hotpatch%EF%BC%89%E4%B9%8B%E8%B7%AF/
-V进mac不滚代码直接卡++加号或者加号下几行代码Error allocating 0x11c8d pages at……卡住解决方案
用热补丁修理你的触摸板
http://yqp7js.coding-pages.com/2020/05/17/%E7%94%A8%E7%83%AD%E8%A1%A5%E4%B8%81%E4%BF%AE%E7%90%86%E4%BD%A0%E7%9A%84%E8%A7%A6%E6%91%B8%E6%9D%BF%EF%BC%88TouchPad-Hotpatch%EF%BC%89/
Dortania’s OpenCore Install Guide
https://thrrip.github.io/OpenCore-Install-Guide/
acidanthera/bugtracker
https://github.com/acidanthera/bugtracker/issues/901
https://github.com/acidanthera/bugtracker/issues/1193
https://github.com/acidanthera/bugtracker/issues/1222
https://github.com/acidanthera/bugtracker/issues/424
https://github.com/acidanthera/bugtracker/issues/995
macOS 11 Big Sur on Unsupported Macs Thread
https://forums.macrumors.com/threads/macos-11-big-sur-on-unsupported-macs-thread.2242172/page-29?post=28604333#post-28604333
Install macOS Big Sur on a Newly Unsupported Mac With WI-FI Working: My iMac Late-2012
Making WiFi work on Big Sur unsupported Macs with “failed with 66” error
Stuck on [ PCI CONFIGURATION BEGIN ] npci=0x2000 not working
[Hack] Hackintosh - Install Mac OS X 10.6.8 (Snow Leopard) on ThinkPad X61T (Tablet)
21.5” iMac (Edu, Slim Alum., Early 2013) / 3.3 GHz Core i3 / ME699LL/A
‘[IOBluetoothHCIController]…– Missing Bluetooth Controller Transport!’
How to Install Mac OS System 1.0 - 7.5 in Mini vMac and Run Classic 68k Applications
Can you virtualize PowerPC versions of Mac OS X on Intel Macs?
FakeSMC, VirtualSMC, LAN, Sound, Graphics - где взять кексты?
[交流] 新手常见(五国)(-v图)错误解决(原版,破解kernel,补丁kext下载)
https://blog.csdn.net/JoeBlackzqq/article/details/29359827
Alternate Guide #1 – OS X Snow Leopard Install using Retail DVD
[教程] 新手安装指南:一步一步在Windows安装苹果雪豹系统
https://blog.csdn.net/Mamong/article/details/6791740
/r/Hackintosh Multiboot
https://github.com/midi1996/JBOG/blob/master/Multiboot.md
[教程] 【变色龙系列一】Chameleon手动安装说明+ Chameleon 2 RC5 Rev580【11/03更新】
[教程] 【变色龙系列二】com.apple.Boot.plist + SMBIOS.plist设定说明【09/22更新】
[GUIDE] Snow Leopard with 100% vanilla /S/L/E - Comprehensive DSDT patching guide
Οδηγός Εγκατάστασης MacOSX Lion 10.7 στο project PC (GA-EP35-DS3P). v1.1
The Always Up-to-Date Guide to Building a Hackintosh (macOS Sierra)
How to easily install Mac OS X Lion on your PC / Laptop Osx86 Hackintosh Walkthrough / Tutorial
Cómo activar Intel HD 2500 ga-z77-d3h en OS X 10.8.5 Mountain Lion
Retail OS X Install (10.5.7) on Gigabyte GA-EX58-UD5 (Core i7) Mobo, Scripted
Dual Booting Windows 7 and Snow Leopard on a HP dv5 Laptop - The Definitive Guide!
How to Build a Hackintosh with Snow Leopard, Start to Finish
Install Snow Leopard on Your Hackintosh PC, No Hacking Required
Install OS X 10.8 Mountain Lion on PC Hackintosh [Bootable USB]
How to Build a Hackintosh Mac and Install OS X in Eight Easy Steps
Install Mac OS X Leopard OSx86 on PC Dual Boot Windows 7, Vista in 9 Easy Steps
The Dual boot Tutorial With installing (Snow) Leopard and Windows 7 on a PC OSX86 Tutorial
Install Mac OS X Leopard OSx86 on PC Dual Boot Windows 7, Vista in 9 Easy Steps
ZDNet.de - Praxis: Installation von Mac OS X 10.6 auf einem PC
The Dual boot Tutorial With installing (Snow) Leopard and Windows 7 on a PC OSX86 Tutorial
Using a British/UK Windows keyboard with an Apple Mac in OS X (3)
Install Mac OS X Leopard OSx86 on PC Dual Boot Windows 7, Vista in 9 Easy Steps
Como instalar o Windows XP, Mac OSX86 10.5.6 e o Linux Ubuntu 9.04 no PC com Triple Boot!
Installing OS X Snow Leopard
http://lnx2mac.blogspot.com/2010/07/installing-os-x-snow-leopard-part-two.html
http://lnx2mac.blogspot.com/2010/07/installing-os-x-snow-leopard-part-three.html
[Guide] Alternative to the minStolenSize patch with 32mb DVMT-prealloc
Tweaking Your System: Install Chameleon, DSDT, & Extras to EFI Partition
Install Snow Leopard on a PC / Laptop (OSX86) Tutorial/guide
Установка macOS Catalina 10.15 на intel PC
https://applelife.ru/threads/ustanovka-macos-catalina-10-15-na-intel-pc.2944136/page-39#post-810111
HP Compaq DC7900 SFF
https://github.com/khronokernel/trashOS/tree/master/HP-Compaq-DC7900
SheepShaver Brings the Classic Mac OS to Intel Macs and Leopard
Olarila
https://www.olarila.com/topic/5794-hackintosh-guide-install-macos-with-vanilla-olarila-image-step-by-step-install-and-post-install-windows-linux-or-mac/
https://www.olarila.com/topic/13072-dual-boot-guide-clover-and-open-core/
https://www.olarila.com/topic/6185-guide-how-to-create-a-personal-vanilla-macos-highsierra-mojave-catalina-big-sur-image-or-usb-installer/
https://www.olarila.com/topic/12857-how-to-mount-efi-partition-on-macos-or-windows/
https://www.olarila.com/topic/9530-install-macos-catalina-big-sur-on-mobos-serie-300-400-500-with-intel-8th-9th-10th-11th-gen-desktop-processors-using-opencore-or-clover-bootloader/
https://www.olarila.com/topic/6074-guide-easy-audio-solution-with-applealc-clover-and-opencore/
https://www.olarila.com/topic/923-dsdt-patch-requests/
https://www.olarila.com/topic/9089-olarila-big-sur-beta-6-vanilla-image-usb-installation/
https://www.olarila.com/topic/13019-guide-dual-boot-with-opencore-with-full-acpi-and-real-vanilla-solution/
https://www.olarila.com/topic/14220-video-guide-usb-port-mapping-guide-2021-bigsur-113-with-no-xhci-port-limit/
https://www.olarila.com/topic/8918-opencore-vanilla-guide-step-by-step-full-dsdt-patched-or-ssdt/
https://www.olarila.com/topic/6181-guide-native-usb-fix-for-desktops-no-injectorkext-required-skylake/
https://www.olarila.com/topic/6878-guide-native-usb-fix-for-notebooks-no-injectorkext-required/
https://www.olarila.com/topic/9390-video-guide-usb-port-mapping-with-hackintool/
https://www.olarila.com/topic/5676-folders-for-all-chipsets-clover-and-opencore/
https://www.olarila.com/topic/5295-guide-hardware-encoder-hardware-decoder-video-processing-hevc-support-intel-quick-sync/
https://www.olarila.com/topic/8930-guide-easy-brightness-hotkey-remapping/
https://www.olarila.com/topic/12709-guide-all-supported-amd-cards-clover-and-opencore-fake-id-method/
https://www.olarila.com/topic/6420-guide-mobile-intel-hd-graphics-clover-or-opencore/