Win10论坛

Win10正式版系统下载主题平板

重定义Modern UI,打造完美Windows全新体验

Windows10下载|安装|新手宝典|必备软件

搜索
查看: 32853|回复: 166

[其它] OpenCore 简易教程 以及 案例分享     [复制链接]

Rank: 2Rank: 2

UID
4838296
帖子
150
PB币
155
贡献
0
技术
0
活跃
346
发表于 2019-10-14 13:01:41 |显示全部楼层
本帖最后由 RMTTT 于 2020-2-16 21:26 编辑

注意:此教程已不再更新,更新地址改为:https://rmtt.gitbook.io/opencore-vanilla-guide/

OpenCore的大部分配置跟CLOVER实际上是差不多的,所以如果你熟悉CLOVER的话,再来配置OC应该是一件比较简单的事

OpenCore官方仓库:https://github.com/acidanthera/OpenCorePkg (请从这里下载OC的最新版,如果不知道Github怎么使用,建议先百度学习一下,放心,很简单)

下载最新的release后,里面会有一个Configuration.pdf,这里面包含了OC各项功能的详细说明,当然,如果你觉得难懂,而且英语还可以的话,可以看看 https://khronokernel-2.gitbook.io/opencore-vanilla-desktop-guide,当然,你也看这篇帖子接下来的内容。
PS: 不管是OC或是其他驱动,请尽量去官方仓库下载最新的稳定版,由于帖子里放太多超链接会发不出来,所以驱动下载地址都放到群公告里了
OC交流QQ群: 786201418

以下开始正文:
1. plist简单介绍
因为OpenCore Configurator的更新进度还没有跟上OC的更新进度,所以有必要使用文本编辑器来编辑OC的config.plist,这里推荐使用XCode或者vs code。
首先介绍一下plist中的一些名词(如果觉得难懂可以跳过):
  • plist:plist是XML的一个子集,更标准一点的名字应该叫:com.apple.property-list。plist由很多plist对象组成,这些对象一起组成了一个树形的结构。可以使用plutil来检查plist格式是否正确,具体用法:打开终端,进入你的plist文件所在目录,输入
    1. plutil -lint <filename>
    复制代码
    如果格式正确会输出OK,如图                                                                          更多关于plist的信息可以参考:https://www.apple.com/DTDs/PropertyList-1.0.dtd (语法),或者在终端里面输入 man plutil
  • plist节点的数据类型:集合类型:plist array, plist dictionary, plist key    值类型:plist string,plist data, plist date, plist boolean, plist integer, plist real
  • plist对象(object):plist数据类型的具体实例,也可以把它当作一个普通的值(比如数字1,字符串"abcd"等等)
  • plist数组(array):plist数组可以包含0个或者多个plist对象,在plist中用<array></array>表示
  • plist字典(dictionary):plist字典是一个key-value映射,可以包含0个或多个plist键值,在plist中用<dict> </dict>
  • plist键值(key):由ascii码组成的字符串,在plist中用<key> </key>表示
  • plist字符串(string):由ascii码组成的字符串,在plist中用<string> </string>表示
  • plist data:经过base64编码的数据,在plist中用<data></data>表示
  • plist布尔值(boolean):表示真假,真用<true/>表示,假用<false/>表示
  • plist整数(Integer):普通的整数,在plist中用<integer></integer>表示
还有一些其他的类型,但是在OC的config中用不到,就不做介绍了,具体实例可以参考OC的Sample.plist。
2. 配置
OC下载解压后的EFI目录应该是这样的

下面开始来一个一个完善,不过首先需要把OC/Docs下面的SampleFull.plist复制到EFI/OC下,然后改名为config.plist
2.1 Drivers
CLOVER使用的driver在OC中不一定兼容,要注意一下(完整的列表参考OC的Configuration.pdf 11.2)。对于大部分电脑,有如下3个driver应该就能启动了。
  • ApfsDriverLoader.efi   识别APFS分区
  • VBoxHfs.efi  识别HFS分区
  • FwRuntimeServices.efi  用来替换AptioMemoryFix.efi
