黑苹果引导OpenCore 简易教程&案例分享
OpenCore的大部分配置跟Clover实际上是差不多的,所以如果你熟悉CLOVER的话,再来配置OC应该是一件比较简单的事OpenCore的优点
OpenCore官方仓库:https://github.com/acidanthera/OpenCorePkg (请从这里下载OC的最新版,如果不知道Github怎么使用,建议先百度学习一下,放心,很简单)
下载最新的release后,里面会有一个Configuration.pdf,这里面包含了OC各项功能的详细说明,当然,如果你觉得难懂,而且英语还可以的话,可以看看 https://khronokernel-2.gitbook.io/opencore-vanilla-desktop-guide,当然,你也看这篇帖子接下来的内容。
plist简单介绍:
因为OpenCore Configurator的更新进度还没有跟上OC的更新进度,所以有必要使用文本编辑器来编辑OC的config.plist,这里推荐使用XCode或者vs code。
首先介绍一下plist中的一些名词(如果觉得难懂可以跳过):
你打开的时候应该在最上面会有两行以 # 开头的注释,这个可以删可以不删,没有影响。
然后点开UEFI -> Drivers,我们需要在这个节点(也就是上面提到的plist对象,一个节点便可以当成一个对象)下面指定需要加载的driver。第一次打开的时候可以看到已经写好了几项,这时你可以直接修改那些项的Value,当你把鼠标移动到那一行上面时,会有一个加号和减号,点击加号可以在同级节点上添加一行,点击减号可以删掉这一行。因为我自己使用了Fusion Driver,所以需要把ApfsDriverLoder.efi换成apfs.efi,添加完成后如下图
注意,这里的每一行的数据类型都是string,Value就是OC/Drivers目录下的文件名。
2.2 Kexts
和Clover一样,这下面放的是启动macOS所必须的内核扩展驱动
首先介绍几个必要的驱动:
和前面的Drivers一样,将驱动放入Kexts目录下后,还需要在config.plist中指定后才能加载。
同样的先用XCode打开config.plist,然后点开Kernel -> Add,这里便是指定加载驱动的地方,第一次点开的时候里面应该有了一些驱动,如果这些驱动你也需要的话,可以不需要修改。随便点开一个item,可以看见如下的结构
先解释一下其中的每一项:
注意,每一行的数据类型必须要对应,不能随意!
我自己的添加完后如下图:
S:比如VoodooPS2Controller.kext这种包含插件的,插件也要单独指定,如下图
2.3 ACPI
OC同样也可以自己指定DSDT或者SSDT的补丁,将aml文件放入OC/ACPI目录下,然后打开config.plist,找到ACPI -> Add,第一次打开如下图:
每一个item便是一个aml文件,其中每一项的意义如下:
然,OC也提供了ACPI的改名功能。首先找到ACPI -> Patch,默认应该是这样的
如果你不需要默认的这两个patch,可以直接删掉,或者改动其中的某些字段,先来介绍一下其中的每一项:
对于macOS 10.15,需要将ACPI中的主EC名改为EC,下图是我自己的一些patch
这些都做完后,便可以开始尝试启动了
3. NVRAM
NVRAM是OC中很重要的一个部分,用于保存系统的一些有用信息,下次开机时可以直接使用,比如音量、亮度等等,对于非Z370 300系列的主板,可能都需要模拟NVRAM。
OC使用nvram.plist来保存nvram的字段,首先来生成nvram.plist。
使用XCode打开config.plist:
打开下载的opencore目录,将其中的Utilities/LogoutHook复制到/Users/<你的用户名>,比如 /Users/abc,然后打开终端,执行:
复制代码
4. DeviceProperties
这一部分和Clover的Devices -> Properties 一样,如果你之前已经配置好了CLOVER,可以用XCode打开CLOVER的config.plist
然后将上图中红色的部分直接复制到OC config.plist的DevicesProperites下。
如果没有配置过CLOVER,可以参考Whatevergreen的启动参数,系统启动成功后再用Hackintool可以很方便的完成显卡和声卡的配置。
5. 启动参数
OC的启动参数在config.plist的Root -> NVRAM -> Add -> 7C436110-AB2A-4BBB-A880-FE41995C9F82中,刚开始的时候加个-v和-keepsyms=1应该就行了,其他已经的启动参数如下:
6. SMBIOS
OC设置SMBIOS比较繁琐,首先打开config.plist,然后找到Root -> PlatformInfo
打开Clover Configurator,或者其他能找到macbook详细的SMBIOS的工具或者网站,然后把对应的信息填入OC config.plist的PlatformInfo中,因为字段比较多,所以比较繁琐,自己找到config.plist中对应的字段填上去就行。
7. 去除调试信息
8. 常见问题以及注意事项
如果你遇到了这里没有提及的问题以及解决方案,可以回帖说明,以供其他朋友参考
9.Debug这部分的设置都在Misc->Debug中
9.1 保存Log到文件
将Misc->Debug->Target到第6位设置为0即可,下面给出一个示例:
- 一般来讲,OpenCore的启动速度会快于Clover,因为OpenCore内置的补丁更少。
- OpenCore对FIleVault(文件保险箱)的支持更好,不需要禁用SIP,甚至可以通过Vaulting来支持安全启动。
- OpenCore通过boot.efi来支持启动快捷键:开机的时候按住Option或者Esc可以选择启动设备,按住Command + R进入恢复分区,或者按住Command + Option + P + R重置NVRAM。
- OpenCore的设计着眼于未来,并使用现代方法加载第三方内核扩展,而不会像Clover一样破坏系统的完整性保护(SIP)。
- 通过读取启动磁盘设置的NVRAM变量,就可以像Mac一样支持Bootcamp选择切换和引导设备。
- 以后AptioMemoryFix的开发直接与OpenCore绑定,特别是通过FwRuntimeVariable.efi作为扩展将其包含到OpenCore中。
- UEFI和传统模式都支持
- 掩码补丁意味着macOS更新几乎不会破坏AMD的黑苹果系统,所以AMD OSX修补程序支持High Sierra,Mojave和Catalina的所有版本。 所有未来的AMD OSX开发都与Opencore相关,因此对于10.15.2+,您将需要OpenCore。
OpenCore官方仓库:https://github.com/acidanthera/OpenCorePkg (请从这里下载OC的最新版,如果不知道Github怎么使用,建议先百度学习一下,放心,很简单)
下载最新的release后,里面会有一个Configuration.pdf,这里面包含了OC各项功能的详细说明,当然,如果你觉得难懂,而且英语还可以的话,可以看看 https://khronokernel-2.gitbook.io/opencore-vanilla-desktop-guide,当然,你也看这篇帖子接下来的内容。
plist简单介绍:
因为OpenCore Configurator的更新进度还没有跟上OC的更新进度,所以有必要使用文本编辑器来编辑OC的config.plist,这里推荐使用XCode或者vs code。
首先介绍一下plist中的一些名词(如果觉得难懂可以跳过):
你打开的时候应该在最上面会有两行以 # 开头的注释,这个可以删可以不删,没有影响。
然后点开UEFI -> Drivers,我们需要在这个节点(也就是上面提到的plist对象,一个节点便可以当成一个对象)下面指定需要加载的driver。第一次打开的时候可以看到已经写好了几项,这时你可以直接修改那些项的Value,当你把鼠标移动到那一行上面时,会有一个加号和减号,点击加号可以在同级节点上添加一行,点击减号可以删掉这一行。因为我自己使用了Fusion Driver,所以需要把ApfsDriverLoder.efi换成apfs.efi,添加完成后如下图
注意,这里的每一行的数据类型都是string,Value就是OC/Drivers目录下的文件名。
2.2 Kexts
和Clover一样,这下面放的是启动macOS所必须的内核扩展驱动
首先介绍几个必要的驱动:
- VirtualSMC 模拟SMC,在OC下推荐使用VirtualSMC而不是FakeSMC
- Lilu 非常重要的一个kext,拥有很多强大的插件
- WhateverGreen 用于驱动显卡以及自动完成显卡相关的patch
- AppleALC 用于驱动AppleHDA
- RealtekRTL8111 用于驱动Intel网卡
- AppleMCEReporterDisabler 如果使用MacPro6,1 / MacPro7,1 /iMacPro 7,1 这几个SMBIOS,可能需要这个驱动来解决一些启动时的错误
- 完整的kext列表
和前面的Drivers一样,将驱动放入Kexts目录下后,还需要在config.plist中指定后才能加载。
同样的先用XCode打开config.plist,然后点开Kernel -> Add,这里便是指定加载驱动的地方,第一次点开的时候里面应该有了一些驱动,如果这些驱动你也需要的话,可以不需要修改。随便点开一个item,可以看见如下的结构
先解释一下其中的每一项:
- BundlePath:驱动的相对路径,如果是放在OC/Kexts下的话,直接填驱动的完整文件名即可
- Comment:备注,可写可不写
- Enabled:是否使用该驱动,XCode里面可以直接选择YES或者NO,如果是用文本编辑器可以填<true/>或者<false/>
- ExecutablePath:驱动中可执行文件的路径,一般都在驱动的Contents/MacOS目录下,填相对路径即可
- MaxKernel: 指定最高的内核版本,如果macOS的内核版本高于这个值便不会加载
- MinKernel: 指定最低的内核版本,如果macOS的内核版本低于这个值便不会加载
- PlistPath:指定驱动的plist文件路径,相对路径,一般就在驱动的Contents目录下
注意,每一行的数据类型必须要对应,不能随意!
我自己的添加完后如下图:
S:比如VoodooPS2Controller.kext这种包含插件的,插件也要单独指定,如下图
2.3 ACPI
OC同样也可以自己指定DSDT或者SSDT的补丁,将aml文件放入OC/ACPI目录下,然后打开config.plist,找到ACPI -> Add,第一次打开如下图:
每一个item便是一个aml文件,其中每一项的意义如下:
- Comment:备注,比如电池的hotpatch,你可以用battery备注一下
- Enabled:是否使用这个patch或者说aml文件
- Path:aml文件的目录,将aml文件放入ACPI目录后填相对目录即可,也就是aml的完整文件名
然,OC也提供了ACPI的改名功能。首先找到ACPI -> Patch,默认应该是这样的
如果你不需要默认的这两个patch,可以直接删掉,或者改动其中的某些字段,先来介绍一下其中的每一项:
- Comment:备注
- Count:该patch被应用的次数,0表示不限制
- Enabled:是否使用该patch,类型是boolean
- Find:需要查找的值,类型是data,在XCode中可以直接输入"<十六进制>"即可,比如要查找5f513131,可以直接输入<5f513131>
- Replace:查找后需要替换的值,类型同Find
- 其他类型一般默认即可
对于macOS 10.15,需要将ACPI中的主EC名改为EC,下图是我自己的一些patch
这些都做完后,便可以开始尝试启动了
3. NVRAM
NVRAM是OC中很重要的一个部分,用于保存系统的一些有用信息,下次开机时可以直接使用,比如音量、亮度等等,对于非Z370 300系列的主板,可能都需要模拟NVRAM。
OC使用nvram.plist来保存nvram的字段,首先来生成nvram.plist。
使用XCode打开config.plist:
- Booter -> Quirks -> DisableVariableWrite : YES
- NVRAM -> LegacyEnable : YES
- Misc -> Security -> ExposeSensitiveData : 3
- NVRAM -> LegacySchema : NVRAM变量集,生成nvram.plist后,可以将生成的变量添加进来,如果有同名的则不需要
打开下载的opencore目录,将其中的Utilities/LogoutHook复制到/Users/<你的用户名>,比如 /Users/abc,然后打开终端,执行:
- sudo defaults write com.apple.loginwindow LogoutHook /Users/你的用户名/LogoutHook/LogoutHook.command
4. DeviceProperties
这一部分和Clover的Devices -> Properties 一样,如果你之前已经配置好了CLOVER,可以用XCode打开CLOVER的config.plist
然后将上图中红色的部分直接复制到OC config.plist的DevicesProperites下。
如果没有配置过CLOVER,可以参考Whatevergreen的启动参数,系统启动成功后再用Hackintool可以很方便的完成显卡和声卡的配置。
5. 启动参数
OC的启动参数在config.plist的Root -> NVRAM -> Add -> 7C436110-AB2A-4BBB-A880-FE41995C9F82中,刚开始的时候加个-v和-keepsyms=1应该就行了,其他已经的启动参数如下:
- acpi_layer=0xFFFFFFFF
- acpi_level=0xFFFF5F
- batman=value
- batman-nosmc=1
- cpus=VALUE
- debug=VALUE 如果出现panic时不想让电脑重启,可以添加debug=0x100
- io=VALUE
- keepsyms=1 (显示panic log)
- nv_disable=1 (禁用N卡)
- nvda_drv=1
- npci=0x2000
- lapic_dont_panic=1
- slide=VALUE
- smcdebug=VALUE
- -s 单用户模式
- -v 啰嗦模式
- -x 安全模式
- no_compat_check
- nehalem_error_disable
6. SMBIOS
OC设置SMBIOS比较繁琐,首先打开config.plist,然后找到Root -> PlatformInfo
打开Clover Configurator,或者其他能找到macbook详细的SMBIOS的工具或者网站,然后把对应的信息填入OC config.plist的PlatformInfo中,因为字段比较多,所以比较繁琐,自己找到config.plist中对应的字段填上去就行。
7. 去除调试信息
- NVRAM -> 7C436110-AB2A-4BBB-A880-FE41995C9F82 -> boot-args: 去掉-v
- UEFI -> Protocols: ConsoleControl设置为Yes或者True或者OCC中打勾
- UEFI -> Quirks: ProvideConsoleGop、IgnoreTextInGraphics、SanitiseClearScreen均设置为Yes
- Misc -> Boot: ConsoleBehaviourOs设置为Graphics、ConsoleBehaviourUi设置为Text
8. 常见问题以及注意事项
如果你遇到了这里没有提及的问题以及解决方案,可以回帖说明,以供其他朋友参考
- 如果启动后发现USB全挂了(驱动都放好的前提下),可以尝试:UEFI -> Quirks -> ReleaseUsbOwnership : YES
- OC的ACPI改名不能作用与自己的hotpatch,制作hotpatch时要注意一下
- 如果启动OC时出现"failed to parse xx field of type x",说明配置文件中的字段使用了OC不能识别的类型,比如“failed to parse real field of type 1”,说明config中有real这个字段的值,在文本编辑器中搜索real,可以看到<real>xx</real>,将其改为<integer>xx</integer>即可
9.Debug这部分的设置都在Misc->Debug中
9.1 保存Log到文件
将Misc->Debug->Target到第6位设置为0即可,下面给出一个示例:
- Target的第0位决定是否打印log,所以想要看到log这一位必须设置为,即现在的Target为:0000 0001
- Target的第6为决定是否将log输出到文件,将这一位设置为1即可,现在的Target为:0100 0001