但如果想要更好的使用OC,最好还需要加上如下两个driver:
  • UsbKbDxe.efi   当OC的内置驱动不工作时,加上这个efi可以提供Apple热键和FileVault的支持。
  • VirtualSMC.efi  配合VirtualSMC.kext使用,不能和FakeSMC.kext同时使用。
和Clover不同的是,仅仅把driver放到Drivers目录下并不会让OC加载这些driver,还需要在config.plist中指定这些driver。首先打开config.plist,这里使用的是XCode

你打开的时候应该在最上面会有两行以 # 开头的注释,这个可以删可以不删,没有影响。
然后点开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目录下

注意,每一行的数据类型必须要对应,不能随意!
我自己的添加完后如下图:


PS:比如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的完整文件名
我自己使用的patch如下图,不同的电脑有patch,请使用适合的patch


当然,OC也提供了ACPI的改名功能。首先找到ACPI -> Patch,默认应该是这样的:

如果你不需要默认的这两个patch,可以直接删掉,或者改动其中的某些字段,先来介绍一下其中的每一项:
  • Comment:备注
  • Count:该patch被应用的次数,0表示不限制
  • Enabled:是否使用该patch,类型是boolean
  • Find:需要查找的值,类型是data,在XCode中可以直接输入"<十六进制>"即可,比如要查找5f513131,可以直接输入<5f513131>
  • Replace:查找后需要替换的值,类型同Find
  • 其他类型一般默认即可
这一功能跟Clover是一样的,如果你已经有了clover的配置,可以直接复制,推荐使用Clover Configurator,其中的Acpi -> Patches便是你需要的

对于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后,可以将生成的变量添加进来,如果有同名的则不需要
同时,FwRuntimeServices.efi也是必须的
打开下载的opencore目录,将其中的Utilities/LogoutHook复制到/Users/<你的用户名>,比如 /Users/abc,然后打开终端,执行:
  1. 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中对应的字段填上去就行。

其中的MLB和ROM可以在Clover Configurator -> Rt Variables中生成。


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
0100 0001转换为10进制:65,所以在Target中填入65即可
之后的每次启动,OC都会在你的ESP目录生成一个日志文件,如图:



其他完善的项目以后再慢慢添加,或者你可以去找其他资料参考,也可以回帖提供你的方案







附件: 你需要登录才可以下载或查看附件。没有帐号?注册
6

查看全部评分

头像被屏蔽

UID
516149
帖子
2454
PB币
1695
贡献
0
技术
3
活跃
669
发表于 2019-10-14 13:40:07 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

Rank: 7Rank: 7Rank: 7

UID
4803496
帖子
1567
PB币
1675
贡献
0
技术
0
活跃
1710
发表于 2019-10-14 13:47:28 |显示全部楼层
x小白路过感谢楼主分享

Rank: 2Rank: 2

UID
4838296
帖子
150
PB币
155
贡献
0
技术
0
活跃
346
发表于 2019-10-14 14:48:13 |显示全部楼层
nomcoych 发表于 2019-10-14 13:40
这教程真简易。

写的时候碰到触摸板误操了,直接发出来了

Rank: 2Rank: 2

UID
2824808
帖子
170
PB币
17
贡献
0
技术
0
活跃
457

7周年庆典勋章

发表于 2019-10-14 15:16:03 |显示全部楼层
先关注后学习

Rank: 9

UID
750326
帖子
3786
PB币
2296
贡献
0
技术
101
活跃
2193
发表于 2019-10-14 15:25:41 来自手机 |显示全部楼层
你的好东西。

Rank: 2Rank: 2

UID
4735513
帖子
137
PB币
93
贡献
0
技术
0
活跃
508
发表于 2019-10-14 17:51:58 |显示全部楼层
太强了%%%%%MT

pivix老司机

Rank: 2Rank: 2

UID
4821353
帖子
348
PB币
362
贡献
0
技术
0
活跃
366
发表于 2019-10-14 17:52:59 |显示全部楼层
你真&#128002;&#127866;老哥,也许你就是床说中的黑果天才吧哈哈

Rank: 2Rank: 2

UID
4838296
帖子
150
PB币
155
贡献
0
技术
0
活跃
346
发表于 2019-10-14 17:57:55 |显示全部楼层
Kira吟梦 发表于 2019-10-14 17:51
太强了%%%%%MT

woc  这都被你发现了

Rank: 1

UID
506549
帖子
107
PB币
155
贡献
0
技术
0
活跃
262
发表于 2019-10-14 18:14:11 |显示全部楼层
请告诉我 还需多久 才可以避免你的 误操作

Rank: 5Rank: 5Rank: 5

UID
150560
帖子
625
PB币
3652
贡献
0
技术
13
活跃
1377
发表于 2019-10-14 19:01:29 |显示全部楼层
坐等!谢谢

嫉恶如仇,是非分明的冰境泽

UID
3081083
帖子
2338
PB币
25998
贡献
0
技术
12
活跃
1727

7周年庆典勋章 我是大学生!

发表于 2019-10-14 19:02:01 |显示全部楼层
继续写,有需要的我可以给你重新编辑到1楼

Rank: 2Rank: 2

UID
4838296
帖子
150
PB币
155
贡献
0
技术
0
活跃
346
发表于 2019-10-14 19:47:05 |显示全部楼层
penghubingzhou 发表于 2019-10-14 19:02
继续写,有需要的我可以给你重新编辑到1楼

完整的发不出来,说有垃圾信息。。。

Rank: 2Rank: 2

UID
4549446
帖子
232
PB币
248
贡献
0
技术
0
活跃
1036
发表于 2019-10-14 20:55:16 |显示全部楼层
RMTTT 发表于 2019-10-14 19:47
完整的发不出来,说有垃圾信息。。。

应该是有敏感词吧。

Rank: 2Rank: 2

UID
4838296
帖子
150
PB币
155
贡献
0
技术
0
活跃
346
发表于 2019-10-14 21:10:46 |显示全部楼层
本帖最后由 RMTTT 于 2019-10-15 10:39 编辑

内容已全部合并到1楼

Rank: 2Rank: 2

UID
4838296
帖子
150
PB币
155
贡献
0
技术
0
活跃
346
发表于 2019-10-14 21:12:02 |显示全部楼层
penghubingzhou 发表于 2019-10-14 19:02
继续写,有需要的我可以给你重新编辑到1楼

麻烦合并到1楼

Rank: 9

UID
750326
帖子
3786
PB币
2296
贡献
0
技术
101
活跃
2193
发表于 2019-10-15 09:10:11 |显示全部楼层
这一篇是OC官方推荐的。http://bbs.pcbeta.com/viewthread-1815623-1-1.html

Rank: 9

UID
1245009
帖子
1342
PB币
6612
贡献
0
技术
11
活跃
2255

7周年庆典勋章 8周年庆典勋章

发表于 2019-10-15 09:10:12 |显示全部楼层
写的真棒,非常详细,受益匪浅。

Rank: 5Rank: 5Rank: 5

UID
728481
帖子
561
PB币
110
贡献
0
技术
0
活跃
1754
发表于 2019-10-15 09:19:14 |显示全部楼层
写的真棒,非常详细,受益匪浅。

嫉恶如仇,是非分明的冰境泽

UID
3081083
帖子
2338
PB币
25998
贡献
0
技术
12
活跃
1727

7周年庆典勋章 我是大学生!

发表于 2019-10-15 11:47:17 |显示全部楼层
RMTTT 发表于 2019-10-14 19:47
完整的发不出来,说有垃圾信息。。。

可以私聊我,把内容给我,我负责给你补图
回顶部
Copyright (C) 2005-2020 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛 | 电脑硬件 | 安卓软件