黑苹果的进阶操作

请保证在黑苹果已完全能够正常使用、并有足够能力理解相关术语后进行以下操作。

1
2
3
4
OpenCore
https://forums.macrumors.com/threads/manually-configured-opencore-on-the-mac-pro.2207814/
https://forums.macrumors.com/threads/refindplus-opencore-by-mybootmgr.2231693/
https://dortania.github.io/OpenCore-Legacy-Patcher/START.html#patcher-warnings

黑苹果发展

Mac OS X支持列表

列表如下。其中EFI32/64指需要使用32/64位的引导器,32/64位内核空间支持需要32/64位的kexts。

10.10及更低版本可能无法使用超过24个线程启动,出现mp_cpus_call_wait() timeout的panic。10.11和更高版本的线程限制为64。在启动参数添加cpus=1可解决该问题。

系统名称 系统版本 版本号 内核号 发布日期 最后更新日期 兼容性 PowerPC支持 Intel架构支持 ARM架构支持 EFI32位支持 EFI64位支持 CPU32位支持 CPU64位支持 32位内核空间支持 64位内核空间支持 内核架构支持 最低指令集要求 系统盘格式 备注
Big Sur 11.0 11.2.3-20D91
11.2.2-20D80
11.2.1-20D75/20D74
11.2-20D64
11.1-20C69
11.0.1-20B50/20B29
11.0-20A2411
20 2020-11-12 2013年上半年发布的MacBook Air - 支持 支持 - 支持 - 支持 - 支持 x86_64 SSE4.2 APFS 11.0仅适用于M1 CPU
Catalina 10.15 10.15.7-19H15/19H4/19H2
10.15.6-19G2021/19G73
10.15.5-19F101/19F96
10.15.4-19E287/19E266
10.15.3-19D76
10.15.2-19C57
10.15.1-19B88
10.15-19A603/19A602/19A583
Golden Master-19A582a
Developer Beta 10-19A578c
Developer Beta 9-19A573a
Developer Beta 8-19A558d
Developer Beta 7-19A546d
Developer Beta 6-19A536g
Developer Beta 5-19A526h
Developer Beta 4-19A512f
Developer Beta 3-19A501i
Developer Beta 2-19A487l
Developer Beta 1-19A471t
19 2019-10-07 2010年的iMac Pro和2012年下半年发布的所有Mac - 支持 - - 支持 - 支持 - 支持 x86_64 SSE4.2 APFS
Mojave 10.14 10.14.6-18G103/18G95/18G87/18G84
10.14.5-18F132
10.14.4-18E226
10.14.3-18D109/18D43/18D42
10.14.2-18C54
10.14.1-18B57c/18B50c/18B45d
10.14-18A391/18A389/18A384a/18A377a/18A371a/18A365a/18A353d/18A347e/18A336e/18A326h/18A326g/18A314h/18A293u
18 2018-09-24 2019-12-10 2010年的iMac Pro和2012年下半年发布的所有Mac - 支持 - - 支持 - 支持 - 支持 x86_64 SSE4.2 APFS
High Sierra 10.13 10.13.6-17G4015/17G3025/17G2208/17G65
10.13.5-17F77
10.13.4-17E202/17E199
10.13.3-17D2102/17D102/17D2047/17D47
10.13.2-17C2205/17C205/17C89/17C88
10.13.1-17B1003/17B1002/17B48
10.13-17A405/17A365
17 2017-09-25 2019-12-10 2009年下半年发布的iMac和MacBook - 支持 - - 支持 - 支持 - 支持 x86_64 SSE4 HFS+
Sierra 10.12 10.12.6-16G29
10.12.5-16F73
10.12.4-16E191a
10.12.3-16D32
10.12.2-16C63a
10.12.1-16B2657/16B2555
10.12-16A323
16 2016-09-20 2019-09-26 2009年下半年发布的iMac和MacBook - 支持 - - 支持 - 支持 - 支持 x86_64 SSE4 HFS+
El Capitan 10.11 10.11.6-15G22010/15G21013/15G20015/15G19009/15G18013/15G17023/15G1611/15G1510/15G1421/15G1217/15G1212/15G1108/15G1011/15G1004/15G31
10.11.5-15F34
10.11.4-15E65
10.11.3-15D21
10.11.2-15C50
10.11.1-15B42
10.11-15A284
15 2015-09-30 2018-07-09 2007年及以后的iMac和MacBook Pro - 支持 - - 支持 - 支持 - 支持 x86_64 SSSE3 HFS
Yosemite 10.10 10.10.5-14F2511/14F2411/14F2315/14F2109/14F2009/14F1912/14F1909/14F1808/14F1713/14F1605/14F1509/14F1505/14F1021/14F27
10.10.4-14E46
10.10.3-14D136/14D131
10.10.2-14C2513/14C2043/14C1514/14C1510/14C109
10.10.1-14B25
10.10-14A389
14 2014-10-16 2015-08-15 2007年及以后的iMac和MacBook Pro - 支持 - - 支持 - 支持 - 支持 x86_64 SSSE3 HFS
Mavericks 10.9 10.9.5-13F1077/13F1066/13F34
10.9.4-13E28
10.9.3-13D65
10.9.2-13C64
10.9.1-13B42
10.9-13A603
13 2013-10-22 2014-09-17 - 支持 - - 支持 - 支持 - 支持 x86_64 SSSE3 HFS 需要OpenPartitionDxe.efi来启动恢复分区
至少需要2GB内存
Mountain Lion 10.8 10.8.5-12F2560/12F2542/12F2518/12F2501/12F45/12F37
10.8.4-12E4022/12E3067/12E55
10.8.3-12D78
10.8.2-12C3104/12C2034/12C60/12C54
10.8.1-12B19
10.8-12A269
12 2012-07-25 2013-09-12 - 支持 - - 支持 - 支持 - 支持 x86_64 SSSE3 HFS 需要OpenPartitionDxe.efi来启动恢复分区
Lion 10.7 10.7.5-11G63
10.7.4-11E53
10.7.3-11D50b/11D50
10.7.2-11C74
10.7.1-11B2118/11B26
10.7-11A2063/11A2061/11A511
11 2011-07-20 2012-09-19 - 支持 - 支持 支持 支持(至10.7.5) 支持 支持 支持 i386
x86_64
SSSE3 HFS 第一个支持SSD TRIM,且不再提供安装光盘的版本
需要OpenPartitionDxe.efi来启动恢复分区
Snow Leopard 10.6 10.6.8-10K549/10K540
10.6.7-10J869
10.6.6-10J567
10.6.5-10H574
10.6.4-10F569
10.6.3-10D578/10D575/10D573
10.6.2-10C540
10.6.1-10B504
10.6-10A433/10A432
10 2009-08-28 2011-07-15 - 支持 - 支持 支持 支持 支持 支持 支持 i386
i386-user32
x86_64
SSE3(32位)
SSSE3(64位)
HFS
Leopard 10.5 10.5.8-9L30
10.5.7-9J61
10.5.6-9G66/9G55
10.5.5-9F33
10.5.4-9E17
10.5.3-9D34
10.5.2-9C31
10.5.1-9B18
10.5-9A581
9 2007-10-26 2009-08-12 支持 支持 - 支持 支持 支持 支持 支持 - i386
i386-user32
SSE3(32位)
SSSE3(64位)
HFS
Tiger 10.4 10.4.11-8S165(PowerPC)/8S2167(Intel)
10.4.10-8R218(PowerPC)/8R2218(Intel)
10.4.9-8P135(PowerPC)/8P2137(Intel)
10.4.8-8L127(PowerPC)/8L2127(Intel)
10.4.7-8N5107/8K1079/8J135(PowerPC)/8J2135a(Intel)
10.4.6-8I127(PowerPC)/8I1119(Intel)
10.4.5-8H14(PowerPC)/8G1454(Intel)
10.4.4-8G32(PowerPC)/8G1165(Intel)
10.4.3-8F46
10.4.2-8E90/8E45/8E102/8C64
10.4.1-8B15
10.4-8A428
8 2005-04-29 2007-11-14 支持 支持(从10.4.4起) - 支持 支持(从10.4.8起) 支持 支持 支持 - i386
i386-user32
SSE3(32位)
SSSE3(64位)
HFS
Panther 10.3 10.3.9-7W98
10.3.8-7U16
10.3.7-7S215
10.3.6-7R28
10.3.5-7M34
10.3.4-7H63
10.3.3-7F44
10.3.2-7D24
10.3.1-C107
10.3-7B85
7 2003-10-24 2005-04-15 支持 - -
Jaguar 10.2 10.2.8-6R73
10.2.7-6R65
10.2.6-6L60
10.2.5-6L29
10.2.4-6I32
10.2.3-6G30
10.2.2-6F21
10.2.1-6D52
10.2-6C115
6 2002-08-23 2003-10-03 支持 - - 首次有普通版/服务器版之分
10.2.7仅用于G5s/G4s
Puma 10.1 10.1.5-5S60
10.1.4-5Q125
10.1.3-5Q45
10.1.2-5P48
10.1.1-5M28
10.1-5G64
5 2001-09-25 2002-06-05 支持 - -
Cheetah 10.0 10.0.4-4Q12
10.0.3-4P13
10.0.2-4P12
10.0.1-4L13
10.0-4K78
4 2000-03-24 2002-06-22 支持 - -
Kodiak (Public Beta) 10.0β 10.0β-1H39 2000-09-13 2000-09-13 支持 - - 有四个不同的版本

硬件兼容

CPU

Intel支持列表

Wolfdale (Intel Core2 Duo series)和Yorkfield (Intel Core2 Quad series)太旧,不推荐使用。

注意,对于消费级的Ivy Bridge(0x0306A9),苹果针对它禁用了XCPM,并推荐用户使用传统的电源管理。如果要使用XCPM,需要手动添加_xcpm_patch二进制修补以强制启用。

各型号兼容性列表如下。

1
https://sites.google.com/view/hardhack/cpu
架构 最早支持版本 最后支持版本 备注 CPUID
Pentium 4 10.4.1 10.5.8 仅在开发套件中使用,需要Fake CPUID,iGPU不工作 0x0F41
Celerons 不支持,需要Fake CPUID,iGPU不工作
Atoms 10.6需要修补内核,无GPU加速 0x0106C2
Yonah 10.4.4 10.6.8 32位
CPUID适用于10.4-10.7
0x0006E6
Woodcrest 10.4.7 10.7.5
Clovertown 10.4.9 10.7.5
Conroe/Merom 10.4.7 10.11.6 无SSE4
若带有GMA950/X3100显卡,由于32位显卡驱动限制,仅可到10.7.5
0x0006F2
Penryn 10.4.10 10.13.6 无SSE4.2
若带有X3100显卡,由于32位显卡驱动限制,仅可到10.7.5
CPUID适用于10.5-10.13
0x010676
XeonMP CPUID适用于10.6 0x0106D0
Harpertown 10.5.1 10.11.6
Wolfdale 10.6.1 10.13.6
Nehalem 10.5.6 至今 0x0106A2
Lynnfield/Clarksfield 10.6.3 至今 10.14+中无iGPU支持 0x0106E0
Havendale 10.6.3 至今 0x0106F0
Westmere/Clarkdale/Arrandale 10.6.4 至今 10.14+中无iGPU支持 0x020650(Clarkdale)
0x0206C0(Westmere)
AtomSandy 不支持 0x020660
Lincroft 不支持 0x020670
Sandy Bridge 10.6.7 至今 10.14+中无iGPU支持 0x0206A0(M/H)
Jaketown 0x0206D0
NehalemEx 0x0206E0
WestmereEx 0x0206F0
Atom2000 0x030660
Ivy Bridge 10.7.3 至今 11+中无iGPU支持 0x0306A0(M/H/G)
Ivy Bridge-E5 10.9.2 至今 取决于dGPU,需要FakeID 0x0306E0
Haswell 10.8.5 至今 0x0306C0(S)
Broadwell 10.10.0 至今 0x0306D4(U/Y)
HaswellMB 0x0306F0
HaswellULT 0x040650
CrystalWell 0x040660
Broadwell-E 10.10.2 至今 取决于dGPU,需要FakeID
Skylake 10.11.0 至今 0x0506E3(H/S)
0x0406E3(U/Y)
Skylake-X/W 10.13.3 至今 取决于dGPU
Kaby Lake 10.12.4 至今 0x0906E9(H/S/G)
0x0806E9(U/Y)
Coffee Lake 10.12.6 至今 推荐10.14+ 0x0906EA(S/H/E)
0x0806EA(U)
Amber/Whiskey/Comet Lake 10.14.1 至今 0x0806E0(U/Y)
Cascade Lake-SP/W 10.15.0 至今 取决于dGPU
Comet Lake 10.15.4 至今 八代与九代一致 0x0906E0(S/H)
Ice Lake 10.15.4 至今 0x0706E5(U)
Tiger Lake 未测试 0x0806C0(U)
Rocket Lake 0x0906EB

CPU指令集仿真

旧CPU仿真

可用OpcodeEmulator.kext,用于Intel Haswell Pentium/Celeron系列或较旧的处理器扩展指令集仿真。

1
https://www.insanelymac.com/forum/topic/329704-opcode-emulator-opemu-plug-in-project/
SSE4.2仿真

对于Intel CPU,可用telemetrap.kext在SSE4.1 CPU下运行要求为SSE 4.2的系统,下载链接如下。

1
https://forums.macrumors.com/threads/mp3-1-others-sse-4-2-emulation-to-enable-amd-metal-driver.2206682/page-4?post=28447707#post-28447707
旧版白苹果

对于其它架构,也可尝试使用macOS Patcher,链接如下。

1
https://github.com/rmc-team/macos-patcher

GPU

Intel支持列表

Mac支持绝大多数的GT2 Intel GPU和少数的GT3e Intel GPU,不支持GT1 Intel GPU(Pentium/Celeron/Atoms)。

各型号兼容性列表如下。

1
https://sites.google.com/view/hardhack/videocards/intel-hd-graphics
架构 最早支持版本 最后支持版本 型号 备注
Atom/Celeron/Pentium 不支持
第三代GMA 10.4.1 10.7.5 GMA 950(Lion)
GMA 900(Snow Leopard)
GMA 3150
GMA 3100
需要32位内核和补丁
第四代GMA 10.5.0 10.7.5 GMA X3100(Lion) 需要32位内核和补丁
GMA X4500HD、GMA X4500、GMA 4500MHD、GMA 4500、GMA X3500、GMA X3000、GMA 3000不支持
Westmere(i3/5/7-xxx) 10.6 10.13.6 HD Graphics
Arrendale(HD Graphics) 10.6.4 10.13.6 仅支持LVDS,不支持eDP和外部输出
可用显卡kexts地址https://www.insanelymac.com/forum/files/file/208-1st-gen-intel-hd-graphics-kexts/
Sandy Bridge(HD 3000) 10.7 10.13.6 HD 2000
HD 3000
HD P3000
HD 2000只能用于Quicksync,不能完全加速
Ivy Bridge(HD 4000) 10.7.3 10.15.7 HD 2500
HD 4000
HD P4000
HD 2500只能用于Quicksync
Haswell(HD 4XXX/5XXX) 10.8.5 至今 HD 4200
HD 4400
HD 4600
HD 5000
HD 5100
HD P4600
HD P4700
HD4400需要仿冒ID为HD4600
HD4600有CI但无QE,HD4400具有QE/CI
Broadwell(5XXX/6XXX) 10.10.2 至今 HD 5300
HD 5500
HD 5600
HD 6000
HD 6100
HD 6200
HD P5700
Iris Pro P6300
HD 400和HD 405不支持
Skylake(HD 5XX) 10.11.4 至今 HD 515
HD 520
HD 530
HD P530
Iris 540
Iris 550
Iris Pro 580
Iris Pro P555
Iris Pro P580
HD 510不支持
Kaby Lake(HD 6XX) 10.12.6 至今 HD 615
HD 620
HD 630
Iris Plus 640
Iris Plus 650
HD 610不支持
Coffee Lake(UHD 6XX) 10.13.6 至今 UHD 615
UHD 617
UHD 620
UHD 630
Iris Plus 645
Iris Plus 655
i3 8100和8350k使用不同的UHD 630
UHD 610不支持
Comet Lake(UHD 6XX) 10.15.4 至今
Ice Lake(Gx) 10.15.4 至今 Iris Plus G7
Iris Plus G4
需要启动参数-igfxcdc和-igfxdvmt
GT1不支持
Apollo Lake HD 500
HD 505
无可用驱动
Gemini Lake UHD 600
UHD 605
无可用驱动
Tiger Lake(Xe) 无可用驱动

Intel platform ID列表

某些SKL/KBL台式机驱动4K显示器时,可尝试0x193b0005这一ig-platform-id。

通用属性列表如下。

属性 类型
enable-hdmi20 Data 01000000
framebuffer-fbmem Data 00009000
framebuffer-patch-enable Data 01000000
framebuffer-stolenmem Data 00003001
framebuffer-unifiedmem Data 00000080
hda-gfx String onboard-1
Arrandale

适用于10.6.4-10.13.6。仅支持带有LVDS显示屏的笔记本。注意需要将SMBIOS设置为MacBookPro6,1或MacBookPro6,2。

支持的DevID如下。

1
2
0x0042
0x0046

设备属性要求有framebuffer-patch-enableframebuffer-singlelink,不需要AAPL,ig-platform-id。配置参数含义如下。

参数 含义
Semantic
framebuffer-patch-enable 启用修补
framebuffer-linkwidth 指定链接宽度,默认为1
framebuffer-singlelink 启用单链接模式
FBCControl
framebuffer-fbccontrol-allzero 将所有属性设置为零(下面的属性将被覆盖)
framebuffer-fbccontrol-compression
FeatureControl
framebuffer-featurecontrol-allzero 将所有属性设置为零(下面的属性将被覆盖)
framebuffer-featurecontrol-fbc
framebuffer-featurecontrol-gpuinterrupthandling
framebuffer-featurecontrol-gamma
framebuffer-featurecontrol-maximumselfrefreshlevel
framebuffer-featurecontrol-powerstates
framebuffer-featurecontrol-rstimertest
framebuffer-featurecontrol-renderstandby
framebuffer-featurecontrol-watermarks

对于10.8及以上系统,直接使用WhateverGreen即可正确处理,无需进行以下操作。

对于10.6.4-10.7,安装过程中需要将ig-platform-id设置为0x12345678以禁用显卡,安装完成后需要使用以下kext补丁。

Stride patch如下,用于修复分辨率大于1024x768时的情况。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 10.6 x86
Name: AppleIntelHDGraphicsFB::hwSetCRTC
Find: 0F8547FEFFFF66B80020
Replace: 90909090909066B80020

# 10.6 x64
Name: AppleIntelHDGraphicsFB::hwSetCRTC
Find: 0F8575FEFFFFE96BFEFFFF
Replace: 909090909090E96BFEFFFF

# 10.7 x86
Name: AppleIntelHDGraphicsFB::hwSetCRTC
Find: 0F45C8898C3E
Replace: 909090898C3E

# 10.7 x64 & 10.8+
Name: AppleIntelHDGraphicsFB::hwSetCRTC
Find: 0F45C842898C
Replace: 90909042898C

Single link patch 1如下,用于开启single link模式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 10.6 x86
Name: AppleIntelHDGraphicsFB::hwGetPanelProperties
Find: C70301000000C7432000000000
Replace: C70300000000C7432000000000

# 10.6 x64
Name: AppleIntelHDGraphicsFB::hwGetPanelProperties
Find: C70201000000C7422000000000
Replace: C70200000000C7422000000000

# 10.7 x86
Name: AppleIntelHDGraphicsFB::hwGetPanelProperties
Find: C70601000000C7462000000000
Replace: C70600000000C7462000000000

# 10.7 x64 & 10.8-10.9
Name: AppleIntelHDGraphicsFB::hwGetPanelProperties
Find: C70301000000C7432000000000
Replace: C70300000000C7432000000000

# 10.10
Name: AppleIntelHDGraphicsFB::hwGetPanelProperties
Find: 49C7070100000041C7472000000000
Replace: 49C7070000000041C7472000000000

# 10.11-10.13
Name: AppleIntelHDGraphicsFB::hwGetPanelProperties
Find: 48C7030100000048B80A000000D0070000
Replace: 48C7030000000048B80A000000D0070000

Single link patch 2如下,用于将除数改变到14。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 10.6 x86
Name: AppleIntelHDGraphicsFB::hwRegsNeedUpdate
Find: BB00000009
Replace: BB00000008

# 10.6 x64
Name: AppleIntelHDGraphicsFB::hwRegsNeedUpdate
Find: BE00000009
Replace: BE00000008

# 10.7 x64
Name: AppleIntelHDGraphicsFB::hwRegsNeedUpdate
Find: B800000009
Replace: B800000008

# 10.7 x86 & 10.8
Name: AppleIntelHDGraphicsFB::hwRegsNeedUpdate
Find: B900000009
Replace: B900000008

# 10.9
Name: AppleIntelHDGraphicsFB::hwRegsNeedUpdate
Find: 41B900600009
Replace: 41B900600008

# 10.10-10.12
Name: AppleIntelHDGraphicsFB::hwRegsNeedUpdate
Find: B800600009
Replace: B800600008

# 10.13
Name: AppleIntelHDGraphicsFB::hwRegsNeedUpdate
Find: BA00600009
Replace: BA00600008

Single link patch 3如下,用于关闭CLKB,修复像素化图像。

1
2
3
Name: AppleIntelHDGraphicsFB::hwRegsNeedUpdate
Find: 3C033080
Replace: 00033080

Link width patch如下,用于设置链路宽度。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# 10.6 x86
Name: AppleIntelHDGraphicsFB::TrainFDI
Find: 8B87380500000FB64018C1E0130B466C89466C8B575889820C000F008B87380500000FB64018C1E0130B4668
## Link width = 1
Replace: 8B466C25FFFFC7FF0D0000000090909089466C8B575889820C000F008B466825FFFFC7FF0D00000000909090
## Link width = 2
Replace: 8B466C25FFFFC7FF0D0000080090909089466C8B575889820C000F008B466825FFFFC7FF0D00000800909090
## Link width = 3
Replace: 8B466C25FFFFC7FF0D0000100090909089466C8B575889820C000F008B466825FFFFC7FF0D00001000909090
## Link width = 4
Replace: 8B466C25FFFFC7FF0D0000180090909089466C8B575889820C000F008B466825FFFFC7FF0D00001800909090

# 10.6 x64
Name: AppleIntelHDGraphicsFB::TrainFDI
Find: 498B85980600000FB64018C1E013410B44246C418944246C498B959800000089820C000F00498B85980600000FB64018C1E013410B442468
## Link width = 1
Replace: 418B44246C25FFFFC7FF0D00000000909090909090909090498B959800000089820C000F00418B44246825FFFFC7FF0D0000000090909090
## Link width = 2
Replace: 418B44246C25FFFFC7FF0D00000800909090909090909090498B959800000089820C000F00418B44246825FFFFC7FF0D0000080090909090
## Link width = 3
Replace: 418B44246C25FFFFC7FF0D00001000909090909090909090498B959800000089820C000F00418B44246825FFFFC7FF0D0000100090909090
## Link width = 4
Replace: 418B44246C25FFFFC7FF0D00001800909090909090909090498B959800000089820C000F00418B44246825FFFFC7FF0D0000180090909090

# 10.7 x86
Name: AppleIntelHDGraphicsFB::TrainFDI
Find: 8B86380500000FB64018C1E0130B476C89476C8B4E5889810C000F008B86380500000FB64018C1E0130B4768
## Link width = 1
Replace: 8B476C25FFFFC7FF0D0000000090909089476C8B4E5889810C000F008B476825FFFFC7FF0D00000000909090
## Link width = 2
Replace: 8B476C25FFFFC7FF0D0000080090909089476C8B4E5889810C000F008B476825FFFFC7FF0D00000800909090
## Link width = 3
Replace: 8B476C25FFFFC7FF0D0000100090909089476C8B4E5889810C000F008B476825FFFFC7FF0D00001000909090
## Link width = 4
Replace: 8B476C25FFFFC7FF0D0000180090909089476C8B4E5889810C000F008B476825FFFFC7FF0D00001800909090

# 10.7 x64
Name: AppleIntelHDGraphicsFB::TrainFDI
Find: 498B86980600000FB64018C1E0130B436C89436C498B8E9800000089810C000F00498B86980600000FB64018C1E0130B4368
## Link width = 1
Replace: 8B436C25FFFFC7FF0D000000009090909089436C498B8E9800000089810C000F008B436825FFFFC7FF0D0000000090909090
## Link width = 2
Replace: 8B436C25FFFFC7FF0D000008009090909089436C498B8E9800000089810C000F008B436825FFFFC7FF0D0000080090909090
## Link width = 3
Replace: 8B436C25FFFFC7FF0D000010009090909089436C498B8E9800000089810C000F008B436825FFFFC7FF0D0000100090909090
## Link width = 4
Replace: 8B436C25FFFFC7FF0D000018009090909089436C498B8E9800000089810C000F008B436825FFFFC7FF0D0000180090909090

# 10.8-10.11
Name: AppleIntelHDGraphicsFB::TrainFDI
Find: 498B8424980600000FB64018C1E013410B466C4189466C498B8C249800000089810C000F00498B8424980600000FB64018C1E013410B4668
## Link width = 1
Replace: 418B466C25FFFFC7FF0D0000000090909090904189466C498B8C249800000089810C000F00418B466825FFFFC7FF0D000000009090909090
## Link width = 2
Replace: 418B466C25FFFFC7FF0D0000080090909090904189466C498B8C249800000089810C000F00418B466825FFFFC7FF0D000008009090909090
## Link width = 3
Replace: 418B466C25FFFFC7FF0D0000100090909090904189466C498B8C249800000089810C000F00418B466825FFFFC7FF0D000010009090909090
## Link width = 4
Replace: 418B466C25FFFFC7FF0D0000180090909090904189466C498B8C249800000089810C000F00418B466825FFFFC7FF0D000018009090909090

# 10.12-10.13
Name: AppleIntelHDGraphicsFB::TrainFDI
Find: 41894E6C498B84249800000089880C000F00498B8C24980600000FB65118C1E213418B766C09D64189766C89B00C000F00410B5668
## Link width = 1
Replace: BBFFFFC7FFBA0000000021D909D141894E6C498B84249800000089880C000F00418B4E6821D909D189CA909090498B8C2498060000
## Link width = 2
Replace: BBFFFFC7FFBA0000080021D909D141894E6C498B84249800000089880C000F00418B4E6821D909D189CA909090498B8C2498060000
## Link width = 3
Replace: BBFFFFC7FFBA0000100021D909D141894E6C498B84249800000089880C000F00418B4E6821D909D189CA909090498B8C2498060000
## Link width = 4
Replace: BBFFFFC7FFBA0000180021D909D141894E6C498B84249800000089880C000F00418B4E6821D909D189CA909090498B8C2498060000

FBCControl patch如下,通过将FBCControl替换为XXXControl,防止读取Info.plist中的FBCControl设置,这与将FBCControl部分中的所有值设置为零具有相同的效果。

1
2
3
Name: FBCControl
Find: 464243436F6E74726F6C00
Replace: 585858436F6E74726F6C00

FeatureControl patch如下,通过将FeatureControl替换为XXXtureControl,防止读取Info.plist中的FeatureControl设置,这与将FeatureControl部分中的所有值设置为零具有相同的效果。

1
2
3
Name: FeatureControl
Find: 46656174757265436F6E74726F6C00
Replace: 58585874757265436F6E74726F6C00
Sandy Bridge

适用于10.7-10.13.6。

可通过以下脚本,在Mojave中启用Sandy Bridge GPU。

1
https://github.com/Andrej-Antipov/SNBGraphicsMojaveInstaller

推荐的帧缓冲区加粗显示。

显卡型号 platform-id 机型 接口 LVDS DP HDMI 总STOLEN内存 备注
Intel HD Graphics 3000 0x00010000 MacBookPro8,1
MacBookPro8,2
MacBookPro8,3
4 1 3 32MB? 笔记本,默认
Intel HD Graphics 3000 0x00020000 1 1 32MB? 笔记本
Intel HD Graphics 3000 0x00030010 Macmini5,1
Macmini5,3
3 2 1 32MB? 台式机,默认
Intel HD Graphics 3000 0x00030020 Macmini5,1
Macmini5,3
3 2 1 32MB? 台式机
Intel HD Graphics 3000 0x00030030 Macmini5,2 0 32MB? 台式机
Intel HD Graphics 3000 0x00040000 MacBookAir4,1
MacBookAir4,2
3 1 2 32MB? 笔记本
Intel HD Graphics 3000 0x00050000 iMac12,1/iMac12,2 0 32MB? 台式机,默认
空Framebuffer,可用于HD2000

支持的DevID如下。

1
2
3
4
5
6
0x0106
0x1106
0x1601
0x0116
0x0126
0x0102

Sandy Bridge一般不需要指定帧缓冲区。若使用非Sandy Brige Mac型号,则需要指定帧缓冲区。

一般需要添加以下属性。

属性 类型 备注
AAPL,snb-platform-id Data 10000300 根据台式机/笔记本更换值
device-id Data / 需要仿冒时使用

注意,对于台式机,需要伪造device-id为26010000。

对于HD4400,需要伪造device-id为12040000。

对于6系列芯片组的HD2000/3000,需要伪造device-id为02010000。

对于7系列芯片组的HD2000/3000,需要伪造device-id为3A1C0000,并添加SSDT-IMEI,下载链接如下。

1
https://github.com/acidanthera/OpenCorePkg/blob/master/Docs/AcpiSamples/Source/SSDT-IMEI.dsl

对于6系列芯片组的HD2500/4000,需要伪造device-id为3A1E0000,并添加SSDT-IMEI。

【进阶】HD2000/3000所需文件

对于HD2000,需要以下文件。

1
2
3
4
AppleIntelHDGraphicsFB.kext
AppleIntelHDGraphicsGA.plugin
AppleIntelHDGraphicsGLDriver.bundle
AppleIntelHDGraphicsVADriver.bundle

对于HD3000,需要以下文件。

1
2
3
4
5
6
AppleIntelHD3000Graphics.kext
AppleIntelHD3000GraphicsGA.plugin
AppleIntelHD3000GraphicsGLDriver.bundle
AppleIntelHD3000GraphicsVADriver.bundle
AppleIntelSNBGraphicsFB.kext
AppleIntelSNBVA.bundle
【进阶】HD 3000接口故障修复

用于High Sierra。若仅将Sandy用于IQSV,以下补丁没有作用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<dict>
<key>Comment</key>
<string>hd3000 Fix</string>
<key>Find</key>
<data>
AQIEABAHAAAQBw==
</data>
<key>Name</key>
<string>com.apple.driver.AppleIntelSNBGraphicsFB</string>
<key>Replace</key>
<data>
AAEEgBAHAAAQBw==
</data>
</dict>
<dict>
<key>Comment</key>
<string>HD3000 384 -&gt; 2048</string>
<key>Find</key>
<data>
0AAAABg=
</data>
<key>Name</key>
<string>com.apple.driver.AppleIntelSNBGraphicsFB</string>
<key>Replace</key>
<data>
0AAAAIA=
</data>
</dict>
<dict>
<key>Comment</key>
<string>HD3000 512 -&gt; 2048</string>
<key>Find</key>
<data>
0AAAACA=
</data>
<key>Name</key>
<string>com.apple.driver.AppleIntelSNBGraphicsFB</string>
<key>Replace</key>
<data>
0AAAAIA=
</data>
</dict>
Ivy Bridge

适用于10.8至今。在10.8.2及更高版本上不可能提供VGA支持。

型号 platform-id 机型 接口 LVDS DP HDMI 总STOLEN内存 备注
Intel HD Graphics 4000 0x01660000 4 1 3 24MB 台式机
Intel HD Graphics 4000 0x01660001 MacBookPro10,2 4 1 2 1 24MB 笔记本
Intel HD Graphics 4000 0x01660002 MacBookPro10,1 1 1 24MB 笔记本
Intel HD Graphics 4000 0x01660003 MacBookPro9,2 4 1 3 16MB 笔记本,默认
分辨率1600x900及更高
Intel HD Graphics 4000 0x01660004 MacBookPro9,1 1 1 16MB 笔记本
eDP/自动侦测
Intel HD Graphics 4000 0x01660005 3 3 16MB 台式机
Intel HD Graphics 4000 0x01660006 iMac13,1 0 0bytes 台式机
Intel HD Graphics 4000 0x01660007 iMac13,2 0 0bytes 台式机,默认
空Framebuffer,可用于HD 2500
Intel HD Graphics 4000 0x01660008 MacBookAir5,1 3 1 2 16MB 笔记本
Intel HD Graphics 4000 0x01660009 MacBookAir5,2 3 1 2 16MB 笔记本
分辨率1366x768
Intel HD Graphics 4000 0x0166000A Macmini6,1 3 2 1 16MB 台式机,默认
Intel HD Graphics 4000 0x0166000b Macmini6,2 3 2 1 16MB 台式机

支持的DevID如下。

1
2
3
4
0x0152
0x0156
0x0162
0x0166

对于6系列芯片组的HD2500/4000,需要伪造device-id为3A1E0000,并添加SSDT-IMEI,下载链接同Sandy Bridge。

Haswell

适用于10.9至今。

显卡型号 platform-id 机型 接口 LVDS DP eDP HDMI 总STOLEN内存 备注
0x04060000 3 1 1 1 209MB 台式机
0x0c060000 3 1 1 1 209MB 台式机
Intel HD Graphics 4600 0x04160000 3 1 1 1 209MB 台式机
Intel HD Graphics 4400 0x0a160000 3 1 1 1 209MB 台式机/笔记本,默认
0x0c160000 3 1 1 1 209MB 台式机
Intel HD Graphics 5000 0x04260000 3 1 1 1 209MB 台式机
Intel HD Graphics 5000 0x0a260000 3 1 1 1 209MB 台式机
0x0c260000 3 1 1 1 209MB 台式机
Intel Iris Pro Graphics 5200 0x0d260000 3 1 1 1 209MB 台式机
0x0a26000d 2 131MB 台式机
0x0d220003 iMac14,1
iMac14,4
3 1 2 52MB 台式机,默认
Intel HD Graphics 4600 0x04120004 0 1MB 台式机,默认
空Framebuffer
0x0412000b 0 1MB 台式机
Intel HD Graphics 5000 0x0a260005 3 1 2 52MB 笔记本
Intel HD Graphics 5000 0x0a260006 MacBookAir6,1
MacBookAir6,2
Macmini7,1
3 1 2 52MB 笔记本
Intel Iris Pro Graphics 5200 0x0d260007 MacBookPro11,2
MacBookPro11,3
4 1 2 1 99MB 笔记本
0x0d260009 1 99MB 笔记本
0x0d26000a 3 52MB 台式机
0x0d26000e 4 131MB 笔记本
0x0d26000f 1 131MB 笔记本
Intel Iris Graphics 5100 0x0a2e0008 MacBookPro11,1 3 1 2 99MB 笔记本
0x0a2e000a 3 52MB 台式机
0x0a2e000d 2 131MB 台式机
Intel HD Graphics 4600 0x0412000b iMac15,1 0
0x0a16000c 3 99MB 笔记本

支持的DevID如下。

1
2
3
4
5
0x0d26
0x0a26
0x0a2e
0x0d22
0x0412

对于台式机HD4400和笔记本HD4200/4400/4600,需要伪造device-id为12040000,列表如下。

属性 类型
AAPL,ig-platform-id Data 0600260A
device-id Data 12040000
framebuffer-cursormem Data 00009000
framebuffer-patch-enable Integer 1
hda-gfx String onboard-1
Broadwell

适用于10.10.2至今。

显卡型号 platform-id 机型 接口 LVDS DP eDP HDMI 总STOLEN内存 备注
0x16060000 3 1 1 1 32MB 台式机
0x160e0000 3 32MB 台式机
0x160e0001 3 1 2 60MB 笔记本
Intel HD Graphics 5500 0x16160000 3 1 1 1 32MB 台式机
Intel HD Graphics 5300 0x161e0000 3 1 1 1 32MB 台式机
Intel Iris Pro Graphics 6200 0x16220000 3 1 1 1 32MB 台式机
Intel HD Graphics 6000 0x16260000 3 1 1 1 32MB 台式机
Intel Iris Graphics 6100 0x162b0000 3 1 1 1
Intel HD Graphics 5300 0x161e0001 MacBook8,1 3 1 2 60MB 笔记本
0x16060002 3 1 2 56MB 笔记本
Intel HD Graphics 5500 0x16160002 3 1 2 56MB 笔记本
Intel Iris Pro Graphics 6200 0x16220002 3 1 2 56MB 笔记本
Intel HD Graphics 6000 0x16260002 3 1 2 56MB 笔记本
0x162b0000 3 32MB 台式机
Intel Iris Graphics 6100 0x162b0002 MacBookPro12,1 3 1 2 56MB 笔记本
Intel HD Graphics 5600 0x16120003 4 1 2 56MB 笔记本
Intel HD Graphics 6000 0x16260004 3 1 2 56MB 台式机
Intel Iris Graphics 6100 0x162b0004 3 1 2 56MB 台式机
Intel HD Graphics 6000 0x16260005 3 1 2 56MB 笔记本
Intel HD Graphics 6000 0x16260006 iMac16,1
MacBookAir7,1
MacBookAir7,2
3 1 2 56MB 笔记本,默认
Intel Iris Pro Graphics6200 0x16220007 iMac16,2 3 1 2 77MB 台式机,默认
Intel HD Graphics 6000 0x16200008 2 1 1
Intel Iris Graphics 6100 0x162b0008 2 1 2 69MB 台式机
0x16260008 2 69MB 台式机

支持的DevID如下。

1
2
3
4
5
6
7
8
9
10
11
0x0BD1
0x0BD2
0x0BD3
0x1606
0x160e
0x1616
0x161e
0x1626
0x1622
0x1612
0x162b

对于HD5000/HD5100/HD5200,属性列表如下。

属性 类型
AAPL,ig-platform-id Data 0600260A
framebuffer-cursormem Data 00009000
framebuffer-patch-enable Integer 1
hda-gfx String onboard-1

对于HD5300/HD5500/HD6000,属性列表如下。

属性 类型
AAPL,ig-platform-id Data 06002616
framebuffer-fbmem Data 00009000
framebuffer-patch-enable Integer 1
framebuffer-stolenmem Data 00003001
hda-gfx String onboard-1

对于HD5600,属性列表如下。

属性 类型
AAPL,ig-platform-id Data 06002616
device-id Data 26160000
framebuffer-fbmem Data 00009000
framebuffer-patch-enable Integer 1
framebuffer-stolenmem Data 00003001
hda-gfx String onboard-1
Skylake

适用于10.11.4至今。

显卡型号 platform-id 机型 接口 LVDS DP HDMI 总STOLEN内存 备注
Intel HD Graphics 530 0x19120000 3 3 56MB 台式机/笔记本,默认
Intel HD Graphics 520 0x19160000 3 1 2 56MB 笔记本,默认
Intel Iris Graphics 540 0x19260000 3 1 2 56MB 笔记本
Intel Iris Graphics 550 0x19270000 3 1 2 56MB 笔记本
Intel HD Graphics 530 0x191b0000 MacBookPro13,3 3 1 2 56MB 笔记本
Intel HD Graphics 515 0x191e0000 3 1 2 56MB 笔记本
Intel Iris Pro Graphics 580 0x193b0000 3 1 1 1 56MB 笔记本
Intel HD Graphics 530/4K* 0x193b0005 MacBookPro13,1 4 1 3 35MB 笔记本
Intel HD Graphics 510 0x19020001 0 1MB 台式机
Intel HD Graphics 530 0x19120001 0 1MB 台式机,默认
空Framebuffer
0x19170001 0 1MB 台式机
Intel Iris Pro Graphics 580 0x19320001 0 1MB 台式机
Intel HD Graphics 520 0x19160002 3 1 2 58MB 笔记本
Intel Iris Graphics 540 0x19260002 MacBookPro13,1 3 1 2 58MB 笔记本
Intel HD Graphics 515 0x191e0003 MacBook9,1 3 1 2 41MB 笔记本
Intel Iris Graphics 540 0x19260004 3 1 2 35MB 笔记本
Intel Iris Graphics 550 0x19270004 MacBookPro13,2 3 1 2 58MB 笔记本
Intel HD Graphics 530 0x191b0006 1 39MB 笔记本
Intel Iris Graphics 540 0x19260007 3 1 2 35MB 笔记本

支持的DevID如下。

1
2
3
4
5
6
7
8
9
10
0x1916
0x191E
0x1926
0x1927
0x1912
0x1932
0x1902
0x1917
0x193B
0x191B

对于HD515/HD520/HD530/HD540(第六代),属性列表如下。

属性 类型
AAPL,GfxYTile Data 01000000
AAPL,ig-platform-id Data 00001B19
framebuffer-cursormem Data 00009000
framebuffer-patch-enable Integer 1
framebuffer-stolenmem Data 00003001
hda-gfx String onboard-1

对于HD550/P530,属性列表如下。

属性 类型
AAPL,GfxYTile Data 01000000
AAPL,ig-platform-id Data 00002619
device-id Data 26190000
framebuffer-cursormem Data 00009000
framebuffer-patch-enable Integer 1
framebuffer-stolenmem Data 00003001
hda-gfx String onboard-1
Kaby Lake & Amber Lake Y

适用于10.12.6至今。UHD617 Amber Lake Y适用于10.14至今。

显卡型号 platform-id 机型 接口 LVDS DP HDMI 总STOLEN内存 备注
Intel HD Graphics 630 0x59120000 iMac18,2
iMac18,3
3 3 39MB 台式机
Intel HD Graphics 630 0x59120003 FCPX加速用 0 台式机,默认
空Framebuffer
Intel HD Graphics 620 0x59160000 MacBookPro14,2 3 1 2 35MB 台式机/笔记本,默认
Intel HD Graphics 620 0x59160009 3 1 2 39MB 笔记本
0x59180002 0 1MB 笔记本
0x59180003 0 1MB 笔记本
Intel HD Graphics 630 0x591b0000 MacBookPro14,3 3 1 2 39MB 笔记本,默认
Intel HD Graphics 630 0x591b0006 1 1 39MB 笔记本
0x591c0005 3 1 2 58MB 笔记本
Intel HD Graphics 615 0x591e0000 3 1 2 35MB 笔记本
Intel HD Graphics 615 0x591e0001 MacBook10,1 3 1 2 39MB 笔记本
Intel HD Graphics 635 0x59230000 3 1 2 39MB 台式机
Intel Iris Plus Graphics 640 0x59260000 3 1 2 39MB 台式机
Intel Iris Plus Graphics 640 0x59260002 MacBookPro14,1
iMac18,1
3 1 2 58MB 笔记本
Intel Iris Plus Graphics 640 0x59260007 3 1 2 79MB 台式机
Intel Iris Plus Graphics 650 0x59270000 3 1 2 39MB 台式机
Intel Iris Plus Graphics 650 0x59270004 MacBookPro14,2 3 1 2 58MB 笔记本
Intel Iris Plus Graphics 650 0x59270009 3 1 2 39MB 笔记本
Intel UHD Graphics 617 0x87c00000 3 1 2 35MB 笔记本
Intel UHD Graphics 617 0x87c00005 MacBookAir8,1 3 1 2 58MB 笔记本

支持的DevID如下。

1
2
3
4
5
6
7
8
9
10
11
12
# KBL
0x5912
0x5916
0x591B
0x591C
0x591E
0x5926
0x5927
0x5923

# ABL
0x87C0

对于UHD620,需要伪造device-id为16590000。

对于HD615/HD620/HD630/HD640/HD650(第七代),属性列表如下。

属性 类型
AAPL,GfxYTile Data 01000000
AAPL,ig-platform-id Data 00001B59
device-id Data 16590000
framebuffer-fbmem Data 00009000
framebuffer-patch-enable Integer 1
framebuffer-stolenmem Data 00003001
hda-gfx String onboard-1
Coffee Lake & Comet Lake

适用于10.14至今。UHD630 Comet Lake适用于10.15.4至今。

显卡型号 platform-id 机型 接口 LVDS DP 总STOLEN内存 备注
0x3E000000 3 1 2 58MB 笔记本
Intel UHD Graphics 630 0x3E910003 FCPX加速用 0 1MB 台式机,默认
空Framebuffer
Intel UHD Graphics 630 0x3E920000 3 1 2 58MB 笔记本
Intel UHD Graphics 630 0x3E920003 FCPX加速用 0 1MB 台式机
Intel UHD Graphics 630 0x3E920009 1 1 58MB 笔记本
Intel UHD Graphics 630 0x3E980003 iMac19,1
FCPX加速用
0 1MB 台式机
Intel UHD Graphics 630 0x3E9B0000 3 1 2 58MB 笔记本
Intel UHD Graphics 630 0x3E9B0006 MacBookPro15,1 1 1 39MB 笔记本
Intel UHD Graphics 630 0x3E9B0007 Macmini8,1
iMac19,2
3 3 58MB 台式机
若在Catalina中收到黑屏,则换用0x3E9B0000或0x3E920003
Intel UHD Graphics 630 0x3E9B0008 1 1 58MB 笔记本
Intel UHD Graphics 630 0x3E9B0009 3 1 2 58MB 笔记本
Intel UHD Graphics 630 0x3EC40003
Intel UHD Graphics 630 0x3EC50003
Intel UHD Graphics 630 0x3EC80003
Intel Iris Plus Graphics 655 0x3EA50000 3 1 2 58MB 台式机/笔记本,默认
Intel Iris Plus Graphics 655 0x3EA50004 MacBookPro15,2 3 1 2 58MB 笔记本
Intel Iris Plus Graphics 655 0x3EA50005 3 1 2 58MB 笔记本
Intel Iris Plus Graphics 655 0x3EA50009 3 1 2 58MB 笔记本,默认
Intel Iris Plus Graphics 655 0x3EA60005 3 1 2 58MB 笔记本
0x9BC80003 0 1MB 台式机,默认
空Framebuffer
0x9BC50003 0 1MB 台式机
0x9BC40003 0 1MB 台式机

支持的DevID如下。

1
2
3
4
5
6
7
8
9
10
11
12
# CFL
0x3E9B
0x3EA5
0x3EA6
0x3E92
0x3E91
0x3E98

# CML
0x9BC8
0x9BC5
0x9BC4

对于9代Coffee Lake Refresh,需要伪造device-id为923E0000。10.14.4无需该修补。

对于(U)HD620/(U)HD630(第八代),需要伪造device-id为A53E0000。属性列表如下。

属性 类型
AAPL,GfxYTile Data 01000000
AAPL,ig-platform-id Data 0900A53E
device-id Data A53E0000
framebuffer-fbmem Data 00009000
framebuffer-patch-enable Integer 1
framebuffer-stolenmem Data 00003001
hda-gfx String onboard-1

对于HD620/HD630(第九代),属性列表如下。

属性 类型
igfxfw Data 02000000
hda-gfx String onboard-1
framebuffer-stolenmem Data 00003001
framebuffer-patch-enable Integer 1
AAPL,GfxYTile Data 01000000
AAPL,ig-platform-id Data 09009B3E
device-id Data 9B3E0000
framebuffer-fbmem Data 00009000
Ice Lake

适用于10.15.4至今。

显卡型号 platform-id 机型 接口 LVDS DP STOLEN 备注
Intel HD Graphics ICL SIM 0xFF050000 3 1 2 193MB? 笔记本
Intel HD Graphics ICL RVP 0x8A710000 6 1 5 193MB? 笔记本
Intel HD Graphics ICL RVP 0x8A700000 6 1 5 193MB? 笔记本
Intel HD Graphics ICL RVP 0x8A510000 6 1 5 193MB? 笔记本
Intel HD Graphics ICL RVP 0x8A5C0000 6 1 5 193MB? 笔记本
Intel HD Graphics ICL RVP 0x8A5D0000 6 1 5 193MB? 笔记本
Intel HD Graphics ICL RVP 0x8A520000 6 1 5 193MB? 笔记本,默认
Intel HD Graphics ICL RVP 0x8A530000 6 1 5 193MB? 笔记本
Intel HD Graphics ICL RVP 0x8A5A0000 6 1 5 193MB? 笔记本
Intel HD Graphics ICL RVP 0x8A5B0000 6 1 5 193MB? 笔记本
Intel HD Graphics ICL RVP BigSur 0x8A710001 5 1 4 193MB? 笔记本
Intel HD Graphics ICL RVP BigSur 0x8A700001 5 1 4 193MB? 笔记本
Intel HD Graphics ICL RVP BigSur 0x8A510001 3 1 2 193MB? 笔记本
Intel HD Graphics ICL RVP BigSur 0x8A5C0001 3 1 2 193MB? 笔记本
Intel HD Graphics ICL RVP BigSur 0x8A5D0001 3 1 2 193MB? 笔记本
Intel HD Graphics ICL RVP BigSur 0x8A520001 5 1 4 193MB? 笔记本
Intel HD Graphics ICL RVP BigSur 0x8A530001 5 1 4 193MB? 笔记本
Intel HD Graphics ICL RVP BigSur 0x8A5A0001 5 1 4 193MB? 笔记本
Intel HD Graphics ICL RVP BigSur 0x8A5B0001 5 1 4 193MB? 笔记本
Intel Iris Plus Graphics 0x8A510002 3 1 2 193MB? 笔记本
Intel Iris Plus Graphics 0x8A5C0002 3 1 2 193MB? 笔记本
Intel Iris Plus Graphics 0x8A520002 5 1 4 193MB? 笔记本
Intel Iris Plus Graphics 0x8A530002 5 1 4 193MB? 笔记本

支持的DevID如下。

1
2
3
4
5
6
7
8
9
10
0xff05
0x8A70
0x8A71
0x8A51
0x8A5C
0x8A5D
0x8A52
0x8A53
0x8A5A
0x8A5B

对于第十代显卡,属性列表如下。

属性 类型
AAPL,GfxYTile Data 01000000
AAPL,ig-platform-id Data 0900528A
device-id Data 528A0000
disable-external-gpu Data 01000000
enable-hdmi20 Data 01000000
framebuffer-fbmem Data 00009000
framebuffer-patch-enable Data 01000000
framebuffer-stolenmem Data 00003001
framebuffer-unifiedmem Data 00000080
hda-gfx String onboard-1
igfxfw Data 02000000

AMD支持列表

一般而言,对于AMD,最新版本的Mac支持基于GCN的AMD CPU。

各型号兼容性列表如下。

1
https://sites.google.com/view/hardhack/videocards/amd-radeon-graphics

若使用MSI Navi 5700XT,安装Catalina时将会崩溃。可在OpenCore临时使用以下补丁处理。

1
2
3
4
Find: 41 54 59 2C 52  6F 6D 23 00
Replace: 41 4D 44 2C 52 6F 6D 23 00
Identifier: com.apple.kext.AMDRadeonX6000Framebuffer
Count: 1
架构 最早支持版本 最后支持版本 型号 备注
X800 10.3.x 10.7.5 需要32位内核
X1000 10.4.x 10.7.5 X1900 XT
X1600
X1300
Terascale 10.4.x 10.13.6
Terascale 2/3 10.6.x 10.13.6
GCN 1 10.8.3 至今
GCN 2/3 10.10.x 至今
HD 2000 Series(2xxx) 10.4 10.13.6 HD 2600 XT
HD 2400 XT
HD 3000 Series(3xxx) 10.4 10.13.6 HD 3870
HD 4000 Series(4xxx) 10.6 10.13.6 HD 4870
HD 5000 Series(5xxx) 10.6 10.13.6 HD 5450
HD 5470
HD 5570
HD 5630
HD 5670
HD 5690
HD 5730
HD 5770
HD 5850
HD 5870
HD 6000 Series(6xxx) 10.6 10.13.6 HD 6230
HD 6250
HD 6350
HD 6450
HD 6570
HD 6510
HD 6610
HD 6670
HD 6790
HD 6850
HD 6870
HD 6950
HD 6970
FirePro V7900
HD 7000 Series(7xxx) 10.8 至今 Dual AMD FirePro D300
Dual AMD FirePro D500
Dual AMD FirePro D700
FirePro W5100(FakeID needed)
FirePro W7000
FirePro W900s0
HD 7700
HD 7730
HD 7750
HD 7770
HD 7790
HD 7850
HD 7870
HD 7870 XT
HD 7950
HD 7970
HD 7990
启动标志radpg=15用于HD 7730/7750/7770,R7 250,R7 250X GPU初始化
HD 8000 Series(8xxx) 10.8 至今 HD 8740
HD 8760
HD 8770
HD 8850
HD 8870
HD 8890
HD 8950
HD 8970
Radeon R7/R9 10.10.x 至今 R9 Fury X
R9 Fury
R9 Nano
R9 390(需要FakeID)
R9 290X/390X
R9 290/390(需要FakeID)
R9 280/380(需要FakeID)
R9 270X/370X
R7 270/370(需要FakeID)
R7 265
R7 260x/360x
R9 260/360(某些机器需要FakeID)
R9 255
R7 250X
R7 250(需要FakeID)
R7 240(需要FakeID)
Sapphire卡对Big Sur的兼容性最好
R9 280x/380x不支持Big Sur
启动标志radpg=15用于HD 7730/7750/7770,R7 250,R7 250X GPU初始化
启动标志-raddvi用于在290X/370上修复DVI
Polaris 10/20 10.12.1 至今 RX 480
RX 470D
RX 470
RX 460
RX 590
RX 580X
RX 580
RX 570X
RX 570
RX 560X
RX 560
WX 5100
WX 4100
E9550
不要使用XFX
Vega 10 10.12.6 至今 Vega 64 Liquid
Vega 64
Vega 56
Vega Frontier Edition
Radeon Pro WX 9100
Radeon Pro WX 7100
不要使用XFX
Vega 20 10.14.5 至今 Radeon VII
Navi 10 10.15.1 至今 RX 5500
RX 5500 XT
RX 5600
RX 5600 XT
RX 5700
RX 5700 XT
RX 5700 XT 50周年纪念版
Radeon Pro W5500
Radeon Pro W5700
需要启动参数agdpmod=pikera
若使用MSI Navi 5700XT,在安装Catalina时将会崩溃,Big Sur中该问题已修复
Navi 20 11.4 RX 6800
RX 6800 XT
RX 6900 XT
需要启动参数agdpmod=pikera
Lexa WX 3100
WX 2100
RX 550X
RX 550
RX 540X
RX 540
无可用驱动
对于RX 550,Lexa内核不支持(Stream Processors 512 (CUs 8)、Memory Speed 1750MHz (7000Mz effective)、Reference Clock 1183MHz),Baffin内核则支持(Stream Processors 640 (CUs 10)、Memory Speed 1500MHz (6000Mz effective)、Reference Clock 1071MHz)
AMD APU Vega 11(Zen)
Vega 8(Zen)
GCN 3(Escavator Gen 2, Steamroller)
GCN 2(Escavator Gen 1, Puma, Puma +)
无可用驱动

AMD PCI ID列表

Vendor ID Device ID Name Note
1002 0048
1002 1002
1002 1300
1002 1301
1002 1302
1002 1304 Kaveri
1002 1305 Kaveri
1002 1306 Kaveri
1002 1307 Kaveri
1002 1308 Kaveri HDMI/DP Audio Controller
1002 1309 Kaveri [Radeon R6/R7 Graphics]
1002 130a Kaveri [Radeon R6 Graphics]
1002 130b Kaveri [Radeon R4 Graphics]
1002 130c Kaveri [Radeon R7 Graphics]
1002 130d Kaveri [Radeon R6 Graphics]
1002 130e Kaveri [Radeon R5 Graphics]
1002 130f Kaveri [Radeon R7 Graphics]
1002 1310 Kaveri
1002 1311 Kaveri
1002 1312 Kaveri
1002 1313 Kaveri [Radeon R7 Graphics]
1002 1314 Wrestler HDMI Audio
1002 1315 Kaveri [Radeon R5 Graphics]
1002 1316 Kaveri [Radeon R5 Graphics]
1002 1317 Kaveri
1002 1318 Kaveri [Radeon R5 Graphics]
1002 131b Kaveri [Radeon R4 Graphics]
1002 131c Kaveri [Radeon R7 Graphics]
1002 131d Kaveri [Radeon R6 Graphics]
1002 1320
1002 1321
1002 1322
1002 1323
1002 1324
1002 1325
1002 1326
1002 1327
1002 1328
1002 1329
1002 132a
1002 132b
1002 132c
1002 132d
1002 132f
1002 13e9 Ariel
1002 145b
1002 1478 Navi 10 XL Upstream Port of PCI Express Switch
1002 1479 Navi 10 XL Downstream Port of PCI Express Switch
1002 154c Kryptos [Radeon RX 350]
1002 154e Garfield
1002 1551 Arlene
1002 1552 Pooky
1002 1561 Anubis
1002 15d8 Picasso
1002 15dd Raven Ridge [Radeon Vega Series / Radeon Vega Mobile Series]
1002 15de Raven/Raven2/Fenghuang HDMI/DP Audio Controller
1002 15df Raven/Raven2/Fenghuang/Renoir Cryptographic Coprocessor
1002 15ff Fenghuang [Zhongshan Subor Z+]
1002 1607 Arden
1002 1636 Renoir
1002 1638 Cezanne
1002 163f VanGogh
1002 164c Lucienne
1002 1714 BeaverCreek HDMI Audio [Radeon HD 6500D and 6400G-6600G series]
1002 2191
1002 3150 RV380/M24 [Mobility Radeon X600]
1002 3151 RV380 GL [FireMV 2400]
1002 3152 RV370/M22 [Mobility Radeon X300]
1002 3154 RV380/M24 GL [Mobility FireGL V3200]
1002 3155 RV380 GL [FireMV 2400]
1002 3171 RV380 GL [FireMV 2400] (Secondary)
1002 3e50 RV380 [Radeon X550/X600]
1002 3e54 RV380 GL [FireGL V3200]
1002 3e70 RV380 [Radeon X550/X600] (Secondary)
1002 4136 RS100 [Mobility IGP 320M]
1002 4137 RS200 [Radeon IGP 340]
1002 4144 R300 [Radeon 9500]
1002 4145
1002 4146 R300 [Radeon 9700 PRO]
1002 4147 R300 GL [FireGL Z1]
1002 4148 R350 [Radeon 9800/9800 SE]
1002 4149
1002 414a
1002 414b
1002 4150 RV350 [Radeon 9550/9600/X1050 Series]
1002 4151 RV350 [Radeon 9600 Series]
1002 4152 RV360 [Radeon 9600/X1050 Series]
1002 4153 RV350 [Radeon 9550]
1002 4154 RV350 GL [FireGL T2]
1002 4155 RV350 [Radeon 9600]
1002 4156
1002 4157 RV350 GL [FireGL T2]
1002 4158 68800AX [Graphics Ultra Pro PCI]
1002 4164 R300 [Radeon 9500 PRO] (Secondary)
1002 4165 R300 [Radeon 9700 PRO] (Secondary)
1002 4166 R300 [Radeon 9700 PRO] (Secondary)
1002 4168 RV350 [Radeon 9800 SE] (Secondary)
1002 4170 RV350 [Radeon 9550/9600/X1050 Series] (Secondary)
1002 4171 RV350 [Radeon 9600] (Secondary)
1002 4172 RV350 [Radeon 9600/X1050 Series] (Secondary)
1002 4173 RV350 [Radeon 9550] (Secondary)
1002 4237
1002 4242 R200 [All-In-Wonder Radeon 8500 DV]
1002 4243 R200 PCI Bridge [All-in-Wonder Radeon 8500DV]
1002 4336 RS100 [Radeon IGP 320M]
1002 4337 RS200M [Radeon IGP 330M/340M/345M/350M]
1002 4341 SB200 AC97 Audio Controller
1002 4342 SB200 PCI to PCI Bridge
1002 4345 SB200 EHCI USB Controller
1002 4346 Crayola 6 [XENOS Parent Die (XBOX 360)]
1002 4347 SB200 OHCI USB Controller #1
1002 4348 SB200 OHCI USB Controller #2
1002 4349 SB200 IDE Controller
1002 434c SB200 PCI to LPC Bridge
1002 434d SB200 AC97 Modem Controller
1002 4353 SB200 SMBus Controller
1002 4354 215CT [Mach64 CT PCI]
1002 4358 Mach64 CX [Graphics Xpression]
1002 4361 SB300 AC’97 Audio Controller
1002 4362 SB300 PCI to PCI Bridge
1002 4363 SB300 SMBus Controller
1002 4365 SB300 USB Controller (EHCI)
1002 4367 SB300 USB Controller (EHCI)
1002 4368 SB300 USB Controller (EHCI)
1002 4369 SB300 IDE Controller
1002 436c SB300 PCI to LPC Bridge
1002 436d SB300 AC97 Modem Controller
1002 436e SB300 Serial ATA Controller
1002 4370 IXP SB400 AC’97 Audio Controller
1002 4371 IXP SB4x0 PCI-PCI Bridge
1002 4372 IXP SB4x0 SMBus Controller
1002 4373 IXP SB4x0 USB2 Host Controller
1002 4374 IXP SB4x0 USB Host Controller
1002 4375 IXP SB4x0 USB Host Controller
1002 4376 IXP SB4x0 IDE Controller
1002 4377 IXP SB4x0 PCI-ISA Bridge
1002 4378 IXP SB400 AC’97 Modem Controller
1002 4379 IXP SB4x0 Serial ATA Controller
1002 437a IXP SB400 Serial ATA Controller
1002 437b IXP SB4x0 High Definition Audio Controller
1002 4380 SB600 Non-Raid-5 SATA
1002 4381 SB600 SATA Controller (RAID 5 mode)
1002 4382 SB600 AC97 Audio
1002 4383 SBx00 Azalia (Intel HDA)
1002 4384 SBx00 PCI to PCI Bridge
1002 4385 SBx00 SMBus Controller
1002 4386 SB600 USB Controller (EHCI)
1002 4387 SB600 USB (OHCI0)
1002 4388 SB600 USB (OHCI1)
1002 4389 SB600 USB (OHCI2)
1002 438a SB600 USB (OHCI3)
1002 438b SB600 USB (OHCI4)
1002 438c SB600 IDE
1002 438d SB600 PCI to LPC Bridge
1002 438e SB600 AC97 Modem
1002 4390 SB7x0/SB8x0/SB9x0 SATA Controller [IDE mode]
1002 4391 SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode]
1002 4392 SB7x0/SB8x0/SB9x0 SATA Controller [Non-RAID5 mode]
1002 4393 SB7x0/SB8x0/SB9x0 SATA Controller [RAID5 mode]
1002 4394 SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode]
1002 4395 SB8x0/SB9x0 SATA Controller [Storage mode]
1002 4396 SB7x0/SB8x0/SB9x0 USB EHCI Controller
1002 4397 SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
1002 4398 SB7x0 USB OHCI1 Controller
1002 4399 SB7x0/SB8x0/SB9x0 USB OHCI2 Controller
1002 439c SB7x0/SB8x0/SB9x0 IDE Controller
1002 439d SB7x0/SB8x0/SB9x0 LPC host controller
1002 43a0 SB700/SB800/SB900 PCI to PCI bridge (PCIE port 0)
1002 43a1 SB700/SB800/SB900 PCI to PCI bridge (PCIE port 1)
1002 43a2 SB900 PCI to PCI bridge (PCIE port 2)
1002 43a3 SB900 PCI to PCI bridge (PCIE port 3)
1002 4437 RS250 [Mobility Radeon 7000 IGP]
1002 4554 210888ET [Mach64 ET]
1002 4630 XENOS Parent Die (XBOX 360)
1002 4631 XENOS Daughter Die (XBOX 360)
1002 4654 Mach64 VT
1002 4742 Rage 3 [3D Rage PRO AGP 2X]
1002 4744 Rage 3 [3D Rage PRO AGP 1X]
1002 4747
1002 4748
1002 4749 3D Rage PRO PCI
1002 474c
1002 474d Rage XL AGP 2X
1002 474e Rage XC AGP
1002 474f Rage XL
1002 4750 3D Rage Pro PCI
1002 4751
1002 4752 Rage 3 [Rage XL PCI]
1002 4753 Rage XC
1002 4754 Mach64 GT/GT-B [3D Rage I/II]
1002 4755 Mach64 GT-B [3D Rage II+ DVD]
1002 4756 Rage 2 [3D Rage IIC PCI]
1002 4757 Rage 2 [3D Rage IIC AGP]
1002 4758 Mach64 GX [WinTurbo]
1002 4759 Rage 3 [3D Rage IIC PCI]
1002 475a 3D Rage IIC AGP
1002 4845 Xilleon 220 HBIU for HDTV2
1002 4846 Xilleon 220 IDE for HDTV2
1002 4847 Xilleon 220 USB for HDTV2
1002 4848 Xilleon 220 DAIO-0 for HDTV2
1002 4849 Xilleon 220 DAIO-1 for HDTV2
1002 484a Xilleon 220 LPC for HDTV2
1002 4850 Xilleon 215 HBIU for X215
1002 4851 Xilleon 215 IDE for X215
1002 4852 Xilleon 215 USB for X215
1002 4853 Xilleon 215 DAIO-0 for X215
1002 4854 Xilleon 215 DAIO-1 for X215
1002 4855 Xilleon 225 HBIU for X225
1002 4856 Xilleon 225 IDE for X225
1002 4857 Xilleon 225 USB for X225
1002 4858 Xilleon 225 DAIO-0 for X225
1002 4859 Xilleon 225 DAIO-1 for X225
1002 4860 Xilleon 210 HBIU for X210
1002 4861 Xilleon 210 IDE for X210
1002 4862 Xilleon 210 USB for X210
1002 4863 Xilleon 210 DAIO-0 for X210
1002 4864 Xilleon 210 DAIO-1 for X210
1002 4865 Xilleon 226 HBIU for X226
1002 4866 Xilleon 226 IDE for X226
1002 4867 Xilleon 226 USB for X226
1002 4868 Xilleon 226 DAIO-0 for X226
1002 4869 Xilleon 226 DAIO-1 for X226
1002 486a Xilleon 240S HBIU for X240S
1002 486b Xilleon 240H HBIU for X240H
1002 486c Xilleon 240S USB for X240S
1002 486d Xilleon 240H USB for X240H
1002 486e Xilleon 250 USB 1.1 for X250
1002 486f Xilleon 260 USB 1.1 for X260
1002 4870 Xilleon 250 HBIU for X250
1002 4871 Xilleon 250 IDE for X250
1002 4872 Xilleon 234/235 HBIU for X234/X235
1002 4873 Xilleon 244/245 HBIU for X244/X245
1002 4874 Xilleon 234/235 USB 1.1 for X234/X235
1002 4875 Xilleon 260 HBIU for X260
1002 4876 Xilleon 260 IDE for X260
1002 4877 Xilleon 244/245 USB 1.1 for X244/X245
1002 4878 Xilleon 270 HBIU for X270
1002 487b Xilleon 242 HBIU for X242
1002 487d Xilleon 242 USB 1.1 for X242
1002 4880 Xilleon 254 HBIU for X254
1002 4881 Xilleon 254 USB 1.1 for X254
1002 4882 Xilleon 255 HBIU for X255
1002 4883 Xilleon 255 USB 1.1 for X255
1002 4884 Xilleon 243 HBIU for X243
1002 4885 Xilleon 243 USB 1.1 for X243
1002 4886 Xilleon 233 HBIU for X233
1002 4887 Xilleon 233 USB 1.1 for X233
1002 4888 Xilleon 143 HBIU for X143
1002 4889 Xilleon 143 HBIU for X143L
1002 488a Xilleon 143 HBIU for X143S
1002 4964
1002 4965
1002 4966 RV250 [Radeon 9000 Series]
1002 4967
1002 496e RV250 [Radeon 9000] (Secondary)
1002 4a48
1002 4a49 R420 [Radeon X800 PRO/GTO AGP]
1002 4a4a R420 [Radeon X800 GT AGP]
1002 4a4b R420 [Radeon X800 AGP Series]
1002 4a4c
1002 4a4d R420 GL [FireGL X3-256]
1002 4a4e RV420/M18 [Mobility Radeon 9800]
1002 4a4f R420 [Radeon X850 AGP]
1002 4a50 R420 [Radeon X800 XT Platinum Edition AGP]
1002 4a54 R420 [Radeon X800 VE AGP]
1002 4a69 R420 [Radeon X800 PRO/GTO] (Secondary)
1002 4a6a R420 [Radeon X800] (Secondary)
1002 4a6b R420 [Radeon X800 XT AGP] (Secondary)
1002 4a70 R420 [Radeon X800 XT Platinum Edition AGP] (Secondary)
1002 4a74 R420 [Radeon X800 VE] (Secondary)
1002 4b48
1002 4b49 R481 [Radeon X850 XT AGP]
1002 4b4a
1002 4b4b R481 [Radeon X850 PRO AGP]
1002 4b4c R481 [Radeon X850 XT Platinum Edition AGP]
1002 4b69 R481 [Radeon X850 XT AGP] (Secondary)
1002 4b6b R481 [Radeon X850 PRO AGP] (Secondary)
1002 4b6c R481 [Radeon X850 XT Platinum Edition AGP] (Secondary)
1002 4c42 Mach64 LT [3D Rage LT PRO AGP]
1002 4c44
1002 4c45
1002 4c46 Rage Mobility 128 AGP 2X/Mobility M3
1002 4c47 3D Rage IIC PCI / Mobility Radeon 7500/7500C
1002 4c49 3D Rage LT PRO PCI
1002 4c4d Rage Mobility AGP 2x Series
1002 4c4e
1002 4c50 Rage 3 LT [3D Rage LT PRO PCI]
1002 4c51
1002 4c52 M1 [Rage Mobility-M1 PCI]
1002 4c53
1002 4c54 264LT [Mach64 LT]
1002 4c57 RV200/M7 [Mobility Radeon 7500]
1002 4c58 RV200/M7 GL [Mobility FireGL 7800]
1002 4c59 RV100/M6 [Rage/Radeon Mobility Series]
1002 4c5a
1002 4c64
1002 4c65
1002 4c66 RV250/M9 GL [Mobility FireGL 9000/Radeon 9000]
1002 4c67
1002 4c6e RV250/M9 [Mobility Radeon 9000] (Secondary)
1002 4d46 Rage Mobility 128 AGP 4X/Mobility M4
1002 4d4c
1002 4d52 Theater 550 PRO PCI [ATI TV Wonder 550]
1002 4d53 Theater 550 PRO PCIe
1002 4e44 R300 [Radeon 9700/9700 PRO]
1002 4e45 R300 [Radeon 9500 PRO/9700]
1002 4e46 R300 [Radeon 9600 TX]
1002 4e47 R300 GL [FireGL X1]
1002 4e48 R350 [Radeon 9800 Series]
1002 4e49 R350 [Radeon 9800]
1002 4e4a R360 [Radeon 9800 XXL/XT]
1002 4e4b R350 GL [FireGL X2 AGP Pro]
1002 4e50 RV350/M10 / RV360/M11 [Mobility Radeon 9600 (PRO) / 9700]
1002 4e51 RV350 [Radeon 9550/9600/X1050 Series]
1002 4e52 RV350/M10 [Mobility Radeon 9500/9700 SE]
1002 4e53
1002 4e54 RV350/M10 GL [Mobility FireGL T2]
1002 4e56 RV360/M12 [Mobility Radeon 9550]
1002 4e64 R300 [Radeon 9700 PRO] (Secondary)
1002 4e65 R300 [Radeon 9500 PRO] (Secondary)
1002 4e66 RV350 [Radeon 9600] (Secondary)
1002 4e67 R300 GL [FireGL X1] (Secondary)
1002 4e68 R350 [Radeon 9800 PRO] (Secondary)
1002 4e69 R350 [Radeon 9800] (Secondary)
1002 4e6a RV350 [Radeon 9800 XT] (Secondary)
1002 4e71 RV350/M10 [Mobility Radeon 9600] (Secondary)
1002 4f72 RV250 [Radeon 9000 Series]
1002 4f73 RV250 [Radeon 9000 Series] (Secondary)
1002 5041
1002 5042
1002 5043
1002 5044 All-In-Wonder 128 PCI
1002 5045
1002 5046 Rage 4 [Rage 128 PRO AGP 4X]
1002 5047
1002 5048
1002 5049
1002 504a
1002 504b
1002 504c
1002 504d
1002 504e
1002 504f
1002 5050 Rage 4 [Rage 128 PRO PCI / Xpert 128 PCI]
1002 5051
1002 5052 Rage 4 [Rage 128 PRO AGP 4X]
1002 5053
1002 5054
1002 5055
1002 5056
1002 5057
1002 5058
1002 5144 R100 [Radeon 7200 / All-In-Wonder Radeon]
1002 5145
1002 5146
1002 5147
1002 5148 R200 GL [FireGL 8800]
1002 5149
1002 514a
1002 514b
1002 514c R200 [Radeon 8500/8500 LE]
1002 514d R200 [Radeon 9100]
1002 514e
1002 514f
1002 5154
1002 5155
1002 5157 RV200 [Radeon 7500/7500 LE]
1002 5158
1002 5159 RV100 [Radeon 7000 / Radeon VE]
1002 515a
1002 515e ES1000
1002 515f
1002 5168
1002 5169
1002 516a
1002 516b
1002 516c
1002 5245 Rage 128 GL PCI
1002 5246 Rage 128 (Rage 4) series
1002 5247
1002 524b Rage 128 VR PCI
1002 524c Rage 128 VR AGP
1002 5345
1002 5346
1002 5347
1002 5348
1002 534b
1002 534c
1002 534d Rage 128 4X AGP 4x
1002 534e
1002 5354 Mach 64 VT
1002 5446 Rage 128 PRO Ultra AGP 4x
1002 544c
1002 5452 Rage 128 PRO Ultra4XL VR-R AGP
1002 5453
1002 5454
1002 5455
1002 5460 RV370/M22 [Mobility Radeon X300]
1002 5461 RV370/M22 [Mobility Radeon X300]
1002 5462 RV380/M24C [Mobility Radeon X600 SE]
1002 5464 RV370/M22 GL [Mobility FireGL V3100]
1002 5548
1002 5549 R423 [Radeon X800 GTO]
1002 554a R423 [Radeon X800 XT Platinum Edition]
1002 554b R423 [Radeon X800 GT/SE]
1002 554c
1002 554d R480 [Radeon X800 GTO2/XL]
1002 554e R430 [All-In-Wonder X800 GT]
1002 554f R430 [Radeon X800]
1002 5550 R423 GL [FireGL V7100]
1002 5551 R423 GL [FireGL V5100]
1002 5552
1002 5554
1002 5555
1002 5569 R423 [Radeon X800 PRO] (Secondary)
1002 556b R423 [Radeon X800 GT] (Secondary)
1002 556d R480 [Radeon X800 GTO2/XL] (Secondary)
1002 556f R430 [Radeon X800] (Secondary)
1002 5571 R423 GL [FireGL V5100] (Secondary)
1002 564a
1002 564b RV410/M26 GL [Mobility FireGL V5000]
1002 564f RV410/M26 [Mobility Radeon X700 XL]
1002 5652 RV410/M26 [Mobility Radeon X700]
1002 5653 RV410/M26 [Mobility Radeon X700]
1002 5654 Mach64 VT [Video Xpression]
1002 5655 264VT3 [Mach64 VT3]
1002 5656 Mach64 VT4 [Video Xpression+]
1002 5657 RV410 [Radeon X550 XTX / X700]
1002 5830 RS300 Host Bridge
1002 5831 RS300 Host Bridge
1002 5832 RS300 Host Bridge
1002 5833 RS300 Host Bridge
1002 5834 RS300 [Radeon 9100 IGP]
1002 5835 RS300M [Mobility Radeon 9100 IGP]
1002 5838 RS300 AGP Bridge
1002 5854 RS480 [Radeon Xpress 200 Series] (Secondary)
1002 5874 RS480 [Radeon Xpress 1150] (Secondary)
1002 5940 RV280 [Radeon 9200 PRO] (Secondary)
1002 5941 RV280 [Radeon 9200] (Secondary)
1002 5944 RV280 [Radeon 9200 SE PCI]
1002 5950 RS480/RS482/RS485 Host Bridge
1002 5951 RX480/RX482 Host Bridge
1002 5952 RD580 Host Bridge
1002 5954 RS480 [Radeon Xpress 200 Series]
1002 5955 RS480M [Mobility Radeon Xpress 200]
1002 5956 RD790 Host Bridge
1002 5957 RX780/RX790 Host Bridge
1002 5958 RD780 Host Bridge
1002 5960 RV280 [Radeon 9200 PRO / 9250]
1002 5961 RV280 [Radeon 9200]
1002 5962 RV280 [Radeon 9200]
1002 5964 RV280 [Radeon 9200 SE]
1002 5965 RV280 GL [FireMV 2200 PCI]
1002 5969
1002 5974 RS482/RS485 [Radeon Xpress 1100/1150]
1002 5975 RS482M [Mobility Radeon Xpress 200]
1002 5978 RX780/RD790 PCI to PCI bridge (external gfx0 port A)
1002 5979 RD790 PCI to PCI bridge (external gfx0 port B)
1002 597a RD790 PCI to PCI bridge (PCI express gpp port A)
1002 597b RX780/RD790 PCI to PCI bridge (PCI express gpp port B)
1002 597c RD790 PCI to PCI bridge (PCI express gpp port C)
1002 597d RX780/RD790 PCI to PCI bridge (PCI express gpp port D)
1002 597e RD790 PCI to PCI bridge (PCI express gpp port E)
1002 597f RD790 PCI to PCI bridge (PCI express gpp port F)
1002 5980 RD790 PCI to PCI bridge (external gfx1 port A)
1002 5981 RD790 PCI to PCI bridge (external gfx1 port B)
1002 5982 RD790 PCI to PCI bridge (NB-SB link)
1002 5a10 RD890 Northbridge only dual slot (2x16) PCI-e GFX Hydra part
1002 5a11 RD890 Northbridge only single slot PCI-e GFX Hydra part
1002 5a12 RD890 Northbridge only dual slot (2x8) PCI-e GFX Hydra part
1002 5a13 RD890S/SR5650 Host Bridge
1002 5a14 RD9x0/RX980 Host Bridge
1002 5a15 RD890 PCI to PCI bridge (PCI express gpp port A)
1002 5a16 RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GFX port 0)
1002 5a17 RD890/RD9x0 PCI to PCI bridge (PCI Express GFX port 1)
1002 5a18 RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP Port 0)
1002 5a19 RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP Port 1)
1002 5a1a RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP Port 2)
1002 5a1b RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP Port 3)
1002 5a1c RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP Port 4)
1002 5a1d RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP Port 5)
1002 5a1e RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP2 Port 0)
1002 5a1f RD890/RD990 PCI to PCI bridge (PCI Express GFX2 port 0)
1002 5a20 RD890/RD990 PCI to PCI bridge (PCI Express GFX2 port 1)
1002 5a23 RD890S/RD990 I/O Memory Management Unit (IOMMU)
1002 5a31 RC410 Host Bridge
1002 5a33 RS400 Host Bridge
1002 5a34 RS4xx PCI Express Port [ext gfx]
1002 5a36 RC4xx/RS4xx PCI Express Port 1
1002 5a37 RC4xx/RS4xx PCI Express Port 2
1002 5a38 RC4xx/RS4xx PCI Express Port 3
1002 5a39 RC4xx/RS4xx PCI Express Port 4
1002 5a3f RC4xx/RS4xx PCI Bridge [int gfx]
1002 5a41 RS400 [Radeon Xpress 200]
1002 5a42 RS400M [Radeon Xpress 200M]
1002 5a43
1002 5a61 RC410 [Radeon Xpress 200/1100]
1002 5a62 RC410M [Mobility Radeon Xpress 200M]
1002 5a63
1002 5b60 RV370 [Radeon X300]
1002 5b62 RV370 [Radeon X600/X600 SE]
1002 5b63 RV370 [Radeon X300/X550/X1050 Series]
1002 5b64 RV370 GL [FireGL V3100]
1002 5b65 RV370 GL [FireMV 2200]
1002 5b66 RV370X
1002 5b70 RV370 [Radeon X300 SE]
1002 5b72 RV380 [Radeon X300/X550/X1050 Series] (Secondary)
1002 5b73 RV370 [Radeon X300/X550/X1050 Series] (Secondary)
1002 5b74 RV370 GL [FireGL V3100] (Secondary)
1002 5b75 RV370 GL [FireMV 2200] (Secondary)
1002 5c61 RV280/M9+ [Mobility Radeon 9200 AGP]
1002 5c63 RV280/M9+ [Mobility Radeon 9200 AGP]
1002 5d44 RV280 [Radeon 9200 SE] (Secondary)
1002 5d45 RV280 GL [FireMV 2200 PCI] (Secondary)
1002 5d48 R423/M28 [Mobility Radeon X800 XT]
1002 5d49 R423/M28 GL [Mobility FireGL V5100]
1002 5d4a R423/M28 [Mobility Radeon X800]
1002 5d4c
1002 5d4d R480 [Radeon X850 XT Platinum Edition]
1002 5d4e R480 [Radeon X850 SE]
1002 5d4f R480 [Radeon X800 GTO]
1002 5d50 R480 GL [FireGL V7200]
1002 5d51
1002 5d52 R480 [Radeon X850 XT]
1002 5d57 R423 [Radeon X800 XT]
1002 5d6d R480 [Radeon X850 XT Platinum Edition] (Secondary)
1002 5d6f R480 [Radeon X800 GTO] (Secondary)
1002 5d72 R480 [Radeon X850 XT] (Secondary)
1002 5d77 R423 [Radeon X800 XT] (Secondary)
1002 5e48 RV410 GL [FireGL V5000]
1002 5e49 RV410 [Radeon X700 Series]
1002 5e4a RV410 [Radeon X700 XT]
1002 5e4b RV410 [Radeon X700 PRO]
1002 5e4c RV410 [Radeon X700 SE]
1002 5e4d RV410 [Radeon X700]
1002 5e4f RV410 [Radeon X700]
1002 5e6b RV410 [Radeon X700 PRO] (Secondary)
1002 5e6d RV410 [Radeon X700] (Secondary)
1002 5f57 R423 [Radeon X800 XT]
1002 6600 Mars [Radeon HD 8670A/8670M/8750M / R7 M370]
1002 6601 Mars [Radeon HD 8730M]
1002 6602
1002 6603
1002 6604 Opal XT [Radeon R7 M265/M365X/M465]
1002 6605 Opal PRO [Radeon R7 M260X]
1002 6606 Mars XTX [Radeon HD 8790M]
1002 6607 Mars LE [Radeon HD 8530M / R5 M240]
1002 6608 Oland GL [FirePro W2100]
1002 6609 Oland GL [FirePro W2100 / Barco MXRT 2600]
1002 6610 Oland XT [Radeon HD 8670 / R5 340X OEM / R7 250/350/350X OEM]
1002 6611 Oland [Radeon HD 8570 / R5 430 OEM / R7 240/340 / Radeon 520 OEM]
1002 6613 Oland PRO [Radeon R7 240/340]
1002 6620
1002 6621
1002 6623
1002 6631 Oland
1002 6640 Saturn XT [FirePro M6100]
1002 6641 Saturn PRO [Radeon HD 8930M]
1002 6646 Bonaire XT [Radeon R9 M280X]
1002 6647 Saturn PRO/XT [Radeon R9 M270X/M280X]
1002 6649 Bonaire [FirePro W5100]
1002 664d Bonaire [FirePro W5100 / Barco MXRT-5600]
1002 6650 Bonaire
1002 6651 Bonaire
1002 6658 Bonaire XTX [Radeon R7 260X/360]
1002 665c Bonaire XT [Radeon HD 7790/8770 / R7 360 / R9 260/360 OEM]
1002 665d Bonaire [Radeon R7 200 Series]
1002 665f Tobago PRO [Radeon R7 360 / R9 360 OEM]
1002 6660 Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / Radeon 520 Mobile]
1002 6663 Sun PRO [Radeon HD 8570A/8570M]
1002 6664 Jet XT [Radeon R5 M240]
1002 6665 Jet PRO [Radeon R5 M230 / R7 M260DX / Radeon 520 Mobile]
1002 6667 Jet ULT [Radeon R5 M230]
1002 666f Sun LE [Radeon HD 8550M / R5 M230]
1002 6670
1002 66a0 Vega 20 [Radeon Instinct]
1002 66a1 Vega 20 WKS GL-XE [Radeon Pro VII]
1002 66a2 Vega 20
1002 66a3 Vega 20 [Radeon Pro Vega II/Radeon Pro Vega II Duo]
1002 66a7 Vega 20 [Radeon Pro Vega 20]
1002 66af Vega 20 [Radeon VII]
1002 6700
1002 6701
1002 6702
1002 6703
1002 6704 Cayman PRO GL [FirePro V7900]
1002 6705
1002 6706
1002 6707 Cayman LE GL [FirePro V5900]
1002 6708
1002 6709
1002 6718 Cayman XT [Radeon HD 6970]
1002 6719 Cayman PRO [Radeon HD 6950]
1002 671c Antilles [Radeon HD 6990]
1002 671d Antilles [Radeon HD 6990]
1002 671f Cayman CE [Radeon HD 6930]
1002 6720 Blackcomb [Radeon HD 6970M/6990M]
1002 6721
1002 6722
1002 6723
1002 6724
1002 6725
1002 6726
1002 6727
1002 6728
1002 6729
1002 6738 Barts XT [Radeon HD 6870]
1002 6739 Barts PRO [Radeon HD 6850]
1002 673e Barts LE [Radeon HD 6790]
1002 6740 Whistler [Radeon HD 6730M/6770M/7690M XT]
1002 6741 Whistler [Radeon HD 6630M/6650M/6750M/7670M/7690M]
1002 6742 Whistler LE [Radeon HD 6610M/7610M]
1002 6743 Whistler [Radeon E6760]
1002 6744
1002 6745
1002 6746
1002 6747
1002 6748
1002 6749 Turks GL [FirePro V4900]
1002 674a Turks GL [FirePro V3900]
1002 6750 Onega [Radeon HD 6650A/7650A]
1002 6751 Turks [Radeon HD 7650A/7670A]
1002 6758 Turks XT [Radeon HD 6670/7670]
1002 6759 Turks PRO [Radeon HD 6570/7570/8550 / R5 230]
1002 675b Turks [Radeon HD 7600 Series]
1002 675d Turks PRO [Radeon HD 7570]
1002 675f Turks LE [Radeon HD 5570/6510/7510/8510]
1002 6760 Seymour [Radeon HD 6400M/7400M Series]
1002 6761 Seymour LP [Radeon HD 6430M]
1002 6762
1002 6763 Seymour [Radeon E6460]
1002 6764 Seymour [Radeon HD 6400M Series]
1002 6765 Seymour [Radeon HD 6400M Series]
1002 6766 Caicos
1002 6767 Caicos
1002 6768 Caicos
1002 6770 Caicos [Radeon HD 6450A/7450A]
1002 6771 Caicos XTX [Radeon HD 8490 / R5 235X OEM]
1002 6772 Caicos [Radeon HD 7450A]
1002 6778 Caicos XT [Radeon HD 7470/8470 / R5 235/310 OEM]
1002 6779 Caicos [Radeon HD 6450/7450/8450 / R5 230 OEM]
1002 677b Caicos PRO [Radeon HD 7450]
1002 6780 Tahiti XT GL [FirePro W9000]
1002 6784 Tahiti [FirePro Series Graphics Adapter]
1002 6788 Tahiti [FirePro Series Graphics Adapter]
1002 678a Tahiti PRO GL [FirePro Series]
1002 6790
1002 6791
1002 6792
1002 6798 Tahiti XT [Radeon HD 7970/8970 OEM / R9 280X]
1002 6799
1002 679a Tahiti PRO [Radeon HD 7950/8950 OEM / R9 280]
1002 679b Malta [Radeon HD 7990/8990 OEM]
1002 679e Tahiti LE [Radeon HD 7870 XT]
1002 679f Tahiti
1002 67a0 Hawaii XT GL [FirePro W9100]
1002 67a1 Hawaii PRO GL [FirePro W8100]
1002 67a2 Hawaii GL
1002 67a8 Hawaii
1002 67a9 Hawaii
1002 67aa Hawaii
1002 67b0 Hawaii XT / Grenada XT [Radeon R9 290X/390X]
1002 67b1 Hawaii PRO [Radeon R9 290/390]
1002 67b8 Hawaii XT [Radeon R9 290X Engineering Sample]
1002 67b9 Vesuvius [Radeon R9 295X2]
1002 67ba
1002 67be Hawaii LE
1002 67c0 Ellesmere [Radeon Pro WX 7100 Mobile]
1002 67c2 Ellesmere [Radeon Pro V7300X / V7350x2]
1002 67c4 Ellesmere [Radeon Pro WX 7100]
1002 67c7 Ellesmere [Radeon Pro WX 5100]
1002 67ca Ellesmere [Polaris10]
1002 67cc Ellesmere [Polaris10]
1002 67cf Ellesmere [Polaris10]
1002 67d0 Ellesmere [Radeon Pro V7300X / V7350x2]
1002 67d7 Ellesmere [Radeon Pro WX 5100 / Barco MXRT-6700]
1002 67df Ellesmere [Radeon RX 470/480/570/570X/580/580X/590]
1002 67e0 Baffin [Radeon Pro WX 4170]
1002 67e1 Baffin [Polaris11]
1002 67e3 Baffin [Radeon Pro WX 4100]
1002 67e8 Baffin [Radeon Pro WX 4130/4150]
1002 67e9 Baffin [Polaris11]
1002 67eb Baffin [Radeon Pro V5300X]
1002 67ef Baffin [Radeon RX 460/560D / Pro 450/455/460/555/555X/560/560X]
1002 67ff Baffin [Radeon RX 550 640SP / RX 560/560X]
1002 6800 Wimbledon XT [Radeon HD 7970M]
1002 6801 Neptune XT [Radeon HD 8970M]
1002 6802 Wimbledon
1002 6806 Neptune
1002 6808 Pitcairn XT GL [FirePro W7000]
1002 6809 Pitcairn LE GL [FirePro W5000]
1002 6810 Curacao XT / Trinidad XT [Radeon R7 370 / R9 270X/370X]
1002 6811 Curacao PRO [Radeon R7 370 / R9 270/370 OEM]
1002 6816 Pitcairn
1002 6817 Pitcairn
1002 6818 Pitcairn XT [Radeon HD 7870 GHz Edition]
1002 6819 Pitcairn PRO [Radeon HD 7850 / R7 265 / R9 270 1024SP]
1002 6820 Venus XTX [Radeon HD 8890M / R9 M275X/M375X]
1002 6821 Venus XT [Radeon HD 8870M / R9 M270X/M370X]
1002 6822 Venus PRO [Radeon E8860]
1002 6823 Venus PRO [Radeon HD 8850M / R9 M265X]
1002 6824
1002 6825 Heathrow XT [Radeon HD 7870M]
1002 6826 Chelsea LP [Radeon HD 7700M Series]
1002 6827 Heathrow PRO [Radeon HD 7850M/8850M]
1002 6828 Cape Verde PRO [FirePro W600]
1002 6829 Cape Verde
1002 682a Venus PRO
1002 682b Cape Verde PRO / Venus LE / Tropo PRO-L [Radeon HD 8830M / R7 250 / R7 M465X]
1002 682c Cape Verde GL [FirePro W4100]
1002 682d Chelsea XT GL [FirePro M4000]
1002 682f Chelsea LP [Radeon HD 7730M]
1002 6830
1002 6831
1002 6835 Cape Verde PRX [Radeon R9 255 OEM]
1002 6837 Cape Verde LE [Radeon HD 7730/8730]
1002 6838
1002 6839
1002 683b
1002 683d Cape Verde XT [Radeon HD 7770/8760 / R7 250X]
1002 683f Cape Verde PRO [Radeon HD 7750/8740 / R7 250E]
1002 6840 Thames [Radeon HD 7500M/7600M Series]
1002 6841 Thames [Radeon HD 7550M/7570M/7650M]
1002 6842 Thames LE [Radeon HD 7000M Series]
1002 6843 Thames [Radeon HD 7670M]
1002 6849
1002 684c
1002 6850
1002 6858
1002 6859
1002 6860 Vega 10 [Radeon Instinct MI25]
1002 6861 Vega 10 XT [Radeon PRO WX 9100]
1002 6862 Vega 10 XT [Radeon PRO SSG]
1002 6863 Vega 10 XTX [Radeon Vega Frontier Edition]
1002 6864 Vega 10 [Radeon Pro V340]
1002 6867 Vega 10 XL [Radeon Pro Vega 56]
1002 6868 Vega 10 [Radeon PRO WX 8100/8200]
1002 6869 Vega 10 XGA [Radeon Pro Vega 48]
1002 686a Vega 10 LEA
1002 686b Vega 10 XTXA [Radeon Pro Vega 64X]
1002 686c Vega 10 [Radeon Instinct MI25 MxGPU]
1002 686d Vega 10 GLXTA
1002 686e Vega 10 GLXLA
1002 687f Vega 10 XL/XT [Radeon RX Vega 56/64]
1002 6880 Lexington [Radeon HD 6550M]
1002 6888 Cypress XT [FirePro V8800]
1002 6889 Cypress PRO [FirePro V7800]
1002 688a Cypress XT [FirePro V9800]
1002 688c Cypress XT GL [FireStream 9370]
1002 688d Cypress PRO GL [FireStream 9350]
1002 6898 Cypress XT [Radeon HD 5870]
1002 6899 Cypress PRO [Radeon HD 5850]
1002 689b Cypress PRO [Radeon HD 6800 Series]
1002 689c Hemlock [Radeon HD 5970]
1002 689d Hemlock [Radeon HD 5970]
1002 689e Cypress LE [Radeon HD 5830]
1002 68a0 Broadway XT [Mobility Radeon HD 5870]
1002 68a1 Broadway PRO [Mobility Radeon HD 5850]
1002 68a8 Granville [Radeon HD 6850M/6870M]
1002 68a9 Juniper XT [FirePro V5800]
1002 68b8 Juniper XT [Radeon HD 5770]
1002 68b9 Juniper LE [Radeon HD 5670 640SP Edition]
1002 68ba Juniper XT [Radeon HD 6770]
1002 68be Juniper PRO [Radeon HD 5750]
1002 68bf Juniper PRO [Radeon HD 6750]
1002 68c0 Madison [Mobility Radeon HD 5730 / 6570M]
1002 68c1 Madison [Mobility Radeon HD 5650/5750 / 6530M/6550M]
1002 68c7 Pinewood [Mobility Radeon HD 5570/6550A]
1002 68c8 Redwood XT GL [FirePro V4800]
1002 68c9 Redwood PRO GL [FirePro V3800]
1002 68d8 Redwood XT [Radeon HD 5670/5690/5730]
1002 68d9 Redwood PRO [Radeon HD 5550/5570/5630/6510/6610/7570]
1002 68da Redwood LE [Radeon HD 5550/5570/5630/6390/6490/7570]
1002 68de Redwood
1002 68e0 Park [Mobility Radeon HD 5430/5450/5470]
1002 68e1 Park [Mobility Radeon HD 5430]
1002 68e4 Robson CE [Radeon HD 6370M/7370M]
1002 68e5 Robson LE [Radeon HD 6330M]
1002 68e8 Cedar
1002 68e9 Cedar [ATI FirePro (FireGL) Graphics Adapter]
1002 68f1 Cedar GL [FirePro 2460]
1002 68f2 Cedar GL [FirePro 2270]
1002 68f8 Cedar [Radeon HD 7300 Series]
1002 68f9 Cedar [Radeon HD 5000/6000/7350/8350 Series]
1002 68fa Cedar [Radeon HD 7350/8350 / R5 220]
1002 68fe Cedar LE
1002 6900 Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile]
1002 6901 Topaz PRO [Radeon R5 M255]
1002 6907 Meso XT [Radeon R5 M315]
1002 6920 Amethyst [Radeon R9 M395/ M395X Mac Edition]
1002 6921 Amethyst XT [Radeon R9 M295X / M390X]
1002 6929 Tonga XT GL [FirePro S7150]
1002 692b Tonga PRO GL [FirePro W7100]
1002 692f Tonga XTV GL [FirePro S7150V]
1002 6938 Tonga XT / Amethyst XT [Radeon R9 380X / R9 M295X]
1002 6939 Tonga PRO [Radeon R9 285/380]
1002 693b Tonga PRO GL [FirePro W7100 / Barco MXRT-7600]
1002 694c Polaris 22 XT [Radeon RX Vega M GH]
1002 694e Polaris 22 XL [Radeon RX Vega M GL]
1002 694f Polaris 22 MGL XL [Radeon Pro WX Vega M GL]
1002 6980 Polaris12
1002 6981 Lexa XT [Radeon PRO WX 3200]
1002 6985 Lexa XT [Radeon PRO WX 3100]
1002 6986 Polaris12
1002 6987 Lexa [Radeon 540X/550X/630 / RX 640 / E9171 MCM]
1002 6995 Lexa XT [Radeon PRO WX 2100]
1002 699f Lexa PRO [Radeon 540/540X/550/550X / RX 540X/550/550X]
1002 69a0 Vega 12
1002 69a1 Vega 12
1002 69a2 Vega 12
1002 69a3 Vega 12
1002 69af Vega 12 [Radeon Pro Vega 20]
1002 6b76
1002 6fdf Polaris 20 XL [Radeon RX 580 2048SP]
1002 700f RS100 AGP Bridge
1002 7010 RS200/RS250 AGP Bridge
1002 7100 R520 [Radeon X1800 XT]
1002 7101 R520/M58 [Mobility Radeon X1800 XT]
1002 7102 R520/M58 [Mobility Radeon X1800]
1002 7103
1002 7104 R520 GL [FireGL V7200 / Barco MXTR-5100]
1002 7105
1002 7106
1002 7108
1002 7109 R520 [Radeon X1800 XL]
1002 710a R520 [Radeon X1800 GTO]
1002 710b R520 [Radeon X1800 GTO]
1002 710c
1002 710e R520 GL [FireGL V7300]
1002 710f R520 GL [FireGL V7350]
1002 7120 R520 [Radeon X1800] (Secondary)
1002 7124 R520 GL [FireGL V7200] (Secondary)
1002 7129 R520 [Radeon X1800] (Secondary)
1002 712e R520 GL [FireGL V7300] (Secondary)
1002 712f R520 GL [FireGL V7350] (Secondary)
1002 7140 RV515 [Radeon X1300/X1550/X1600 Series]
1002 7142 RV515 PRO [Radeon X1300/X1550 Series]
1002 7143 RV505 [Radeon X1300/X1550 Series]
1002 7145 RV515/M54 [Mobility Radeon X1400]
1002 7146 RV515 [Radeon X1300/X1550]
1002 7147 RV505 [Radeon X1550 64-bit]
1002 7149 RV515/M52 [Mobility Radeon X1300]
1002 714a RV515/M52 [Mobility Radeon X1300]
1002 714b
1002 714c
1002 714d
1002 714e
1002 7152 RV515 GL [FireGL V3300]
1002 7153 RV515 GL [FireGL V3350]
1002 715e
1002 715f RV505 CE [Radeon X1550 64-bit]
1002 7162 RV515 PRO [Radeon X1300/X1550 Series] (Secondary)
1002 7163 RV505 [Radeon X1550 Series] (Secondary)
1002 7166 RV515 [Radeon X1300/X1550 Series] (Secondary)
1002 7167 RV515 [Radeon X1550 64-bit] (Secondary)
1002 716e
1002 7172 RV515 GL [FireGL V3300] (Secondary)
1002 7173 RV515 GL [FireGL V3350] (Secondary)
1002 7180
1002 7181 RV516 [Radeon X1600/X1650 Series]
1002 7183 RV516 [Radeon X1300/X1550 Series]
1002 7186 RV516/M64 [Mobility Radeon X1450]
1002 7187 RV516 [Radeon X1300/X1550 Series]
1002 7188 RV516/M64-S [Mobility Radeon X2300]
1002 718a RV516/M64 [Mobility Radeon X2300]
1002 718b RV516/M62 [Mobility Radeon X1350]
1002 718c RV516/M62-CSP64 [Mobility Radeon X1350]
1002 718d RV516/M64-CSP128 [Mobility Radeon X1450]
1002 7193 RV516 [Radeon X1550 Series]
1002 7196 RV516/M62-S [Mobility Radeon X1350]
1002 719b RV516 GL [FireMV 2250]
1002 719f RV516 [Radeon X1550 Series]
1002 71a0 RV516 [Radeon X1300/X1550 Series] (Secondary)
1002 71a1 RV516 [Radeon X1600/X1650 Series] (Secondary)
1002 71a3 RV516 [Radeon X1300/X1550 Series] (Secondary)
1002 71a7 RV516 [Radeon X1300/X1550 Series] (Secondary)
1002 71bb RV516 GL [FireMV 2250] (Secondary)
1002 71c0 RV530 [Radeon X1600 XT/X1650 GTO]
1002 71c1 RV535 [Radeon X1650 PRO]
1002 71c2 RV530 [Radeon X1600 PRO]
1002 71c3 RV530 [Radeon X1600 PRO]
1002 71c4 RV530/M56 GL [Mobility FireGL V5200]
1002 71c5 RV530/M56-P [Mobility Radeon X1600]
1002 71c6 RV530LE [Radeon X1600/X1650 PRO]
1002 71c7 RV535 [Radeon X1650 PRO]
1002 71ce RV530 [Radeon X1300 XT/X1600 PRO]
1002 71d2 RV530 GL [FireGL V3400]
1002 71d4 RV530/M66 GL [Mobility FireGL V5250]
1002 71d5 RV530/M66-P [Mobility Radeon X1700]
1002 71d6 RV530/M66-XT [Mobility Radeon X1700]
1002 71de RV530/M66 [Mobility Radeon X1700/X2500]
1002 71e0 RV530 [Radeon X1600] (Secondary)
1002 71e1 RV535 [Radeon X1650 PRO] (Secondary)
1002 71e2 RV530 [Radeon X1600] (Secondary)
1002 71e6 RV530 [Radeon X1650] (Secondary)
1002 71e7 RV535 [Radeon X1650 PRO] (Secondary)
1002 71f2 RV530 GL [FireGL V3400] (Secondary)
1002 7210 RV550/M71 [Mobility Radeon HD 2300]
1002 7211 RV550/M71 [Mobility Radeon X2300 HD]
1002 7240 R580+ [Radeon X1950 XTX]
1002 7241
1002 7242
1002 7243
1002 7244 R580+ [Radeon X1950 XT]
1002 7245
1002 7246
1002 7247
1002 7248 R580 [Radeon X1950]
1002 7249 R580 [Radeon X1900 XT]
1002 724a
1002 724b R580 [Radeon X1900 GT]
1002 724c
1002 724d
1002 724e R580 GL [FireGL V7350]
1002 7269 R580 [Radeon X1900 XT] (Secondary)
1002 726b R580 [Radeon X1900 GT] (Secondary)
1002 726e R580 [AMD Stream Processor] (Secondary)
1002 7280 RV570 [Radeon X1950 PRO]
1002 7288 RV570 [Radeon X1950 GT]
1002 7291 RV560 [Radeon X1650 XT]
1002 7293 RV560 [Radeon X1650 GT]
1002 72a0 RV570 [Radeon X1950 PRO] (Secondary)
1002 72a8 RV570 [Radeon X1950 GT] (Secondary)
1002 72b1 RV560 [Radeon X1650 XT] (Secondary)
1002 72b3 RV560 [Radeon X1650 GT] (Secondary)
1002 7300 Fiji [Radeon R9 FURY / NANO Series]
1002 7310 Navi 10 [Radeon Pro W5700X]
1002 7312 Navi 10 [Radeon Pro W5700]
1002 7314 Navi 10 USB
1002 731f Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT]
1002 7340 Navi 14 [Radeon RX 5500/5500M / Pro 5500M]
1002 7341 Navi 14 [Radeon Pro W5500]
1002 7347 Navi 14 [Radeon Pro W5500M]
1002 734f Navi 14 [Radeon Pro W5300M]
1002 7360 Navi 12 [Radeon Pro 5600M / V520]
1002 7362 Navi 12 [Radeon Pro V520]
1002 7388 Arcturus GL-XL
1002 738c Arcturus GL-XL [AMD Instinct MI100]
1002 738e Arcturus GL-XL
1002 73a4 Navi 21 USB
1002 73af Navi 21 [Radeon RX 6900 XT]
1002 73bf Navi 21 [Radeon RX 6800/6800 XT / 6900 XT]
1002 73c3 Navi 22
1002 73c4 Navi 22 USB
1002 73df Navi 22 [Radeon RX 6700/6700 XT / 6800M]
1002 73e0 Navi 23
1002 73e1 Navi 23
1002 73e4 Navi 23 USB
1002 73ff Navi 23 [Radeon RX 6600/6600 XT]
1002 7833 RS350 Host Bridge
1002 7834 RS350 [Radeon 9100 PRO/XT IGP]
1002 7835 RS350M [Mobility Radeon 9000 IGP]
1002 7838 RS350 AGP Bridge
1002 7910 RS690 Host Bridge
1002 7911 RS690/RS740 Host Bridge
1002 7912 RS690/RS740 PCI to PCI Bridge (Internal gfx)
1002 7913 RS690 PCI to PCI Bridge (PCI Express Graphics Port 0)
1002 7915 RS690 PCI to PCI Bridge (PCI Express Port 1)
1002 7916 RS690 PCI to PCI Bridge (PCI Express Port 2)
1002 7917 RS690 PCI to PCI Bridge (PCI Express Port 3)
1002 7919 RS690 HDMI Audio [Radeon Xpress 1200 Series]
1002 791e RS690 [Radeon X1200]
1002 791f RS690M [Radeon Xpress 1200/1250/1270]
1002 7930 RS600 Host Bridge
1002 7932 RS600 PCI to PCI Bridge (Internal gfx)
1002 7933 RS600 PCI to PCI Bridge (PCI Express Graphics Port 0)
1002 7935 RS600 PCI to PCI Bridge (PCI Express Port 1)
1002 7936 RS600 PCI to PCI Bridge (PCI Express Port 2)
1002 7937 RS690 PCI to PCI Bridge (PCI Express Port 3)
1002 793b RS600 HDMI Audio [Radeon Xpress 1250]
1002 793f RS690M [Radeon Xpress 1200/1250/1270] (Secondary)
1002 7941 RS600 [Radeon Xpress 1250]
1002 7942 RS600M [Radeon Xpress 1250]
1002 796c
1002 796d
1002 796e RS740 [Radeon 2100]
1002 796f
1002 7c37
1002 9400 R600 [Radeon HD 2900 PRO/XT]
1002 9401 R600 [Radeon HD 2900 XT]
1002 9402
1002 9403 R600 [Radeon HD 2900 PRO]
1002 9405 R600 [Radeon HD 2900 GT]
1002 940a R600 GL [FireGL V8650]
1002 940b R600 GL [FireGL V8600]
1002 940f R600 GL [FireGL V7600]
1002 9440 RV770 [Radeon HD 4870]
1002 9441 R700 [Radeon HD 4870 X2]
1002 9442 RV770 [Radeon HD 4850]
1002 9443 R700 [Radeon HD 4850 X2]
1002 9444 RV770 GL [FirePro V8750]
1002 9446 RV770 GL [FirePro V7760]
1002 944a RV770/M98L [Mobility Radeon HD 4850]
1002 944b RV770/M98 [Mobility Radeon HD 4850 X2]
1002 944c RV770 LE [Radeon HD 4830]
1002 944e RV770 CE [Radeon HD 4710]
1002 9450 RV770 GL [FireStream 9270]
1002 9452 RV770 GL [FireStream 9250]
1002 9456 RV770 GL [FirePro V8700]
1002 945a RV770/M98-XT [Mobility Radeon HD 4870]
1002 945b
1002 945e
1002 9460 RV790 [Radeon HD 4890]
1002 9462 RV790 [Radeon HD 4860]
1002 946a RV770 GL [FirePro M7750]
1002 946b
1002 947a
1002 947b
1002 9480 RV730/M96 [Mobility Radeon HD 4650/5165]
1002 9485
1002 9487
1002 9488 RV730/M96-XT [Mobility Radeon HD 4670]
1002 9489 RV730/M96 GL [Mobility FireGL V5725]
1002 948a
1002 948f
1002 9490 RV730 XT [Radeon HD 4670]
1002 9491 RV730/M96-CSP [Radeon E4690]
1002 9495 RV730 [Radeon HD 4600 AGP Series]
1002 9498 RV730 PRO [Radeon HD 4650]
1002 949c RV730 GL [FirePro V7750]
1002 949e RV730 GL [FirePro V5700]
1002 949f RV730 GL [FirePro V3750]
1002 94a0 RV740/M97 [Mobility Radeon HD 4830]
1002 94a1 RV740/M97-XT [Mobility Radeon HD 4860]
1002 94a3 RV740/M97 GL [FirePro M7740]
1002 94b1
1002 94b3 RV740 PRO [Radeon HD 4770]
1002 94b4 RV740 PRO [Radeon HD 4750]
1002 94b5
1002 94b9
1002 94c0
1002 94c1 RV610 [Radeon HD 2400 PRO/XT]
1002 94c3 RV610 [Radeon HD 2400 PRO]
1002 94c4 RV610 LE [Radeon HD 2400 PRO AGP]
1002 94c5 RV610 [Radeon HD 2400 LE]
1002 94c6
1002 94c7 RV610 [Radeon HD 2350]
1002 94c8 RV610/M74 [Mobility Radeon HD 2400 XT]
1002 94c9 RV610/M72-S [Mobility Radeon HD 2400]
1002 94cb RV610 [Radeon E2400]
1002 94cc RV610 LE [Radeon HD 2400 PRO PCI]
1002 94cd
1002 9500 RV670 [Radeon HD 3850 X2]
1002 9501 RV670 [Radeon HD 3870]
1002 9504 RV670/M88 [Mobility Radeon HD 3850]
1002 9505 RV670 [Radeon HD 3690/3850]
1002 9506 RV670/M88 [Mobility Radeon HD 3850 X2]
1002 9507 RV670 [Radeon HD 3830]
1002 9508 RV670/M88-XT [Mobility Radeon HD 3870]
1002 9509 RV670/M88 [Mobility Radeon HD 3870 X2]
1002 950f R680 [Radeon HD 3870 X2]
1002 9511 RV670 GL [FireGL V7700]
1002 9513 RV670 [Radeon HD 3850 X2]
1002 9515 RV670 PRO [Radeon HD 3850 AGP]
1002 9517
1002 9519 RV670 GL [FireStream 9170]
1002 9540 RV710 [Radeon HD 4550]
1002 9541
1002 9542
1002 954e
1002 954f RV710 [Radeon HD 4350/4550]
1002 9552 RV710/M92 [Mobility Radeon HD 4330/4350/4550]
1002 9553 RV710/M92 [Mobility Radeon HD 4530/4570/545v]
1002 9555 RV710/M92 [Mobility Radeon HD 4350/4550]
1002 9557 RV711 GL [FirePro RG220]
1002 9559
1002 955f RV710/M92 [Mobility Radeon HD 4330]
1002 9580 RV630 [Radeon HD 2600 PRO]
1002 9581 RV630/M76 [Mobility Radeon HD 2600]
1002 9583 RV630/M76 [Mobility Radeon HD 2600 XT/2700]
1002 9586 RV630 XT [Radeon HD 2600 XT AGP]
1002 9587 RV630 PRO [Radeon HD 2600 PRO AGP]
1002 9588 RV630 XT [Radeon HD 2600 XT]
1002 9589 RV630 PRO [Radeon HD 2600 PRO]
1002 958a RV630 [Radeon HD 2600 X2]
1002 958b RV630/M76 [Mobility Radeon HD 2600 XT]
1002 958c RV630 GL [FireGL V5600]
1002 958d RV630 GL [FireGL V3600]
1002 958e
1002 958f
1002 9590
1002 9591 RV635/M86 [Mobility Radeon HD 3650]
1002 9593 RV635/M86 [Mobility Radeon HD 3670]
1002 9595 RV635/M86 GL [Mobility FireGL V5700]
1002 9596 RV635 PRO [Radeon HD 3650 AGP]
1002 9597 RV635 PRO [Radeon HD 3650 AGP]
1002 9598 RV635 [Radeon HD 3650/3750/4570/4580]
1002 9599 RV635 PRO [Radeon HD 3650 AGP]
1002 959b
1002 95c0 RV620 PRO [Radeon HD 3470]
1002 95c2 RV620/M82 [Mobility Radeon HD 3410/3430]
1002 95c4 RV620/M82 [Mobility Radeon HD 3450/3470]
1002 95c5 RV620 LE [Radeon HD 3450]
1002 95c6 RV620 LE [Radeon HD 3450 AGP]
1002 95c7
1002 95c9 RV620 LE [Radeon HD 3450 PCI]
1002 95cc RV620 GL [FirePro V3700]
1002 95cd RV620 GL [FirePro 2450]
1002 95ce
1002 95cf RV620 GL [FirePro 2260]
1002 960f RS780 HDMI Audio [Radeon 3000/3100 / HD 3200/3300]
1002 9610 RS780 [Radeon HD 3200]
1002 9611 RS780C [Radeon 3100]
1002 9612 RS780M [Mobility Radeon HD 3200]
1002 9613 RS780MC [Mobility Radeon HD 3100]
1002 9614 RS780D [Radeon HD 3300]
1002 9615 RS780E [Radeon HD 3200]
1002 9616 RS780L [Radeon 3000]
1002 9640 Sumo [Radeon HD 6550D]
1002 9641 Sumo [Radeon HD 6620G]
1002 9642 SuperSumo [Radeon HD 6370D]
1002 9643 SuperSumo [Radeon HD 6380G]
1002 9644 SuperSumo [Radeon HD 6410D]
1002 9645 SuperSumo [Radeon HD 6410D]
1002 9647 Sumo [Radeon HD 6520G]
1002 9648 Sumo [Radeon HD 6480G]
1002 9649 SuperSumo [Radeon HD 6480G]
1002 964a Sumo [Radeon HD 6530D]
1002 964b Sumo
1002 964c Sumo
1002 964e Sumo
1002 964f Sumo
1002 970f RS880 HDMI Audio [Radeon HD 4200 Series]
1002 9710 RS880 [Radeon HD 4200]
1002 9711
1002 9712 RS880M [Mobility Radeon HD 4225/4250]
1002 9713 RS880M [Mobility Radeon HD 4100]
1002 9714 RS880 [Radeon HD 4290]
1002 9715 RS880 [Radeon HD 4250]
1002 9723
1002 9802 Wrestler [Radeon HD 6310] Radeon HD 6250 too?
1002 9803 Wrestler [Radeon HD 6310]
1002 9804 Wrestler [Radeon HD 6250]
1002 9805 Wrestler [Radeon HD 6250]
1002 9806 Wrestler [Radeon HD 6320]
1002 9807 Wrestler [Radeon HD 6290]
1002 9808 Wrestler [Radeon HD 7340]
1002 9809 Wrestler [Radeon HD 7310]
1002 980a Wrestler [Radeon HD 7290]
1002 9830 Kabini [Radeon HD 8400 / R3 Series]
1002 9831 Kabini [Radeon HD 8400E]
1002 9832 Kabini [Radeon HD 8330]
1002 9833 Kabini [Radeon HD 8330E]
1002 9834 Kabini [Radeon HD 8210]
1002 9835 Kabini [Radeon HD 8310E]
1002 9836 Kabini [Radeon HD 8280 / R3 Series]
1002 9837 Kabini [Radeon HD 8280E]
1002 9838 Kabini [Radeon HD 8240 / R3 Series]
1002 9839 Kabini [Radeon HD 8180]
1002 983a
1002 983b
1002 983c
1002 983d Temash [Radeon HD 8250/8280G]
1002 983e
1002 983f
1002 9840 Kabini HDMI/DP Audio
1002 9850 Mullins [Radeon R3 Graphics]
1002 9851 Mullins [Radeon R4/R5 Graphics]
1002 9852 Mullins [Radeon R2 Graphics]
1002 9853 Mullins [Radeon R2 Graphics]
1002 9854 Mullins [Radeon R3E Graphics]
1002 9855 Mullins [Radeon R6 Graphics]
1002 9856 Mullins [Radeon R1E/R2E Graphics]
1002 9857 Mullins [Radeon APU XX-2200M with R2 Graphics]
1002 9858 Mullins
1002 9859 Mullins
1002 985a Mullins
1002 985b Mullins
1002 985c Mullins
1002 985d Mullins
1002 985e Mullins
1002 985f Mullins
1002 9874 Wani [Radeon R5/R6/R7 Graphics]
1002 9890 Amur
1002 98c0 Nolan
1002 98e4 Stoney [Radeon R2/R3/R4/R5 Graphics]
1002 9900 Trinity [Radeon HD 7660G]
1002 9901 Trinity [Radeon HD 7660D] AMD A10-5800K CPU
1002 9902 Trinity HDMI Audio Controller
1002 9903 Trinity [Radeon HD 7640G]
1002 9904 Trinity [Radeon HD 7560D]
1002 9905 Trinity GL [FirePro A300]
1002 9906 Trinity GL [FirePro A320]
1002 9907 Trinity [Radeon HD 7620G]
1002 9908 Trinity [Radeon HD 7600G]
1002 9909 Trinity [Radeon HD 7500G]
1002 990a Trinity [Radeon HD 7500G]
1002 990b Richland [Radeon HD 8650G]
1002 990c Richland [Radeon HD 8670D]
1002 990d Richland [Radeon HD 8550G]
1002 990e Richland [Radeon HD 8570D]
1002 990f Richland [Radeon HD 8610G]
1002 9910 Trinity [Radeon HD 7660G]
1002 9913 Trinity [Radeon HD 7640G]
1002 9917 Trinity [Radeon HD 7620G]
1002 9918 Trinity [Radeon HD 7600G]
1002 9919 Trinity [Radeon HD 7500G]
1002 991e Bishop [Xbox One S APU]
1002 9920 Liverpool [Playstation 4 APU]
1002 9921 Liverpool HDMI/DP Audio Controller
1002 9922 Starshp
1002 9923 Starsha2 [Kingston/Clayton]
1002 9924 Gladius
1002 9925 Kingston/Clayton/Jupiter/Gladius/Montego HDMI Controller
1002 9926 Jupiter
1002 9927
1002 9928
1002 9929
1002 992a
1002 992b
1002 992c
1002 992d
1002 992e
1002 992f
1002 9930
1002 9931
1002 9932
1002 9933
1002 9934
1002 9935
1002 9936
1002 9937
1002 9938
1002 9939
1002 993a
1002 993b
1002 993c
1002 993d
1002 993e
1002 993f
1002 9990 Trinity 2 [Radeon HD 7520G]
1002 9991 Trinity 2 [Radeon HD 7540D]
1002 9992 Trinity 2 [Radeon HD 7420G]
1002 9993 Trinity 2 [Radeon HD 7480D]
1002 9994 Trinity 2 [Radeon HD 7400G]
1002 9995 Richland [Radeon HD 8450G]
1002 9996 Richland [Radeon HD 8470D]
1002 9997 Richland [Radeon HD 8350G]
1002 9998 Richland [Radeon HD 8370D]
1002 9999 Richland [Radeon HD 8510G]
1002 999a Richland [Radeon HD 8410G]
1002 999b Richland [Radeon HD 8310G]
1002 999c Richland [Radeon HD 8650D]
1002 999d Richland [Radeon HD 8550D] AMD Quad-Core A8-Series APU A8-6500T with Radeon HD 8550D
1002 99a0 Trinity 2 [Radeon HD 7520G]
1002 99a2 Trinity 2 [Radeon HD 7420G]
1002 99a4 Trinity 2 [Radeon HD 7400G]
1002 aa00 R600 HDMI Audio [Radeon HD 2900 GT/PRO/XT]
1002 aa01 RV635 HDMI Audio [Radeon HD 3650/3730/3750]
1002 aa08 RV630 HDMI Audio [Radeon HD 2600 PRO/XT / HD 3610]
1002 aa10 RV610 HDMI Audio [Radeon HD 2350 PRO / 2400 PRO/XT / HD 3410]
1002 aa18 RV670/680 HDMI Audio [Radeon HD 3690/3800 Series]
1002 aa20 RV635 HDMI Audio [Radeon HD 3650/3730/3750]
1002 aa28 RV620 HDMI Audio [Radeon HD 3450/3470/3550/3570]
1002 aa30 RV770 HDMI Audio [Radeon HD 4850/4870]
1002 aa38 RV710/730 HDMI Audio [Radeon HD 4000 series]
1002 aa50 Cypress HDMI Audio [Radeon HD 5830/5850/5870 / 6850/6870 Rebrand]
1002 aa58 Juniper HDMI Audio [Radeon HD 5700 Series]
1002 aa60 Redwood HDMI Audio [Radeon HD 5000 Series] 5500, 5600 and mobile 5700 series
1002 aa68 Cedar HDMI Audio [Radeon HD 5400/6300/7300 Series]
1002 aa80 Cayman/Antilles HDMI Audio [Radeon HD 6930/6950/6970/6990]
1002 aa88 Barts HDMI Audio [Radeon HD 6790/6850/6870 / 7720 OEM]
1002 aa90 Turks HDMI Audio [Radeon HD 6500/6600 / 6700M Series]
1002 aa98 Caicos HDMI Audio [Radeon HD 6450 / 7450/8450/8490 OEM / R5 230/235/235X OEM]
1002 aaa0 Tahiti HDMI Audio [Radeon HD 7870 XT / 7950/7970]
1002 aab0 Oland/Hainan/Cape Verde/Pitcairn HDMI Audio [Radeon HD 7000 Series]
1002 aab8 Tiran HDMI Audio
1002 aac0 Tobago HDMI Audio [Radeon R7 360 / R9 360 OEM]
1002 aac8 Hawaii HDMI Audio [Radeon R9 290/290X / 390/390X]
1002 aad8 Tonga HDMI Audio [Radeon R9 285/380]
1002 aae0 Baffin HDMI/DP Audio [Radeon RX 550 640SP / RX 560/560X]
1002 aae8 Fiji HDMI/DP Audio [Radeon R9 Nano / FURY/FURY X]
1002 aaf0 Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590]
1002 aaf8 Vega 10 HDMI Audio [Radeon Vega 56/64]
1002 ab00 Baffin HDMI/DP Audio [Radeon RX 550 640SP / RX 560/560X]
1002 ab08 Polaris 22 HDMI Audio
1002 ab10 Lexa HDMI Audio
1002 ab18 Vega 12 HDMI Audio
1002 ab20 Vega 20 HDMI Audio [Radeon VII]
1002 ab38 Navi 10 HDMI Audio
1002 ac00 Theater 506 World-Wide Analog Decoder
1002 ac01 Theater 506 World-Wide Analog Decoder
1002 ac02 TV Wonder HD 600 PCIe
1002 ac03 Theater 506 PCIe
1002 ac04 Theater 506 USB
1002 ac05 Theater 506 USB
1002 ac06 Theater 506 External USB
1002 ac07 Theater 506 External USB
1002 ac08 Theater 506A World-Wide Analog Decoder + Demodulator
1002 ac09 Theater 506A World-Wide Analog Decoder + Demodulator
1002 ac0a Theater 506A PCIe
1002 ac0b Theater 506A PCIe
1002 ac0c Theater 506A USB
1002 ac0d Theater 506A USB
1002 ac0e Theater 506A External USB
1002 ac0f Theater 506A External USB
1002 ac12 Theater HD T507 (DVB-T) TV tuner/capture device
1002 ad08
1002 ad10
1002 ad18
1002 ad20
1002 ad28
1002 ad30
1002 ad38
1002 ad40
1002 ad48
1002 ad50
1002 ad58
1002 ad68
1002 ad70
1002 ad78
1002 ad80
1002 ad98
1002 cab0 RS100 Host Bridge
1002 cab2 RS200 Host Bridge
1002 cab3 RS250 Host Bridge
1002 cbb2 RS200 Host Bridge

AMD kext支持列表

AMD7000Controller

原生驱动显卡列表如下。

1
0x67901002 0x67981002 0x679A1002 0x679E1002 0x67801002 0x68201002 0x68211002 0x68231002 0x68251002 0x68271002 0x682B1002 0x682D1002 0x682F1002 0x68351002 0x68391002 0x683B1002 0x683D1002 0x683F1002 0x68001002 0x68011002 0x68061002 0x68081002 0x68101002 0x68181002 0x68191002

通过Fake ID可驱动的显卡列表如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
0x67901002: Unknown
0x68391002: Unknown
0x683B1002: Unknown
0x67981002: Tahiti XT ( Radeon HD 7970, 8970, R9 280X )
0x679A1002: Tahiti PRO ( Radeon HD 7950, 8950, R9 280 )
0x679E1002: Tahiti LE ( Radeon HD 7870 XT )
0x67801002: Tahiti XT GL ( FirePro W9000 )
0x68201002: Venus XTX ( Radeon HD 8890M, R9 M275X / M375X )
0x68211002: Venus XT ( Radeon HD 8870M, R9 M270X / M370X )
0x68231002: Venus PRO ( Radeon HD 8850M, R9 M265X )
0x68251002: Heathrow XT ( Radeon HD 7870M )
0x69271002: Heathrow PRO ( Radeon HD 7850M / 8850M )
0x682B1002: Cape Verde PRO / Venus LE / Tropo PRO-L ( Radeon HD 8830M, R7 250, R7 M465X )
0x682D1002: Chelsea XT GL ( FirePro M4000 )
0x682F1002: Chelsea LP ( Radeon HD 7730M )
0x68351002: Cape Verde PRX ( Radeon R9 255 )
0x683D1002: Cape Verde XT ( Radeon HD 7770, 8760, R7 250X )
0x683F1002: Cape Verde PRO ( Radeon HD 7750, 8740, R7 250E )
0x68001002: Wimbledon XT ( Radeon HD 7970M )
0x68011002: Neptune XT ( Radeon HD 8970M )
0x68061002: Neptune
0x68081002: Pitcairn XT GL ( FirePro W7000 )
0x68101002: Curacao XT / Trinidad XT ( Radeon R7 370, R9 270X / 370X )
0x68181002: Pitcairn XT ( Radeon HD 7870 GHz Edition )
0x68191002: Pitcairn PRO ( Radeon HD 7850, R7 265, R9 270 - 1024 Stream Processor )
AMD8000Controller

原生驱动显卡列表如下。

1
0x66401002 0x66411002 0x66461002 0x66471002 0x66501002 0x66511002 0x665C1002 0x665D1002 0x67B01002

通过Fake ID可驱动的显卡列表如下。

1
2
3
4
5
6
7
8
9
0x66401002: Saturn XT ( FirePro M6100 )
0x66411002: Saturn PRO ( Radeon HD 8930M )
0x66461002: Bonaire XT ( Radeon R9 M280X )
0x66471002: Bonaire PRO ( Radeon R9 M270X )
0x66501002: Bonaire
0x66511002: Bonaire
0x665C1002: Bonaire XT ( Radeon HD 7790, 8770, R7 360, R9 260 / 360 )
0x665D1002: Bonaire ( Radeon R7 200 series )
0x67B01002: Hawaii XT / Grenada XT ( Radeon R9 290X / 390X )
AMD9000Controller

原生驱动显卡列表如下。

1
0x69201002 0x69211002 0x69301002 0x69381002 0x69391002 0x73001002 0x730F1002

通过Fake ID可驱动的显卡列表如下。

1
2
3
4
5
6
7
0x69201002: Unknown
0x69211002: Amethyst XT ( Radeon R9 M295X )
0x69301002: Unknown
0x69381002: Tonga XT / Amethyst XT ( Radeon R9 380X, R9 M295X )
0x69391002: Tonga PRO ( Radeon R9 285 / 380 )
0x73001002: Fiji ( Radeon R9 FURY / NANO Series )
0x730F1002: Unknown
AMD9500Controller

原生驱动显卡列表如下。

1
0x67E01002 0x67E31002 0x67E81002 0x67EB1002 0x67EF1002 0x67FF1002 0x67E11002 0x67E71002 0x67E91002 0x67C01002 0x67C11002 0x67C21002 0x67C41002 0x67C71002 0x67DF1002 0x67D01002 0x67C81002 0x67C91002 0x67CA1002 0x67CC1002 0x67CF1002

通过Fake ID可驱动的显卡列表如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
0x67E01002: Baffin ( Radeon PRO WX 4170 )
0x67E31002: Baffin ( Radeon PRO WX 4100 )
0x67E81002: Baffin ( Radeon PRO WX 4130 / 4150 )
0x67EB1002: Baffin ( Radeon Pro V5300X )
0x67EF1002: Baffin ( Radeon RX 460, 560D, Pro 450, 455, 460, 555, 555X, 560, 560X )
0x67FF1002: Baffin ( Radeon RX 550 640 Stream Processor, RX 560, 560X )
0x67E11002: Baffin ( Polaris11 )
0x67E71002: Unknown
0x67E91002: Baffin ( Polaris11 )
0x67C01002: Ellesmere ( Radeon PRO WX 7100 )
0x67C11002: Unknown
0x67C21002: Ellesmere ( Radeon PRO V7300X )
0x67C41002: Ellesmere ( Radeon PRO WX 7100 )
0x67C71002: Ellesmere ( Radeon PRO WX 5100 )
0x67DF1002: Ellesmere ( Radeon RX 470, 480, 570, 570X 580, 580X )
0x67D01002: Ellesmere ( Radeon PRO V7300X / V7350x2 )
0x67C81002: Unknown
0x67C91002: Unknown
0x67CA1002: Ellesmere ( Polaris10 )
0x67CC1002: Ellesmere ( Polaris10 )
0x67CF1002: Ellesmere ( Polaris10 )
AMD10000Controller

原生驱动显卡列表如下。

1
0x68601002 0x68611002 0x68621002 0x68631002 0x68641002 0x68671002 0x68681002 0x68691002 0x686A1002 0x686B1002 0x686C1002 0x686D1002 0x686E1002 0x687F1002 0x69A01002 0x69A11002 0x69A21002 0x69A31002 0x69AF1002 0x66A01002 0x66A11002 0x66A21002 0x66A31002 0x66A71002 0x66AF1002

通过Fake ID可驱动的显卡列表如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
0x68601002: Vega 10 ( Radeon Instinct MI25 )
0x68611002: Vega 10 XT ( Radeon PRO WX 9100 )
0x68621002: Vega 10 XT ( Radeon PRO SSG )
0x68631002: Vega 10 XTX ( Radeon Vega Frontier Edition )
0x68641002: Vega
0x68671002: Vega 10 XL ( Radeon Pro Vega 56 )
0x68681002: Vega 10 ( Radeon PRO WX 8100 )
0x68691002: Unknown
0x686A1002: Unknown
0x686B1002: Unknown
0x686C1002: Vega 10 ( Radeon Instinct MI25 MxGPU )
0x686D1002: Unknown
0x686E1002: Unknown
0x687F1002: Vega 10 XL/XT ( Radeon RX Vega 56 / 64 )
0x69A01002: Vega 12
0x69A11002: Vega 12
0x69A21002: Vega 12
0x69A31002: Vega 12
0x69AF1002: Vega 12
0x66A01002 Vega 20 ( Radeon Instinct )
0x66A11002: Vega 20
0x66A21002: Vega 20
0x66A31002: Vega 20
0x66A71002: Vega 20 ( Radeon Pro Vega 20 )
0x66AF1002: Vega 20
AMDRadeonX4000

原生驱动显卡列表如下。

1
0x67E01002 0x67E31002 0x67E81002 0x67EB1002 0x67EF1002 0x67FF1002 0x67E11002 0x67E71002 0x67E91002

通过Fake ID可驱动的显卡列表如下。

1
2
3
4
5
6
7
8
9
0x67E01002: Baffin ( Radeon PRO WX 4170 )
0x67E31002: Baffin ( Radeon PRO WX 4100 )
0x67E81002: Baffin ( Radeon PRO WX 4130 / 4150 )
0x67EB1002: Baffin ( Radeon Pro V5300X )
0x67EF1002: Baffin ( Radeon RX 460, 560D, Pro 450, 455, 460, 555, 555X, 560, 560X )
0x67FF1002: Baffin ( Radeon RX 550 640 Stream Processor, RX 560, 560X )
0x67E11002: Baffin ( Polaris11 )
0x67E71002: Unknown
0x67E91002: Baffin ( Polaris11 )
AMDRadeonX5000

原生驱动显卡列表如下。

1
0x68601002 0x68611002 0x68621002 0x68631002 0x68641002 0x68671002 0x68681002 0x68691002 0x686A1002 0x686B1002 0x686D1002 0x686E1002 0x687F1002 0x686C1002

通过Fake ID可驱动的显卡列表如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
0x68601002: Vega 10 ( Radeon Instinct MI25 )
0x68611002: Vega 10 XT ( Radeon PRO WX 9100 )
0x68621002: Vega 10 XT ( Radeon PRO SSG )
0x68631002: Vega 10 XTX ( Radeon Vega Frontier Edition )
0x68641002: Vega
0x68671002: Vega 10 XL ( Radeon Pro Vega 56 )
0x68681002: Vega 10 ( Radeon PRO WX 8100 )
0x68691002: Unknown
0x686A1002: Unknown
0x686B1002: Unknown
0x686C1002: Vega 10 ( Radeon Instinct MI25 MxGPU )
0x686D1002: Unknown
0x686E1002: Unknown
0x687F1002: Vega 10 XL/XT ( Radeon RX Vega 56 / 64 )

Nvidia支持列表

Turing和Volta GPU在任何版本的macOS中均不支持。Pascal和Maxwell在High Sierra中停止支持,同时它们需要WebDriver。

各型号兼容性列表如下。

1
https://sites.google.com/view/hardhack/videocards/nvidia-graphics
架构 最早支持版本 最后支持版本 型号 备注
GeForce 6 (6xxx) 10.2.x 10.7.5 6600 GT 需要32位内核和NVCAP修补
GeForce 7 (7xxx) 10.4.x 10.7.5 7600 GT
7300 GT
FX 4500
需要32位内核和NVCAP修补
GeForce 8 (8xxx) 10.5 10.13.6 GeForce 8800
FX 5600
GeForce 9 (9xxx) 10.5 10.13.6 9800 GT
9600 GT
9400 GT
9300 GT
Tesla (1xx, 2xx, 3xx) 10.4.x 10.13.6 GT 340
GT 330
GT 320
GTX 285
GTX 280
GTX 275
GTX 260
GT 240
GT 230
GT 220
GT 140
GT 130
GT 120
需要NVCAP修补
Tesla (8XXX) 10.13.6
Tesla (7XXX) 10.11.6
Tesla V2 10.5.x 10.13.6 需要NVCAP修补
Fermi(GF108/GF117/GF119, 4xx, 5xx) 10.7.x 10.13.6 GT 730(GF108变体)
GT 720A
GT 710(GF119变体)
GT 705
GT 640(GF108和GF116)
GT 630(GF108变体
GT 620
GT 610
GTX 570
GTX 470
需要NVCAP修补
大部分只可到10.12
Kepler(6XX/7XX) 10.7.x 至今 GTX Titan(GK 110 Maxwell内核)
GTX Titan Black(GK 110 Maxwell内核)
GTX Titan Z(双核显卡,但仅有单核可用)
GTX 780 Ti
GTX 780
GTX 770
GTX 760 Ti
GTX 760
GT 740(GK107变体)
GT 730(GK208变体)
GT 720
GT 710(GK208变体)
GTX 690(双核显卡,但仅有单核可用)
GTX 680
GTX 670
GTX 660 Ti
GTX 660(必须运行GK 104内核而非GK 106)
GTX 650(GK107变体)
GT 640(Kepler版,GK 107/208内核)
GT 635
GT 630(Kepler版,GK 107/208内核)
Quadro K6000
Quadro K5200
Quadro K5000
Quadro K4200
Quadro K2000D
Quadro K2000
Quadro K600
Quadro K420
Quadro 410
NVS 510
启动参数shikigva=40将boardID设置为iMac14,2,以获得更好的Nvidia支持
Kepler V2 10.8.x 至今
Maxwell(9XX, 745, 750/ti) 10.10.x 10.13.6 GTX Titan X(GM 200 Maxwell内核)
GTX 980 Ti
GTX 980
GTX 970
GTX 960
GTX 950
GTX 750 Ti
GTX 750
GTX 745
Quadro M6000
Quadro M5000
Quadro M4000
Quadro M2000
Quadro K2200
Quadro K1200
Quadro K620
需要WebDriver
启动参数shikigva=40将boardID设置为iMac14,2,以获得更好的Nvidia支持
启动参数nvda_drv=1以启用WebDriver
Pascal(10XX) 10.12.4 10.13.6 GTX Titan X(GP 102-400 Pascal内核)
GTX Titan Xp(GP 102-450 Pascal内核)
GTX 1080 Ti
GTX 1080
GTX 1070 Ti
GTX 1070
GTX 1060(GP104/GDDR5X不支持WebDriver)
GTX 1050 Ti
GTX 1050
GT 1030
Quadro GP100
Quadro P6000
Quadro P5000
Quadro P4000
Quadro P2000
Quadro P1000
Quadro P620
Quadro P600
Quadro P400
需要WebDriver
启动参数shikigva=40将boardID设置为iMac14,2,以获得更好的Nvidia支持
启动参数nvda_drv=1以启用WebDriver
Kepler(GK106变体) GT 740(GK106变体)
GTX 660
GTX 650 Ti
GTX 650
GTX 645
K4000
具有严重的有关VRAM泄漏的问题,出现失真和整体不稳定的情况
Volta Titan V
Titan V CEO版
无可用驱动
Turing(20XX/16XX) Titan RTX
RTX 2080 Ti
RTX 2080 Super
RTX 2080
RTX 2070 Super
RTX 2070
RTX 2060 Super
RTX 2060
GTX 1660 Ti
GTX 1660
GTX 1650
Quadro RTX 8000
Quadro RTX 6000
Quadro RTX 5000
Quadro RTX 4000
无可用驱动
Ampere(30XX) RTX 3090
RTX 3080
RTX 3070
无可用驱动

不支持列表

不应使用HIS和VisionTek的所有显卡,XFX的VEGA和590/560/460型号,Powercolor,MSI的Navi型号(Vega和Polaris均可用)。XFX可在CSM/Legacy模式关闭时使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# 完全不支持
# Ampere
RTX 3090
RTX 3080
RTX 3070

# Turing
Titan RTX
RTX 2080 Ti
RTX 2080 Super
RTX 2080
RTX 2070 Super
RTX 2070
RTX 2060 Super
RTX 2060
GTX 1660 Ti
GTX 1660
GTX 1650
Quadro RTX 8000
Quadro RTX 6000
Quadro RTX 5000
Quadro RTX 4000

# Volta
Titan V
Titan V CEO Edition
Quadro GV100

# Lexa
RX 540/X
RX 550/X

# 尽量避免
# Pascal
GTX Titan X(GP 102-400 Pascal core)
GTX Titan Xp(GP 102-450 Pascal core)
GTX 1080/Ti
GTX 1070/Ti
GTX 1060
GTX 1050/Ti
GT 1030
Quadro P400
Quadro P600
Quadro P620
Quadro P1000
Quadro P2000
Quadro P4000
Quadro P5000
Quadro P6000
Quadro GP100

# Maxwell
GTX Titan X(GM 200 Maxwell core)
GTX 980/ti
GTX 970
GTX 960
GTX 950
GTX 750/ti
GTX 745
Quadro K620
Quadro K1200
Quadro K220
Quadro M2000
Quadro M4000
Quadro M5000
Quadro M6000

声卡

AppleALC编码器支持

AppleALC支持的编码器如下。注意,编解码器一般不为ALC 3XXX,如ALC3601的真实名称为ALC 671。

生产商 型号 Revision和layout 最早支持版本 最后支持版本
AnalogDevices AD1984 0x100400, layout 11 10.9
AnalogDevices AD1984A 0x100400, layout 11, 13, 44 10.9
AnalogDevices AD1988A layout 12 10.9
AnalogDevices AD1988B layout 5, 7, 12 10.9
AnalogDevices AD2000B layout 5, 7 10.9
Creative CA0132 0x100918 layout 0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 99 10.9
CirrusLogic CS4210 0x100101 layout 13 10.9
CirrusLogic CS4213 0x100100 layout 28 10.9
Conexant CX8050 layout 3, 13 10.12
Conexant CX8070/CX11880 layout 15 10.9
Conexant CX8150 layout 21, 22 10.9
Conexant CX8200 layout 3, 15, 21, 23, 80 10.12
Conexant CX8400 layout 12 10.9
Conexant CX20561 0x100000, layout 11 10.9
Conexant CX20583 layout 3 10.9
Conexant CX20585 layout 3, 13 10.9
Conexant CX20588 layout 3 10.9
Conexant CX20590 0x100000, 0x100002, 0x100003, layout 3, 12, 13, 14, 28 10.9
Conexant CX20632 layout 20, 23, 28 10.9
Conexant CX20641 layout 11, 13 10.9
Conexant CX20642 layout 11, 13 10.9
Conexant CX20722 layout 3 10.12
Conexant CX20724 layout 3, 13 10.9
Conexant CX20751/CX20752 layout 3, 21, 28 10.9
Conexant CX20753/CX20754 layout 3, 14, 15, 21 10.12
Conexant CX20755 layout 3 10.9
Conexant CX20756 layout 3, 13 10.9
Conexant CX20757 layout 3, 28 10.9
IDT IDT92HD66C3/65 layout 3 10.9
IDT IDT92HD71B7X layout 3 10.9
IDT IDT92HD73C1X5 layout 19, 21 10.9
IDT IDT92HD73E1X5 layout 15 10.9
IDT IDT92HD75B2X5 layout 3 10.9
IDT IDT92HD75B3X5 layout 3, 11 10.9
IDT IDT92HD99BXX layout 3 10.9
IDT IDT92HD87B1 layout 3 10.9
IDT IDT92HD81B1C5 layout 3, 11 10.9
IDT IDT92HD81B1X5 layout 3, 11, 12, 20, 21, 28 10.9
IDT IDT92HD87B1 layout 3 10.9
IDT IDT92HD87B1/3 layout 12, 13 10.9
IDT IDT92HD87B2/4 layout 13 10.9
IDT IDT92HD90BXX layout 3, 12 10.9
IDT IDT92HD91BXX 0x100102, 0x100303 layout 3, 12, 13, 33, 84 10.9
IDT IDT92HD93BXX 0x100203, layout 12 10.9
IDT IDT92HD95 layout 11, 12 10.9
IDT IDT92HD99BXX layout 3 10.9
Realtek ALC215 layout 18 10.9 -
Realtek ALC221 layout 11, 15, 88 10.8
Realtek ALC222 layout 11 10.8 -
Realtek ALC225/ALC3253 layout 28, 30, 33 10.9
Realtek ALC230 layout 13, 20 10.9
Realtek ALC233/ALC3236 layout 3, 4, 5, 13, 21, 27, 28, 29, 32, 33 10.9
Realtek ALC235 layout 3, 11, 12, 14, 15, 16, 17, 21, 22, 24, 28, 35, 37, 99 10.9
Realtek ALC236 0x100001, 0x100002 layout 3, 11, 12, 13, 14, 15, 16, 18, 54, 99 10.9
Realtek ALC245 layout 11, 12, 13 10.9 -
Realtek ALC255/ALC3234 layout 3, 11, 13, 15, 17, 18, 20, 21, 27, 28, 29, 30, 31, 66, 71, 86, 99, 100 10.9
Realtek ALC256/ALC3246 layout 5, 11, 13, 14, 16, 17, 19, 21, 22, 23, 28, 56, 57, 66, 67, 69, 76, 97 10.9
Realtek ALC257 layout 11, 18, 86, 99, 100 10.9
Realtek ALC260 layout 11, 12 10.9
Realtek ALC262 0x100202 layout 7, 11, 12, 13, 28, 66 10.9
Realtek ALC268 layout 3 10.9
Realtek ALC269/ALC271X 0x100004, 0x100100, 0x100202, 0x100203 layout 1-24, 27-33, 35, 40, 44, 45, 47, 55, 58, 66, 76, 77, 88, 91, 93, 99, 100, 127, 188 10.8
Realtek ALC270 0x100100, layout 3, 4, 21, 27, 28 10.9
Realtek ALC272 0x100001, layout 3, 11, 12, 18, 21 10.9
Realtek ALC274 0x100004, layout 21 10.9
Realtek ALC275 0x100005, 0x100008, layout 3, 13, 28 10.9
Realtek ALC280 layout 3, 4, 11, 13, 15, 16, 17, 21 10.9
Realtek ALC282 0x100003, layout 3, 4, 13, 22, 27, 28, 29, 41, 43, 51, 76, 86, 127 10.8
Realtek ALC283 layout 1, 3, 11, 13, 15, 44, 45, 66, 88 10.9
Realtek ALC284 layout 3 10.9
Realtek ALC285 layout 11, 21, 31, 52, 61, 71 10.9
Realtek ALC286 0x100002, 0x100003 layout 3, 11 10.9
Realtek ALC287 layout 11 10.9 -
Realtek ALC288 layout 3, 13, 23 10.9
Realtek ALC289 layout 11, 23 10.9
Realtek ALC290/ALC3241 layout 3, 4, 10, 15, 28 10.9
Realtek ALC292 layout 12, 15, 18, 28, 32, 55 10.9
Realtek ALC293 layout 11, 28, 29 10.9
Realtek ALC294 layout 11, 12, 13, 21, 22, 28, 66 10.9
Realtek ALC295 layout 1, 3, 13, 14, 15, 21, 22, 23, 24, 28, 77 10.9
Realtek ALC298 0x100101, 0x100103 layout 3, 11, 13, 16, 21, 22, 28, 29, 30, 32, 47, 66, 72, 99 10.9
Realtek ALC299 0x100002 layout 21, 22 10.9
Realtek ALC662 0x100101, 0x100300 layout 5, 7, 11, 12, 13, 15, 16, 17, 18, 66 10.9
Realtek ALC663 0x100001, 0x100002, layout 3, 4, 15, 28, 99 10.9
Realtek ALC665 layout 12, 13 10.9
Realtek ALC668 0x100003, layout 3, 20, 27, 28, 29 10.9
Realtek ALC670 0x100002, layout 12 10.9
Realtek ALC671 layout 12, 15, 16, 88 10.9
Realtek ALC700 layout 11 10.9
Realtek ALC882 0x100101, layout 5, 7 10.9
Realtek ALC883 0x100002, layout 7 10.9
Realtek ALC885 0x100101, 0x100103 layout 1, 12, 15 10.9
Realtek ALC887 0x100202, 0x100302, layout 1, 2, 3, 5, 7, 11, 12, 13, 17, 18, 20, 33, 40, 50, 52, 53, 87, 99 10.9
Realtek ALC888/ALC1200 0x100101, 0x100001, 0x100202, 0x100302 layout 1, 2, 3, 4, 5, 7, 11, 27, 28, 29 10.9
Realtek ALC889 0x100004, layout 1, 2, 3, 11, 12 10.9
Realtek ALC891/ALC867 0x100002, layout 11, 13 10.9
Realtek ALC892 0x100302, layout 1, 2, 3, 4, 5, 7, 12, 15, 16, 17, 18, 20, 22, 28, 31, 90, 92, 97, 99, 100 10.9
Realtek ALC898/ALC899 0x100003, layout 1, 2, 3, 5, 7, 11, 13, 65, 66, 98, 99, 101 10.9
Realtek ALC1150 0x100001, layout 1, 2, 3, 5, 7, 11, 99 10.8
Realtek ALC1220 0x100003, layout 1, 2, 3, 5, 7, 11, 13, 15, 16, 21, 27, 28, 29, 30, 34, 99 10.11
Realtek ALCS1200A layout 1, 2, 3, 11, 49, 50, 51 10.8
Realtek ALCS1220A layout 1, 2, 3, 5, 7, 11, 20, 21 10.11
SigmaTel STAC9200 0x102201, layout 11 10.8
SigmaTel STAC9872AK 0x100201, layout 12 10.8
VIA VT1705 0x100000, layout 21 10.9
VIA VT1802 0x100000, layout 3, 33, 65 10.9
VIA VT2020/VT2021 0x100100, layout 5, 7, 9, 13 10.9
AMD Radeon 290/290X 10.11
AMD Radeon R9 Fury/R9 Fury X 10.11
AMD Vega-M 10.11
AMDZEN Controller 0x1457
AMDZEN Controller 0x1487
AMDZEN Controller 0x15E3
Intel HD4600 10.9
Intel Atom Z36xxx/Z37xxx 10.9
Intel Z97 controller 10.9
Intel X99 controller 0x8D20 10.9
Intel X99 controller 0x8D21 10.9
Intel WhiskeyLake 10.12
Intel 200 Series Mobile 10.12
Intel 200 Series 10.12
Intel 300 Series 10.12
Nvidia GK208 10.13.4
Nvidia GM200 10.13.4
Nvidia GM204 10.13.4
Nvidia GM206 10.13.4
Nvidia GP102 10.13.4
Nvidia GP104 10.13.4
Nvidia GP106 10.13.4
Nvidia GP107 10.13.4
Nvidia GP108 10.13.4
Nvidia GTX860M 10.13

硬盘

无线网卡

Broadcom

低版本支持高版本系统的无线网卡。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 11(+)
BCM943602
BCM94360
BCM94352
BCM94350

# 10.15(+)
BCM943224
BCM94331

# 10.14(+)
BCM94322

# 10.13(+)
AR242x
AR542x
AR5416
AR5418
AR9280-AR5BHB92
AR9285-AR5B95
AR9287-AR5B97
AR9380-AR5BXB112

# 10.11(+)
BCM4311
BCM4318
BCM4306
BCM4309
BCM4321
BCM4322

不支持列表

1
2
3
4
5
6
7
8
9
# Broadcom
BCM4312
BCM4313
BCM4356
BCM43142
BCM43228

# Atheros
AR5424

其它硬件

指纹识别、Windows Hello人脸识别、英特尔智能声音技术将无法工作。

SMBIOS列表

CPU层级表示如下。

字母 类型
Y 移动端(低端)
U/M 移动端(中端)
H/QM/HQ 移动端(高端)
S 桌面端
EP/SP/W/X HEDT/服务器端

注意,主板号board-id仅适用于Intel Mac,不适用于PowerPC和ARM。

Apple CPU不依赖ACPI/UEFI,固件中不包含DeviceProperties,将iPad8,6用于iOS/iPadOS应用程序。

MacBook Pro

OpenCore不支持MacBookPro17,1。

型号标识符 描述 发布日期 CPU Family GPU(/为双显卡,,为单显卡) 最低macOS版本 最高macOS版本 部件号 主板号 BIOS版本 备注
MacBookPro17,1 MacBook Pro 13寸 2020年 M1 2020年11月 Apple M1 八核Apple图形卡 11.0.0(20A2411) 至今 MYD83xx/A
MYD92xx/A
MYDA2xx/A
MYDC2xx/A
Apple M1芯片,型号标识符J293
MacBookPro16,3 MacBook Pro 13寸 2020年初 2端口 2020年05月 Coffee Lake(U) Intel Iris Plus Graphics 645 10.15.4(19E2269) 至今 MXK32xx/A
MXK52xx/A
MXK62xx/A
MXK72xx/A
Mac-E7203C0F68AA0004
MacBookPro16,2 MacBook Pro 13寸 2020年初 4端口 2020年05月 Ice Lake(U) Intel Iris Plus Graphics 10.15.4(19E2269) 至今 MWP42xx/A
MWP52xx/A
MWP62xx/A
MWP72xx/A
MWP82xx/A
Mac-5F9802EFE386AA28
MacBookPro16,4 MacBook Pro 16寸 2019年末 2019年11月 Coffee Lake(H) AMD Radeon Pro 5600M 10.15.1(19B2093) 至今 MVVJ2xx/A
MVVK2xx/A
MVVL2xx/A
MVVM2xx/A
Mac-A61BADE1FDAD7B05
MacBookPro16,1 MacBook Pro 16寸 2019年末 2019年11月 Caffee Lake(H) Intel UHD Graphics 630, AMD Radeon Pro 5300M/5500M 10.15.1(19B2093) 至今 MVVJ2xx/A
MVVK2xx/A
MVVL2xx/A
MVVM2xx/A
Mac-E1008331FDC96864
MacBookPro15,4 MacBook Pro 13寸 2019年中期 2端口 2019年7月 Coffee Lake(U) Intel Iris Plus Graphics 645 10.14.5(18F2058) 至今 MUHN2xx/A
MUHP2xx/a
MUHQ2xx/A
MUHR2xx/A
MUHR2xx/B
Mac-53FDB3D8DB8CA971
MacBookPro15,3 MacBook Pro 15寸 2019年中期 2019年5月 Coffee Lake(H) UHD630/Radeon Pro555X/560X, Radeon Pro Vega 16/20 10.14.1(18B3094) 至今 MV902xx/A
MV912xx/A
MV922xx/A
MV932xx/A
MV942xx/A
MV952xx/A
Mac-1E7E29AD0135F9BC
MacBookPro15,2 MacBook Pro 13寸 2019年中期 4端口 2019年5月 Coffee Lake(U) Intel Iris Plus Graphics 655 10.14.6 至今 MV962xx/A
MV972xx/A
MV982xx/A
MV992xx/A
MV9A2xx/A
Mac-827FB448E656EC26
MacBookPro15,1 MacBook Pro 15寸 2019年中期 2019年5月 Coffee Lake(H) Intel UHD Graphics 630 10.14.6 至今 MV902xx/A
MV912xx/A
MV922xx/A
MV932xx/A
MV942xx/A
MV952xx/A
Mac-937A206F2EE63C01
MacBookPro15,2 MacBook Pro 13寸 有触控条 2018年中期 2018年6月 Coffee Lake(U) Intel Iris Plus Graphics 655 10.13.6(17G2112) 至今 MR9Q2xx/A
MR9R2xx/A
MR9T2xx/A
MR9U2xx/A
MR9V2xx/A
Mac-827FB448E656EC26 最低要求 10.13.6 17G2208
MacBookPro15,1 MacBook Pro 15寸 有触控条 2018年中期 2018年6月 Coffee Lake(H) Intel UHD Graphics 630 10.13.6(17G2112) 至今 MR932xx/A
MR942xx/A
MR952xx/A
MR962xx/A
MR972xx/A
MUQH2xx/A
Mac-937A206F2EE63C01 最低要求 10.13.6 17G2208
MacBookPro14,3 MacBook Pro 15寸 有触控条 2017年 2017年6月 Kaby Lake(H) HDs 630/Radeon Pro 555(/560) 10.12.5(16F2073) 至今 MPTR2xx/A
MPTT2xx/A
MPTU2xx/A
MPTV2xx/A
MPTW2xx/A
MPTX2xx/A
Mac-551B86E5744E2388
MacBookPro14,2 MacBook Pro 13寸 有触控条 2017年 2017年6月 Kaby Lake(U) Iris Plus 650 10.12.5(16F2073) 至今 MPXV2xx/A
MPXW2xx/A
MPXX2xx/A
MPXY2xx/A
MQ002xx/A
MQ012xx/A
Mac-CAD6701F7CEA0921
MacBookPro14,1 MacBook Pro 13寸 无触控条 2017年 2017年6月 Kaby Lake(U) Iris Plus 640 10.12.5(16F2073) 至今 MPXQ2xx/A
MPXR2xx/A
MPXT2xx/A
MPXU2xx/A
Mac-B4831CEBD52A0C4C
MacBookPro13,3 MacBook Pro 15寸 2016年末 2016年11月 Skylake(H) HD 530/Radeon Pro 450(/455/460) 10.12.1(16B2659) 至今 MLH32xx/A
MLH42xx/A
MLH52xx/A
MLW72xx/A
MLW82xx/A
MLW92xx/A
Mac-A5C67F76ED83108C
MacBookPro13,2 MacBook Pro 13寸 2016年末 有触控条 2016年11月 Skylake(U) Iris 550 10.12.1(16B2657) 至今 MLH12xx/A
MLVP2xx/A
MNQF2xx/A
MNQG2xx/A
MPDK2xx/A
MPDL2xx/A
Mac-66E35819EE2D0D05
MacBookPro13,1 MacBook Pro 13寸 2016年末 无触控条 2016年10月 Skylake(U) Iris 540 10.12(16A2323a) 至今 MLL42xx/A
MLUQ2xx/A
Mac-473D31EABEB93F9B
MacBookPro11,5 MacBook Pro 15寸 2015年中 2015年5月 Haswell(HQ) Iris Pro 5200/Radeon R9 M370X 10.10.3(14D2134) 至今 MJLQ2xx/A
MJLT2xx/A
MJLU2xx/A
Mac-06F11F11946D27C5
MacBookPro11,4 MacBook Pro 15寸 2015年中 2015年5月 Haswell(HQ) Iris Pro 5200 10.10.3(14D2134) 至今 MJLQ2xx/A
MJLT2xx/A
MJLU2xx/A
Mac-06F11FD93F0323C5
MacBookPro12,1 MacBook Pro 13寸 2015年初 2015年3月 Broadwell(U) Iris 6100 10.10.2(14C2507) 至今 MF839xx/A
MF840xx/A
MF841xx/A
MF843xx/A
Mac-E43C1C25D4880AD6
MacBookPro11,3 MacBook Pro 15寸 2014年中 2014年7月 Haswell(HQ) Iris Pro 5200/GeForce GT 750M 10.9(13A3017) 至今 MGXC2xx/A
MGXA2xx/A
Mac-2BD1B31983FE1663
MacBookPro11,2 MacBook Pro 15寸 2014年中 2014年7月 Haswell(HQ) Iris Pro 5200 10.9(13A3017) 至今 MGXC2xx/A
MGXA2xx/A
Mac-3CBD00234E554E41
MacBookPro11,1 MacBook Pro 13寸 2014年中 2014年7月 Haswell(U) Iris 5100 10.9(13A2093) 至今 MGX72xx/A
MGX82xx/A
MGX92xx/A
Mac-189A3D4F975D5FFC
MacBookPro11,3 MacBook Pro 15寸 2013年末 2013年10月 Haswell(HQ) Iris Pro 5200/GeForce GT 750M 10.9(13A3017) 至今 ME293xx/A
ME294xx/A
Mac-2BD1B31983FE1663
MacBookPro11,2 MacBook Pro 15寸 2013年末 2013年10月 Haswell(HQ) Iris Pro 5200 10.9(13A3017) 至今 ME293xx/A
ME294xx/A
Mac-3CBD00234E554E41
MacBookPro11,1 MacBook Pro 13寸 2013年末 2013年10月 Haswell(U) Iris 5100 10.9(13A2093) 至今 ME864xx/A
ME865xx/A
ME866xx/A
Mac-189A3D4F975D5FFC
MacBookPro10,2 MacBook Pro 13寸 2013年初 2013年2月 Ivy Bridge(M) HD 4000 10.8.5 至今 MD212xx/A
ME662xx/A
Mac-AFD8A9D944EA4843
MacBookPro10,1 MacBook Pro 15寸 2013年初 2013年2月 Ivy Bridge(QM) HD 4000/GeForce GT 650M 10.8.5 至今 ME664xx/A
ME665xx/A
Mac-C3EC7CD22292981F
MacBookPro10,2 MacBook Pro 13寸 Retina 2012年末 2012年10月 Ivy Bridge(M) HD 4000 10.8.2(12C2034) 10.15.7 MD212xx/A
MD213xx/A
Mac-AFD8A9D944EA4843
MacBookPro10,1 MacBook Pro 15寸 Retina 2012年中 2012年6月 Ivy Bridge(QM) HD 4000/GeForce GT 650M 10.7.4(11E2068) 10.15.7 MC975xx/A
MC976xx/A
Mac-C3EC7CD22292981F
MacBookPro9,2 MacBook Pro 13寸 2012年中 2012年6月 Ivy Bridge(M) HD 4000 10.7.3(11D2515) 10.15.7 MD101xx/A
MD102xx/A
Mac-6F01561E16C75D06
MacBookPro9,1 MacBook Pro 15寸 2012年中 2012年6月 Ivy Bridge(QM) HD 4000/GeForce GT 650M 10.7.3(11D2097) 10.15.7 MD103xx/A
MD104xx/A
Mac-4B7AC7E43945597E
MacBookPro8,3 MacBook Pro 17寸 2011年末 2011年10月 Sandy Bridge(QM) HD 3000/Radeon HD 6750M(/6770M) 10.6.6(10J3210) 10.13.6 MD311xx/A Mac-942459F5819B171B
MacBookPro8,2 MacBook Pro 15寸 2011年末 2011年10月 Sandy Bridge(QM) HD 3000/Radeon HD 6490M 10.6.6(10J3210) 10.13.6 MD322xx/A
MD318xx/A
Mac-94245A3940C91C80
MacBookPro8,1 MacBook Pro 13寸 2011年末 2011年10月 Sandy Bridge(M) HD 3000 10.6.6(10J3210) 10.13.6 MD314xx/A
MD313xx/A
Mac-94245B3640C91C81
MacBookPro8,3 MacBook Pro 17寸 2011年初 2011年2月 Sandy Bridge(QM) HD 3000/Radeon HD 6750M 10.6.6(10J3210) 10.13.6 MC725xx/A Mac-942459F5819B171B
MacBookPro8,2 MacBook Pro 15寸 2011年初 2011年2月 Sandy Bridge(QM) HD 3000/Radeon HD 6490M(/6750M) 10.6.6(10J3210) 10.13.6 MC723xx/A
MC721xx/A
Mac-94245A3940C91C80
MacBookPro8,1 MacBook Pro 13寸 2011年初 2011年2月 Sandy Bridge(M) HD 3000 10.6.6(10J3210) 10.13.6 MC724xx/A
MC700xx/A
Mac-94245B3640C91C81 MBP81.88Z.0047.B04.1102071707
MacBookPro7,1 MacBook Pro 13寸 2010年中 2010年4月 Penryn(M) GeForce 320M 10.6.3(10D2125) 10.13.6 MC375xx/A
MC374xx/A
Mac-F222BEC8 MBP71.88Z.0039.B05.1003251322 出厂附送的10.6.3也支持
MacBookPro6,2 MacBook Pro 15寸 2010年中 2010年4月 Arrandale(M) HD Graphics/GeForce GT 330M 10.6.3(10D2094) 10.13.6 MC373xx/A
MC372xx/A
MC371xx/A
Mac-F22586C8
MacBookPro6,1 MacBook Pro 17寸 2010年中 2010年4月 Arrandale(M) HD Graphics/GeForce GT 330M 10.6.3(10D2063a) 10.13.6 MC024xx/A Mac-F22589C8 MBP61.88Z.0057.B0C.1007261552
MacBookPro5,5 MacBook Pro 13寸 2009年中 2009年6月 Penryn GeForce 9400M/9600M GT 10.5.7(9J3050) 10.11.6 MB991xx/A
MB990xx/A
Mac-F2268AC8 MBP55.88Z.00AC.B03.0906151708
MacBookPro5,4 MacBook Pro 15寸 2009年中 2009年6月 Penryn(M) GeForce 9400M/9600M GT 10.5.7(9J3050) 10.11.6 / Mac-F22587A1
MacBookPro5,3 MacBook Pro 15寸 2009年中 2009年6月 Penryn(M) GeForce 9400M/9600M GT 10.5.7(9J3050) 10.11.6 MB985xx/A
MB986xx/A
Mac-F22587C8 MBP53.88Z.00AC.B03.0906151647
MacBookPro5,3 MacBook Pro 15寸 2.53 GHz 2009年中 2009年6月 Penryn(M) GeForce 9400M/9600M GT 10.5.7(9J3050) 10.11.6 MC118xx/A Mac-F22587C8 MBP53.88Z.00AC.B03.0906151647
MacBookPro5,2 MacBook Pro 17寸 2009年中 2009年6月 Penryn(M) GeForce 9400M/9600M GT 10.5.6(9G2141) 10.11.6 MC226xx/A Mac-F2268EC8 MBP52.88Z.008E.B05.0905042202
MacBookPro5,2 MacBook Pro 17寸 2009年初 2009年1月 Penryn(M) GeForce 9400M/9600M GT 10.5.5(9F2114) 10.11.6 MB604xx/A Mac-F2268EC8 MBP52.88Z.008E.B05.0905042202
MacBookPro5,1 MacBook Pro 15寸 2008年末 2008年10月 Penryn(M) GeForce 9400M/9600M GT 10.5.5(9F2114) 10.11.6 MB470xx/A
MB471xx/A
Mac-F42D86C8
Mac-F42D86A9
MBP51.88Z.007E.B05.0803171226
MacBookPro4,1 MacBook Pro 17寸 2008年初 2008年10月 Penryn(M) GeForce 8600MG GT 10.5.2(9C2018) 10.11.6 MB166xx/A Mac-F42C89C8
Mac-F42C86C8
MBP41.88Z.00C1.B00.0802091544
MacBookPro4,1 MacBook Pro 15寸 2008年初 2008年10月 Penryn(M) GeForce 8600MG GT 10.5.2(9C2018) 10.11.6 MB133xx/A
MB134xx/A
Mac-F42C89C8
Mac-F42C86C8
MBP41.88Z.00C1.B00.0802091544
MacBookPro3,1 MacBook Pro 17寸 2.4/2.2 GHz 2007年6月 Merom(M) GeForce 8600M GT 10.4.9(8Q1058) 10.11.6 MA897xx/A Mac-F4238BC8
Mac-F42388C8
MBP31.88Z.0070.B07.0803051658
MacBookPro3,1 MacBook Pro 15寸 2.4/2.2 GHz 2007年6月 Merom(M) GeForce 8600M GT 10.4.9(8Q1058) 10.11.6 MA895xx/A Mac-F4238BC8
Mac-F42388C8
MBP31.88Z.0070.B07.0803051658
MacBookPro2,2 MacBook Pro 17寸 Core 2 Duo 2006年10月 Merom(M) Radeon X1600 10.4.8(8N1037) 10.7.5 MA609xx/A
MA610xx/A
Mac-F42187C8
MacBookPro2,1 MacBook Pro 15寸 Core 2 Duo 2006年10月 Merom(M) Radeon X1600 10.4.8(8N1051) 10.7.5 MA611xx/A Mac-F42189C8
MacBookPro1,2 MacBook Pro 17寸 镜面 2006年2/4月 Yonah(M) Radeon X1600 10.4.6(8I2032) 10.6.8 MA092xx/A Mac-F42DBEC8
MacBookPro1,1 MacBook Pro 15寸 镜面 2006年2/4月 Yonah(M) Radeon X1600 10.4.5(8G1453) 10.6.8 MA601xx/A
MA463xx/A
Mac-F425BEC8

MacBook Air

OpenCore不支持MacBookAir10,1。

型号标识符 描述 发布日期 CPU Family GPU(/为双显卡,,为单显卡) 最低macOS版本 最高macOS版本 部件号 主板号 备注
MacBookAir10,1 MacBook Air 13寸 2020年 M1 2020年11月 Apple M1 七/八核Apple图形卡 11.0.0(20A2411) 至今 MGN63xx/A
MGN93xx/A
MGND3xx/A
MGN73xx/A
MGNA3xx/A
MGNE3xx/A
Apple M1芯片,型号标识符J313
MacBookAir9,1 MacBook Air 13寸 2020年初 2020年03月 Ice Lake(Y) Intel Iris Plus Graphics G4/G7 10.15.4(19E287) 至今 MVH22xx/A
MVH42xx/A
MVH52xx/A
MWTJ2xx/A
MWTK2xx/A
MWTL2xx/A
Mac-0CFF9C7C2B63DF8D
MacBookAir8,2 MacBook Air 13寸 2019年中期 2019年7月9日 Kaby Lake Intel UHD Graphics 617 10.14.6 至今 MVFH2xx/A
MVFJ2xx/A
MVFK2xx/A
MVFL2xx/A
MVFM2xx/A
MVFN2xx/A
MVH62xx/A
MVH82xx/A
MacBookAir8,1 MacBook Air 13寸 2018年 2018年10月 Amber Lake(Y) Intel UHD Graphics 617 10.14.6 至今 MRE82xx/A
MREA2xx/A
MREE2xx/A
MRE92xx/A
MREC2xx/A
MREF2xx/A
MUQT2xx/A
MUQU2xx/A
MUQV2xx/A
Mac-112818653D3AABFC
MacBookAir7,2 MacBook Air 13寸 2017年 2017年6月 Broadwell(U) HD 6000 10.12.6 至今 MQD32xx/A
MQD42xx/A
MQD52xx/A
Mac-937CB26E2E02BB01
MacBookAir7,2 MacBook Air 13寸 2015年初 2015年3月 Broadwell(U) HD 6000 10.10.2(14C2507) 至今 MJVE2xx/A
MJVG2xx/A
MMGF2xx/A
MMGG2xx/A
Mac-937CB26E2E02BB01
MacBookAir7,1 MacBook Air 11 2015年初 2015年3月 Broadwell(U) HD 6000 10.10.2(14C2507) 至今 MJVM2xx/A
MJVP2xx/A
Mac-9F18E312C5C2BF0B
MacBookAir6,2 MacBook Air 13寸 2014年初 2014年4月 Haswell(U) HD 5000 10.9.5 至今 MD760xx/B
MD761xx/B
Mac-7DF21CB3ED6977E5
MacBookAir6,1 MacBook Air 11寸 2014年初 2014年4月 Haswell(U) HD 5000 10.9.5 至今 MD711xx/B
MD712xx/B
Mac-35C1E88140C3E6CF
MacBookAir6,2 MacBook Air 13寸 2013年中 2013年6月 Haswell(U) HD 5000 10.8.4(12E3067) 至今 MD760xx/A
MD761xx/A
Mac-7DF21CB3ED6977E5
MacBookAir6,1 MacBook Air 11寸 2013年中 2013年6月 Haswell(U) HD 5000 10.8.4(12E3067) 至今 MD711xx/A
MD712xx/A
Mac-35C1E88140C3E6CF
MacBookAir5,2 MacBook Air 13寸 2012年中 2012年6月 Ivy Bridge(U) HD 4000 10.8.2(12C2034) 10.15.7 MD231xx/A
MD232xx/A
Mac-2E6FAB96566FE58C
MacBookAir5,1 MacBook Air 11寸 2012年中 2012年6月 Ivy Bridge(U) HD 4000 10.7.4(11E2520) 10.15.7 MD223xx/A
MD224xx/A
Mac-66F35F19FE2A0D05
MacBookAir4,2 MacBook Air 13寸 2011年中 2011年7月 Sandy Bridge(M) HD 3000 10.7(11A2063) 10.13.6 MC965xx/A
MC966xx/A
Mac-742912EFDBEE19B3
MacBookAir4,1 MacBook Air 11寸 2011年中 2011年7月 Sandy Bridge(M) HD 3000 10.7(11A2063) 10.13.6 MC968xx/A
MC969xx/A
Mac-C08A6BB70A942AC2
MacBookAir3,2 MacBook Air 13寸 2010年末 2010年10月 Penryn(M) GeForce 320M 10.6.4(10F3061) 10.13.6 MC503xx/A
MC504xx/A
Mac-942C5DF58193131B
MacBookAir3,1 MacBook Air 11寸 2010年末 2010年10月 Penryn(M) GeForce 320M 10.6.4(10F3061) 10.13.6 MC505xx/A
MC506xx/A
Mac-942452F5819B1C1B
MacBookAir2,1 MacBook Air 13寸 2009年中 2009年6月 Penryn(M) GeForce 9400M 10.5.6 10.11.6 MC505xx/A
MC233xx/A
MC234xx/A
Mac-F42D88C8
MacBookAir2,1 MacBook Air 13寸 2008年末 2008年11月 Penryn(M) GeForce 9400M 10.5.5 10.11.6 MB543xx/A
MB940xx/A
Mac-F42D88C8
MacBookAir1,1 MacBook Air 11寸 2008年初 2008年11月 Merom(M) GMA X3100 10.5.1(9B2324) 10.7.5 MB003xx/A Mac-F42C8CC8

MacBook

型号标识符 描述 发布日期 CPU Family GPU(/为双显卡,,为单显卡) 最低macOS版本 最高macOS版本 部件号 主板号 备注
MacBook10,1 MacBook 12寸 2017年 2017年6月 Kaby Lake(Y) HD 615 10.12.5(16F207) 至今 MNYF2XX/A
MNYG2XX/A
MNYH2XX/A
MNYJ2XX/A
MNYK2XX/A
MNYL2XX/A
MNYM2XX/A
MNYN2XX/A
Mac-EE2EBD4B90B839A8
MacBook9,1 MacBook 12寸 2016初 2016年4月 Skylake(Y) HD 515 10.11.4(15E2066) 至今 MLH72xx/A
MLH82xx/A
MLHA2xx/A
MLHC2xx/A
MLHE2xx/A
MLHF2xx/A
MMGL2xx/A
MMGM2xx/A
Mac-9AE82516C7C6B903
MacBook8,1 MacBook 12寸 2015初 2015年4月 Broadwell(Y) HD 5300 10.10.2(14C2061) 至今 MF855xx/A
MF865xx/A
MJY32xx/A
MJY42xx/A
MK4M2xx/A
MK4N2xx/A
Mac-BE0E8AC46FE800CC
MacBook7,1 MacBook 13寸 2010中 2010年5月 Penryn(M) GeForce 320M 10.6.3(10D2162) 10.13.6 MC516xx/A Mac-F22C89C8
MacBook6,1 MacBook 13寸 2009末 2009年10月 Penryn(M) GeForce 9400M 10.6.1(10A2047) 10.13.6 MC207xx/A Mac-F22C8AC8
MacBook5,2 MacBook 13寸 2009中 2009年1月 Penryn(M) GeForce 9400M 10.5.6 10.11.6 MC240xx/A Mac-F22788AA
MacBook5,2 MacBook 13寸 2009初 2009年1月 Penryn(M) GeForce 9400M 10.5.6(9G2110) 10.11.6 MB881xx/A Mac-F22788AA
MacBook5,1 MacBook 13寸 2008末铝合金外壳 2008年10月 Penryn(M) GeForce 9400M 10.5.5(9F2114) 10.11.6 MB466*/A
MB467*/A
Mac-F42D89C8
Mac-F42D89A9
MacBook4,2 MacBook 13寸 2008末 (非铝合金外壳) 2008年10月 Penryn(M) GMA X3100 10.5.6 10.7.5 MB402*/B 10.7.5最低要2G内存
MacBook4,1 MacBook 13寸 2008初 2008年2月 Penryn(M) GMA X3100 10.5.2(9C2015) 10.7.5 MB402*/A
MB403*/A
MB404*/A
Mac-F22788A9 10.7.5最低要2G内存
MacBook3,1 MacBook 13寸 2007末 2007年5/10月 Merom(M) GMA X3100 10.5(9A3111) 10.7.5 MB061*/B
MB062*/B
MB063*/B
Mac-F22788C8 10.6.x最低要1G内存
MacBook2,1 MacBook 13寸 2007中 2007年5/10月 Merom(M) GMA 950 10.5.6 10.7.5 MB061*/A
MB062*/A
MB063*/A
10.7.5要求2G或以上的内存
MacBook2,1 MacBook 13寸 2006年末 2006年11月 Merom(M) GMA 950 10.4.8(8N1108) 10.7.5 MA699*/A
MA700*/A
MA701*/A
Mac-F4208CA9 10.7.5要求2G或以上的内存
MacBook1,1 MacBook 13寸 2006年初 2006年5月 Yonah(M) GMA 950 10.4.6(8I2025) 10.6.8 MA254*/A
MA255*/A
MA472*/A
Mac-F4208CC8 10.6.x要求1G或以上的内存

iMac

OpenCore不支持iMac21,1及更新SMBIOS。

型号标识符 描述 发布日期 CPU Family GPU(/为双显卡,,为单显卡) 最低macOS版本 最高macOS版本 部件号 主板号 BIOS版本 备注
iMac21,2 Mid 2021 Apple M1 11.3(20E232?) Apple M1芯片,型号标识符J257
iMac21,1 Mid 2021 Apple M1 11.3(20E232?) Apple M1芯片,型号标识符J256
iMac20,2 iMac 27寸 5K 2020年 2020年8月 Comet Lake Radeon Pro 5700/5700 XT 10.15.6(19G2005) 至今 MXWT2xx/A
MXWU2xx/A
MXWV2xx/A
Mac-AF89B6D9451A490B T2芯片
iMac20,1 iMac 27寸 5K 2020年 2020年8月 omet Lake(S) Radeon Pro 5300/5500 XT 10.15.6(19G2005) 至今 MXWT2xx/A
MXWU2xx/A
MXWV2xx/A
Mac-CFF7D910A743CAAF T2芯片
iMac19,2 iMac 21.5寸 4K 2019年 2020年8月 Coffee Lake(S) Radeon Pro 580X(/570X/575X)/Radeon Pro Vega 48 10.14.4(18E226) 至今 MRT3xx/A
MRT4xx/A
MHK23xx/A
对比2019年款只更新了硬盘
iMac19,2 iMac 21.5寸 4K 2019年 2019年3月 Coffee Lake(S) Radeon Pro 580X(/570X/575X)/Radeon Pro Vega 48 10.14.4(18E226) 至今 MRT3xx/A
MRT4xx/A
MHK23xx/A
Mac-63001698E7A34814
iMac19,1 iMac 27寸 5K 2019年 2019年3月 Coffee Lake(S) Radeon Pro 580 10.14.4(18E226) 至今 MRQYxx/A
MRR0xx/A
MRR1xx/A
Mac-AA95B1DDAB278B95
iMacPro1,1 iMac Pro 27寸 5K 2017年 2017年12月 Skylake-W Radeon Pro Vega 56(/64/64X) 10.13.2(17C2111) 至今 MQ2Y2xx/A
MHLV3xx/A
Mac-7BA5B2D9E42DDD94
iMac18,3 iMac 27寸 5K 2017年 2017年6月 Kaby Lake(S) Radeon Pro 570(/575/580) 10.12.4(16F2073) 至今 MNE92xx/A
MNEA2xx/A
MNED2xx/A
Mac-BE088AF8C5EB4FA2
iMac18,2 iMac 21.5寸 4K 2017年 2017年6月 Kaby Lake(S) Radeon Pro 555(/560) 10.12.4(16F2073) 至今 MNDY2xx/A
MNE02xx/A
Mac-77F17D7DA9285301
iMac18,1 iMac 21.5寸 普通屏 2017年 2017年6月 Kaby Lake(U) Iris Plus 640 10.12.4(16E2193) 至今 MMQA2xx/A
MHK03xx/A
Mac-4B682C642B45593E
iMac17,1 iMac 27寸 5K 2015年末 2015年10月 Skylake(S) Radeon R9 M380(/M390/M395/M395X) 10.11(15A4310) 至今 MK462xx/A
MK472xx/A
MK482xx/A
Mac-DB15BD556843C820
Mac-B809C3757DA9BB8D
Mac-65CE76090165799A
iMac16,2 iMac 21.5寸 4K 2015年末 2015年10月 Broadwell(S) Iris Pro 6200 10.11(15A2301) 至今 MK452xx/A Mac-FFE5EF870D7BA81A
iMac16,1 iMac 21.5寸 2015年末 2015年10月 Broadwell(U) HD 6000/Iris Pro 6200 10.11(15A2301) 至今 MK142xx/A
MK442xx/A
Mac-A369DDC4E67F1C45
iMac15,1 iMac 27寸 5K 2015年中 2015年5月 Haswell(S) Radeon R9 M290X 10.10(14A389) 至今 MF885xx/A Mac-42FD25EABCABB274
iMac15,1 iMac 27寸 5K 2014年末 2014年10月 Haswell(S) Radeon R9 M290(/M295X)/AMD M290(/M295) 10.10(14A389) 至今 MF886xx/A Mac-42FD25EABCABB274
iMac14,4 iMac 21.5寸 2014年中 2014年6月 Haswell(U) HD 5000 10.9.3(13D2061) 至今 MF883xx/A
MG022xx/A
Mac-81E3E92DD6088272
iMac14,3 iMac 21.5寸 2013年末 2013年9月 Haswell(S) GeForce GT 750M 10.8.4(12E4022) 10.15.7 ME087LL/A Mac-77EB7D7DAF985301
iMac14,2 iMac 27寸 2013年末 2013年9月 Haswell(S) GeForce GT 755M(/GTX 775M/GTX 780M) 10.8.4(12E4022) 10.15.7 ME086xx/A
ME088xx/A
Mac-27ADBB7B4CEE8E61
iMac14,1 iMac 21.5寸 2013年末 2013年9月 Haswell(S) Iris Pro 5200/GeForce GT 750M 10.8.4(12E4022) 10.15.7 ME086xx/A
ME087xx/A
Mac-031B6874CF7F642A
iMac13,3 iMac 21.5寸 2013年初 / Ivy Bridge(S) HD 4000 10.8.2(12C2037) 10.15.7 ME699LL/A Mac-7DF2A3B5E5D671ED
iMac13,2 iMac 27寸 2012年末 2012年11/12月 Ivy Bridge(S) GeForce GTX 660MX(/GTX 675MX/GT 680M) 10.8.2(12C2037) 10.15.7 MD095xx/A
MD096xx/A
Mac-FC02E91DDD3FA6A4
iMac13,1 iMac 21.5寸 2012年末 2012年11/12月 Ivy Bridge(S) GeForce GT 640M(/650M), HD 4000 10.8.2(12C3104) 10.15.7 MD093xx/A
MD094xx/A
Mac-00BE6ED71E35EB86
iMac12,1 iMac 21.5寸 2011年末 2011年8月 Sandy Bridge(S) Radeon HD 6750M 10.7.5 10.13.6 MC978xx/A Mac-942B5BF58194151B 仅用于教育
iMac12,2 iMac 27寸 2011年中 2011年5月 Sandy Bridge(S) Radeon HD 6770M(/6970M) 10.6.6(10J4026) 10.13.6 MC813xx/A
MC814xx/A
Mac-942B59F58194171B IM121.88Z.0047.B00.1102091756 仅支持随机附送的10.6.6
iMac12,1 iMac 21.5寸 2011年中 2011年5月 Sandy Bridge(S) Radeon HD 6750M(/6770M) 10.6.6(10J4026) 10.13.6 MC309xx/A
MC812xx/A
Mac-942B5BF58194151B 仅支持随机附送的10.6.6
iMac11,3 iMac 27寸 2010年中 2010年7月 Clarkdale(S) Radeon HD 5670(/5750) 10.6.3(10D2322a) 10.13.6 MC510xx/A
MC511xx/A
Mac-F2238BAE
iMac11,2 iMac 21.5寸 2010年中 2010年7月 Clarkdale(S) Radeon HD 4670(/5670) 10.6.3(10D2322a) 10.13.6 MC508xx/A
MC509xx/A
Mac-F2238AC8 IM112.88Z.0057.B00.1005031455
iMac11,1 iMac 27寸 2009年末 2009年10/11月 Lynnfield(S) Radeon HD 4850(/4670) 10.6.2(10C2234) 10.13.6 MB953LL/A
MC507LL/A
Mac-F2268DAE IM111.88Z.0034.B02.1003171314
iMac10,1 iMac 27寸 2009年末 2009年10/11月 Wolfdale(S) Radeon HD 4670/GeForce 9400M 10.6.1(10A2155) 10.13.6 MB952xx/A
MB953xx/A
Mac-F2268DC8
Mac-F2268CC8
Mac-F221DCC8
IM101.88Z.00CC.B00.0909031926
iMac10,1 iMac 21.5寸 2009年末 2009年10/11月 Wolfdale(S) Radeon HD 4670/GeForce 9400M 10.6.1(10A2155) 10.13.6 MB950xx/A
MC413xx/A
Mac-F2268DC8
Mac-F2268CC8
Mac-F221DCC8
IM101.88Z.00CC.B00.0909031926
/ iMac 20寸 2009年中 2009年4月 / / 10.5.6 10.11.6 /
iMac9,1 iMac 24寸 2009年初 2009年3月 Penryn(M) GeForce 9400M(/NVIDIA GeForce GT 120/NVIDIA GeForce GT 130) 10.5.6(9G2030) 10.11.6 MB418xx/A
MB419xx/A
Mac-F2218FC8
Mac-F2218FA9
Mac-F2218EC8
Mac-F2218EA9
iMac9,1 iMac 20寸 2009年初 2009年3月 Penryn(M) GeForce 9400M 10.5.6(9G2030) 10.11.6 MB417xx/A
MC019xx/A
Mac-F2218FC8
Mac-F2218FA9
Mac-F2218EC8
Mac-F2218EA9
iMac8,1 iMac 20/24寸 2008年初 2008年4月 Penryn(M) Radeon HD 2400 XT 10.5.2(9C2028) 10.11.6 MB323XX/A
MB324XX/A
MB388XX/A
MB391XX/A
MB325XX/A
MB393XX/A
MB398XX/A
Mac-F227BEC8
Mac-F226BEC8
iMac7,1 iMac 20/24寸 2007年中 2007年8月 Merom(M) Radeon HD 2400 XT(/ATI Radeon HD 2400/ATI Radeon HD 2600 Pro) 10.4.10(8R4031) 10.11.6 MA876XX/A
MA877XX/A
MB199XX/A
MB200XX/A
MA878XX/A
MB201XX/A
MB322XX/A
Mac-F4238CC8
Mac-F42386C8
iMac6,1 iMac 24寸 2006年末 2006年9月 Merom(M) GeForce 7300GT 10.4.7(8K1123) 10.7.5 MA456xx/A Mac-F4218FC8
iMac5,2 iMac 17寸 2006年末 2006年9月 Merom(M) GMA 950 10.4.7(8K1106) 10.7.5 MA710xx/A Mac-F4218EC8
iMac5,1 iMac 17寸 2006年末 2006年9月 Merom(M) Radeon X1600 10.4.7(8K1106) 10.7.5 MA590xx/A Mac-F4228EC8
iMac5,1 iMac 20寸 2006年末 2006年9月 Merom(M) Radeon X1600 10.4.7(8K1106) 10.7.5 MA589xx/A Mac-F4228EC8
iMac4,2 iMac 17 2006年中 2006年7月 Yonah(M) GMA 950 10.4.7(8I2057) 10.6.8 MA406xx/A Mac-F4218EC8
iMac4,1 iMac 17 2006年初 2006年1月 Yonah(M) Radeon X1600 10.4.4(8G1165) 10.6.8 MA199xx/A
MA200xx/A
Mac-F42786C8

Mac Mini

OpenCore不支持Macmini9,1。

型号标识符 描述 发布日期 CPU Family GPU(/为双显卡,,为单显卡) 最低macOS版本 最高macOS版本 部件号 主板号 备注
Macmini9,1 Mac Mini 2020年 M1 2020年11月 Apple M1 八核Apple图形卡 11.0.0(20A2411) 至今 MGNR3xx/A
MGNT3xx/A
Apple M1芯片,型号标识符J274
Macmini8,1 Mac Mini 2018年末 2020年03月 Coffee Lake(H) UHD Graphics 630 10.14(18A2063) 至今 MRTR2xx/A
MRTT2xx/A
MXNF2xx/A
MXNG2xx/A
Mac-7BA5B2DFE22DDD8C 只升级了硬盘
Macmini8,1 Mac Mini 2018年末 2018年10月 Coffee Lake(H) UHD Graphics 630 10.14(18A2063) 至今 MRTR2xx/A
MRTT2xx/A
MXNF2xx/A
MXNG2xx/A
Mac-7BA5B2DFE22DDD8C
Macmini7,1 Mac Mini 2014年末 2014年10月 Haswell(U) HD 5000/Iris 5100 10.10(14A389) 至今 MGEM2xx/A
MGEN2xx/A
MGEQ2xx/A
Mac-35C5E08120C7EEAF
Macmini6,2 Mac Mini/Server 2012年末 2012年10月 Ivy Bridge(QM) HD 4000 10.8.1(12B2080) 10.15.7 MD387xx/A
MD388xx/A
MD389xx/A
Mac-F65AE981FFA204ED
Macmini6,1 Mac Mini/Server 2012年末 2012年10月 Ivy Bridge(M) HD 4000 10.8.1(12B2080) 10.15.7 MD387xx/A
MD388xx/A
MD389xx/A
Mac-031AEE4D24BFF0B1
Macmini5,3 Mac Mini/Server 2011年中 2011年7月 Sandy Bridge(QM) HD 3000 10.7(11A2061) 10.13.6 MC936LL/A Mac-7BA5B2794B2CDB12
Macmini5,2 Mac Mini/Server 2011年中 2011年7月 Sandy Bridge(M) Radeon HD 6630M 10.7(11A2061) 10.13.6 MC815xx/A
MC816xx/A
MC936xx/A
Mac-4BC72D62AD45599E
Macmini5,1 Mac Mini/Server 2011年中 2011年7月 Sandy Bridge(M) HD 3000 10.7(11A2061) 10.13.6 MC815xx/A
MC816xx/A
MC936xx/A
Mac-8ED6AF5B48C039E1
Macmini4,1 Mac Mini 2010年中 2010年6月 Penryn(M) GeForce 320M 10.6.4(10F2025) 10.13.6 MC438xx/A
MC270xx/A
Mac-F2208EC8
Macmini3,1 Mac Mini 2009年末 2009年10月 Penryn(M) GeForce 9400M 10.6.3 10.11.6 MC238xx/A
MC239xx/A
MC408xx/A
Mac-F22C86C8
Macmini3,1 Mac Mini 2009年初 2009年3月 Penryn(M) GeForce 9400M 10.5.6(9G2030) 10.11.6 MB464xx/A
MB463xx/A
Mac-F22C86C8
Macmini2,1 Mac Mini 2007年中 2007年8月 Merom(M) GMA 950 10.4.10(8R3014) 10.7.5 MB138*/A
MB139*/A
Mac-F4208EAA
Macmini1,1 Mac Mini 2006年末 2006年9月 Yonah(M) GMA 950 10.4.5(8H1619) 10.6.8 MA607*/A
MA608*/A
Mac-F4208EC8
Macmini1,1 Mac Mini 2006年初 2006年3月 Yonah(M) GMA 950 10.4.5(8H1619) 10.6.8 MA205*/A
MA206*/A
Mac-F4208EC8

Mac Pro

型号标识符 描述 发布日期 CPU Family GPU(/为双显卡,,为单显卡) 最低macOS版本 最高macOS版本 部件号 主板号 BIOS版本 备注
MacPro7,1 Mac Pro Rack 2019年末 2019年12月 CCascade Lake-W Radeon Pro 580X/Radeon Pro Vega II(/Duo) 10.15.0(19A583) 至今 / Mac-27AD2F918AE68F61
MacPro7,1 Mac Pro 2019年末 2019年12月 Cascade Lake-W Radeon Pro 580X/Radeon Pro Vega II(/Duo) 10.15.0(19A583) 至今 / Mac-27AD2F918AE68F61
MacPro6,1 Mac Pro 2013年末 2013年12月 Ivy BridgeEP FirePro D300(/D500/D700) 10.9.1(13B4116) 至今 ME253xx/A
MD878xx/A
Mac-F60DEB81FF30ACF6
MacPro5,1 Mac Pro 2012年中 2012年6月 Westmere EP Radeon HD 5770(/5870) 10.7.5 10.14.6 MD770xx/A
MD771xx/A
Mac-F221BEC8 安装Mojave需要支持Metal的图形卡,具体查看https://support.apple.com/zh-cn/HT208898
MacPro5,1 Mac Pro Server 2012年中 2012年6月 Westmere EP Radeon HD 5770(/5870) 10.7.5 10.14.6 MD772xx/A Mac-F221BEC8 安装Mojave需要支持Metal的图形卡,具体查看https://support.apple.com/zh-cn/HT208898
MacPro5,1 Mac Pro 2010年中 2010年8月 Westmere EP Radeon HD 5770(/5870) 10.6.4(10F2521) 10.14.6 MC250xx/A
MC560xx/A
MC561xx/A
Mac-F221BEC8 安装Mojave需要支持Metal的图形卡,具体查看https://support.apple.com/zh-cn/HT208898
MacPro5,1 Mac Pro Server 2010年中 2010年8月 Nehalem Radeon HD 5770(/5870) 10.6.4(10F2521) 10.14.6 MC915xx/A Mac-F221BEC8 MP51.88Z.007F.B03.1010071432 安装Mojave需要支持Metal的图形卡,具体查看https://support.apple.com/zh-cn/HT208898
MacPro4,1 Mac Pro 2009年初 2009年3月 Nehalem GeForce GT 120(/NVIDIA Geforce GTX 285/NVIDIA Geforce Quadro FX 4800/ATI Radeon HD 4870) 10.5.6(9G3553) 10.11.6 MB871xx/A
MB535xx/A
Mac-F221BEC8 MP41.88Z.0081.B07.0910130729
MacPro3,1 Mac Pro 2008年初 2008年1月 Harpertown Radeon HD 2600(/NVIDIA GeForce 8800 GT/NVIDIA Quadro FX 5600) XT 10.5.1(9B2117) 10.11.6 MA970*/A Mac-F42C88C8 MP31.88Z.006C.B05.0802291410
MacPro2,1 Mac Pro 2007年初 2007年4月 Clovertown GeForce 7300 GT 10.4.9(8P4037) 10.7.5 MA356*/A Mac-F4208DA9
MacPro1,1 Mac Pro 2006年中 2006年8月 Woodcrest GeForce 7300 GT 10.4.7(8K1079) 10.7.5 MA356*/A Mac-F4208DC8

Xserve

型号标识符 描述 发布日期 CPU Family GPU(/为双显卡,,为单显卡) 最低macOS版本 最高macOS版本 部件号 主板号 备注
Xserve3,1 Xserve 2009年初 2009年4月 Nehalem EP GeForce GT 120 Server 10.5.6 10.11.6 / Mac-F223BEC8
Xserve2,1 Xserve 2008年初 2008年1月 Harpertown Radeon X1300 Server 10.5(9B2117) 10.7.5 / Mac-F42289C8
Xserve1,1 Xserve 2006年末 2006年11月 Woodcrest Radeon X1300 Server 10.4.8(8N1215) Server 10.7.5 / Mac-F4208AC8
RackMac3,1 Early 2004 PowerPC 970fx (G5) 10.3.0 Server 10.5.8
RackMac1,2 Early 2003 PowerPC 7455 (G4) 10.2.4(6I34) Server 10.5.8
RackMac1,1 Mid-2002 PowerPC 7455 (G4) 10.1.5 (6C115) Server 10.5.8

Developer Transition Kit

OpenCore不支持。

型号标识符 发布日期 CPU Family 产品标识符 最低macOS版本
ADP3,2 Mid 2020 Apple A12Z J273 11.0.0 (20A5299w)
ADP2,1 Mid 2005 Intel Prescott / 10.4.1 (8B1025)

PowerBook/iBook

OpenCore不支持。

型号标识符 发布日期 CPU Family 最低macOS版本 最高macOS版本 类型
PowerBook6,8 Early 2005 PowerPC 7447a (G4) 10.3.7 10.5.8 PowerBook
PowerBook6,7 Mid-2005 PowerPC 7447a (G4) 10.4.2(8D37) 10.5.8 iBook
PowerBook6,5 Mid-2004 PowerPC 7447a (G4) 10.3.3(7G51) 10.5.8 iBook
PowerBook6,4 Mid-2004 PowerPC 7447a (G4) 10.2.7 10.5.8 PowerBook
PowerBook6,3 Late 2003 PowerPC 7457 (G4) 10.3(7B85) 10.4.11 iBook
PowerBook6,2 Early 2003 PowerPC 7455 (G4) 10.2.3 10.5.8 PowerBook
PowerBook6,1 Early 2003 PowerPC 7455 (G4) 10.2.3 10.5.8 PowerBook
PowerBook5,9 Late 2005 10.4.2 10.5.8 PowerBook
PowerBook5,8 Late 2005 10.4.2 10.5.8 PowerBook
PowerBook5,7 Early 2005 10.3.3 10.5.8 PowerBook
PowerBook5,6 Early 2005 10.3.3 10.5.8 PowerBook
PowerBook5,5 Mid-2004 PowerPC 7447a (G4) 10.3.3 10.5.8 PowerBook
PowerBook5,4 Mid-2004 PowerPC 7447a (G4) 10.3.3 10.5.8 PowerBook
PowerBook5,3 Late 2003 PowerPC 7447 (G4) 10.2.7 10.5.8 PowerBook
PowerBook5,2 Late 2003 PowerPC 7447 (G4) 10.2.7 10.5.8 PowerBook
PowerBook5,1 Early 2003 PowerPC 7455 (G4) 10.2.4 10.5.8 PowerBook
PowerBook4,3 Mid-2002 PowerPC 750fx (G3) 9.2.2 10.4.11 iBook
PowerBook4,2 Early 2002 PowerPC 750cx (G3) 9.2.1 10.4.11 iBook
PowerBook4,1 Late 2002 PowerPC 7455 (G4) 9.2.2 10.5.8 iBook
PowerBook3,5 Late 2002 PowerPC 7455 (G4) 9.2.2 10.5.8 PowerBook
PowerBook3,4 Mid-2002 PowerPC 7451 (G4) 9.2.2 10.4.11 PowerBook
PowerBook3,3 Late 2001 PowerPC 7440 (G4) 9.2.1 10.4.11 PowerBook
PowerBook3,2 Early 2001 PowerPC 7410 (G4) 9.1 10.4.11 PowerBook
PowerBook3,1 Early 2000 PowerPC 750 (G3) 9.0.2 10.4.11 PowerBook
PowerBook2,2 Late 2000 PowerPC 750cx (G3) 9.0.4 10.4.11 iBook
PowerBook2,1 Mid-1999 PowerPC 750 (G3) 8.6 10.3.9 iBook
PowerBook1,1 Mid-1999 PowerPC 750 (G3) 8.6 10.3.9 PowerBook

PowerMac/eMac/Cube/Mac Mini

OpenCore不支持。

型号标识符 发布日期 CPU Family 最低macOS版本 最高macOS版本 备注
PowerMac12,1 Late 2005 PowerPC 970fx (G5) 10.4.2(8E102) 10.5.8 iMac
PowerMac11,2 Late 2005 PowerPC 970MP (G5) 10.4.2 10.5.8 PowerMac
PowerMac10,2 Late 2005 PowerPC 7447a (G4) 10.4.2(8D40) 10.5.8 Mac Mini
PowerMac10,1 Early 2005 PowerPC 7447a (G4) 10.3.7(7T11) 10.5.8 Mac Mini
PowerMac9,1 Late 2004 PowerPC 970fx (G5) 10.3.5(8E90) 10.5.8 PowerMac
PowerMac8,2 Mid-2005 PowerPC 970 (G5) 10.4(8A428) 10.5.8 iMac
PowerMac8,1 Mid-2004 PowerPC 970 (G5) 10.3.5(7P35) 10.5.8 iMac
PowerMac7,3 Early-2005 PowerPC 970fx (G5) 10.4 10.5.8 PowerMac
PowerMac7,2 Mid-2003 PowerPC 970 (G5) 10.2.7 10.5.8 PowerMac
PowerMac6,4 Early 2004 PowerPC 7447a (G4) 10.3.3 10.5.8 eMac
PowerMac6,3 Late 2003 PowerPC 7445 (G4) 10.3.1 10.5.8 iMac
PowerMac6,1 Early 2003 PowerPC 7445 (G4) 10.2.3 10.5.8 iMac
PowerMac5,2 Mid-2000 PowerPC 7400 (G4) 9.0.4 10.4.11 Cube
PowerMac5,1 Mid-2000 PowerPC 7400 (G4) 9.0.4 10.4.11 Cube
PowerMac4,5 Mid-2002 PowerPC 7445 (G4) 9.2.2 10.4.11 iMac
PowerMac4,4 Mid-2003 PowerPC 7445 (G4) 9.2.2 10.5.8 eMac
PowerMac4,2 Early 2002 PowerPC 7441 (G4) 9.2.2 10.4.11 iMac
PowerMac4,1 Early 2001 PowerPC 750cx (G3) 9.1 10.4.11 iMac
PowerMac3,6 Mid-2002 PowerPC 7455 (G4) 9.2.2 10.5.8 PowerMac
PowerMac3,5 Mid-2001 PowerPC 7450 (G4) 9.2 10.5.8 PowerMac
PowerMac3,4 Early 2001 PowerPC 7410 (G4) 9.1 10.4.11 PowerMac
PowerMac3,3 Mid-2000 PowerPC 7400 (G4) 9.0.4 10.4.11 PowerMac
PowerMac3,2 Mid-2001 PowerPC 7450 (G4) 9.2 10.4.11 PowerMac
PowerMac3,1 Mid 1999 PowerPC 7400 (G4) 8.6 10.4.11 PowerMac
PowerMac2,2 Mid 2000 PowerPC 750 (G3) 9.0.4 10.3.9 iMac
PowerMac2,1 Late 1999 PowerPC 750 (G3) 8.6 10.4.11 iMac
PowerMac1,2 Mid 1999 PowerPC 7400 (G4) 8.6 10.4.11 PowerMac
PowerMac1,1 Early 1999 PowerPC 750 (G3) 8.5.1 10.4.11 PowerMac
iMac,1 Mid 1998 PowerPC 750 (G3) 8.1 10.3.9 iMac

重要事件

时间 事件
WWDC 2005 推出了搭载 Intel 处理器的 DTK(Dev Transition Kit),搭载了兼容 Intel 的 Mac OS X 10.4.1
2006-01-10 发布使用UEFI引导方式的MacBook Pro
2006-02-14 The Guru团队发布首个Patch补丁,通过该补丁修补XNU内核即可解除引导和安装限制,在任何内置SSE-2指令集的Intel处理器上运行Mac OS X 10.4.4(10.4.4-10.4.7可通过修补内核安装,但从10.4.8开始,苹果开始更广泛地使用SSE-3指令集,意味仅仅通过修补XNU 内核已经无法再兼容只支持SSE-2指令集的处理器,如早期的奔腾4)
2007 BrazilMac发布了对Leopard的通用补丁(基于补丁制作的Mac OS X发行版开始出现,如iATKOS、KALYWAY和iPC)

Rosetta

苹果使用过后的CPU体系结构有摩托罗拉68000系列->PowerPC系列->英特尔酷睿系列->Apple的ARM型处理器系列。Rosetta是苹果在CPU架构过渡时推出的编译器,允许新的平台来模拟以前的平台,以正常运行应用程序。

Rosetta用于从PowerPC到Intel的过渡,可用于10.4.4–10.6.8,不适用于Mac OS 9或更早版本以及10.7或更新版本。Lion安装Rosetta的相关讨论可见以下链接。

1
https://www.insanelymac.com/forum/topic/262890-installing-rosetta-on-lion/

Rosetta 2用于从Intel到Apple Silicon的过渡,可用于Big Sur。

相关知识

Kext

即驱动程序。使用kext的替代方法为添加EFI String或修补DSDT。

EFI String

EFI String一般用于com.apple.Boot.plist中的device-properties部分,表示显卡信息。打开该文件并添加以下内容即可。

1
2
<key>device-properties</key>
<string>[要添加的EFI String]</string>

EFI String可通过以下命令生成,注意需要gfxutil。打开生成的out.hex,复制所有的十六进制字符串即为所求。

1
2
# in.plist包含了设备属性信息
./gfxutil -i xml -o hex ./in.plist ./out.hex

以GMA950为例,示例如下。

1
2
<key>device-properties</key>
<string>6d0000000100000001000000610000000200000002010c00d041030a000000000101060000027fff0400100000006d006f00640065006c0000000b000000474d4120393530200000004100410050004c002c00480061007300500061006e0065006c0000000800000001000000</string>

base64与ASCII

在plist的文本中,data是以base64的格式存储的,而在用Xcode等编辑器打开后,base64将被显示为十六进制ASCII码。以下示例均在终端进行。

1
2
3
4
5
// base64->ASCII
echo RXh0ZXJuYWw= | python -m base64 -d && echo

// ASCII->base64
echo -n External | base64

Distros

Distributions的另一个名称,指发行版。安装时不要使用macOS发行版。

OOB

开机即用,无需安装驱动/修补DSDT等。

Vanilla

指未修改系统盘内容,如LE和SLE的系统。

mach_kernel

10.8及以下的系统有mach_kernel,10.9及以上创建USB引导盘时不会有mach_kernel。

可以提取mach_kernel并放到安装盘根目录。在安装包APP上点击显示包内容,进入Contents/SharedSupport/InstallESD.dmg/Packages/BaseSystemBinaries.pkg/mach_kernel,提取即可。

extentions.mkext

旧版Mac将kext的缓存放到extentions.mkext以加快加载速度。10.7及以后被弃用。

用Chameleon引导时,若需要使用kext缓存,则启动参数需要添加UseKernelCache=Yes。

NVRAM

NVRAM与RAM相反,可以在主机设备电源关闭后保留数据。Mac利用NVRAM运行iMessage/FaceTime、引导设备等。很多平台的NVRAM不稳定,需要模拟NVRAM以实现正常功能。

Chameleon不支持NVRAM,需要额外的模块FileNVRAM。Clover将尝试使用系统的原生NVRAM,若无法使用则需要通过EmuVariableUEFI.efi进行模拟,并安装RC脚本。

SMC

系统管理控制器。通过重置SMC可以解决计算机无法启动、不显示视频、睡眠、风扇噪音等问题。

RTC/AWAC

实时时钟RTC(Real-Time Clock)是逻辑板上的芯片,用于控制计算机的日期和时间功能。如果计算机遇到引导问题,则重置RTC可能会解决该问题。

主板内部时钟AWAC(ACPI Wake Alarm Counter Clock)与RTC冲突,Mac无法与AWAC时钟通信。

安全启动

Apple安全启动最初出现于搭载T2芯片的机型上的macOS 10.13。

对于OpenCore,将SecureBootModel设置为除Disabled以外的任意有效值,相当于实现了Apple安全启动的中等安全性。如要实现完整安全性,还需要指定ApECID值。

在安全启动模式下,将无法安装任何未签名的内核驱动程序。还有一些内核驱动程序尽管已签名,但也无法安装,包括但不限于NVIDIA Web Drivers。

驱动程序缓存的列表可能不同,因此需要改变Add或Force内核驱动程序列表。比如IO80211Family将不能被注入。

某些系统(比如macOS 11)是封装保护的,更改受保护的系统卷可能会导致操作系统无法启动。除非禁用了Apple安全启动,否则不要禁用系统卷加密。

OpenCore中的IgnoreInvalidFlexRatio或HashServices可能会导致安全启动失败。

在Apple推出安全启动功能之前发布的操作系统(10.12或更早的版本)仍然会正常启动,除非启用了UEFI安全启动。因为从Apple安全启动的角度来看,它们都是不兼容的系统,会被认为应该由BIOS来处理。

在较旧的CPU上(Sandy Bridge之前),启用Apple安全启动可能会使加载速度略微变慢,最长可达1秒。

启用Apple安全启动时,HFS+文件系统的卷宗无法作为目标卷宗安装macOS。没有其他备用APFS硬盘的情况下,HFS+文件系统的硬盘也同样无法安装。

USB与驱动

USB3

USB3.0需要SLE中有AppleUSBXHCI,该kext在10.7.5及以后存在。AppleUSBXHCI继承自IOUSBControllerV3,该文件存在于10.6.8的IOUSBFamily中。

若无USB3.0设备,则不要放置以下驱动。

GenericUSBXHCI/AppleUSBXHCI

GenericUSBXHCI适用于10.7.5-10.10。

1
2
https://sourceforge.net/projects/genericusbxhci/files/
https://bitbucket.org/RehabMan/os-x-generic-usb3/downloads/

也可使用AppleUSBXHCI,适用于10.9-10.10。建议首先使用GenericUSBXHCI。

1
https://www.insanelymac.com/forum/files/file/150-patched-appleusbxhci/?changelog=133
【进阶】GenericUSBXHCI的DSDT底层实现

即USB3 Mutliplex补丁。进行DSDT修补后即无需放置GenericUSBXHCI。

1
https://www.insanelymac.com/forum/topic/287901-how-to-get-intel-7-series-usb-30-fully-working-step-by-step-guide/

CalDigit USB 3.0

适用于10.5-10.8。

1
https://archive.caldigit.com/KB/index.asp?KBID=108&viewlocale=1

PXHCD

LaCie专用,适用于10.6.3-10.6.8。

1
2
https://www.root86.com/files/file/527-usb-30-kext-f%C3%BCr-snow-leopard/
http://www.mediafire.com/file/6c3kby1se62lkib/PXHCD_patched.zip/file

USB-3.0-NEC

适用于10.9-10.15。

1
https://github.com/chris1111/USB-3.0-NEC

驱动原理

从10.11开始,系统设置了15端口限制。注意,此处的15端口限制指真正连接到USB控制器上的端口,而不包括USB外置集线器。一个USB端口通过集线器,最多可拆分为127个端口,这些端口包括了连接到集线器的集线器。

同时,从10.11开始,系统通过遮盖器即Injector驱动USB。具体而言,System/Library/Extensions/IOUSBHostFamily.kext/Contents/PlugIns之下的AppleUSBEHCIPCI.kext/Contents/Info.plist和AppleUSBXHCIPCI.kext/Contents/Info.plist当中的条目指定了SMBIOS与USB控制器名称的关系,通过当前SMBIOS直接定位到设备名称,而不通过DSDT。

若在DSDT中未找到Injector对应的设备名称,则以DSDT指定的为准。因此可通过change EHC1/EHC2 to EH01/EH02这一ACPI更名补丁使遮盖失效。

XSEL方法和ESEL方法用于将XHCI路由到EHCI,其中较旧的Windows调用ESEL,较新的Windows调用XSEL。睡眠唤醒后从_WAK调用XWAK,有时会导致端口在睡眠后无法正常工作,因此可尝试禁用XWAK,即使该方法直接返回。

1
2
3
4
5
Method (XWAK, ...)
{
Return(0)
... original code ...
}

将XHCI路由到EHCI,也可使用FakePCIID和FakePCIID_XHCIMux。

DSDT源码

Skylake及以下具有EHCI和XHCI设备,其中EHCI为USB 2.0,XHCI为USB 3.0。对于Skylake以上,只有XHCI设备,USB 2.0和3.0都通过XHCI处理。

XHCI可处理USB2/3,EHCI只可处理USB2。

在DSDT中搜索XHC或RHUB,可查看所有端口。以PR11为例,代码及含义如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Device (PR11)
{
Name (_ADR, One) // _ADR: Address
Name (_UPC, Package () // _UPC: USB Port Capabilities
{
0xFF, // 0xFF为开启该端口,Zero为关闭该端口
0x03, // USB类型,Zero为USB2,0x03为USB3,0x09为USB-C,0xFF为Internal
Zero, // 扩展用,应设为Zero
Zero // 扩展用,应设为Zero
})

Name (_PLD, Package (0x01)
{
Buffer (0x10)
{
// 第二行第一个数据的第二个数值代表可见性,即0xB0中的0,1代表可见,0代表不可见
/* 0000 */ 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* 0008 */ 0xB0, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
}
})
}

部分机型的_UPC内容与上面不同,示例如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Scope (\_SB.PCI0.XHC.RHUB.HS01)
{

Method (_UPC, 0, NotSerialized) // _UPC: USB Port Capabilities
{
If ((H1TC == Zero))
{
If (((UMAP & One) == One))
{
Return (TUPC (One)) // 返回1,开启TUPC端口
}
Else
{
Return (GUPC (Zero)) // 返回0,关闭GUPC端口
}
}
Else
{
Return (\_SB.UBTC.RUCC (H1CR, One))
}
}
}

Method (TUPC, 1, Serialized)
{
Name (PCKG, Package (0x04)
{
One,
Zero, // 表示端口类型
Zero,
Zero
})
PCKG [Zero] = Arg0
Return (PCKG)
}

IRQ冲突

IRQ有限制且有编号,USB主控器需要IRQ。若其他设备争抢了原设备的IRQ,将导致原设备无法正确工作。

打开IORegistryExplorer,点击需要查看IRQ的设备,查看右侧的IOInterruptSpecifiers的Data值。若不存在,则表示该设备无IRQ可用。

有时HPET会抢夺USB主控器的IRQ,导致USB无法正确工作。可打开DSDT并应用以下Patch,保存后放置到引导器的ACPI部分即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# This can fix non-working audio and also has an affect on HPET.
# Use this if you have issues with patched AppleHDA (required on almost all laptops)
# or if you have issues with HPET (restart after wake).

# IRQ fix
into device name_hid PNP0000 code_regex IRQNoFlags\s\(\)\n\s+\{(\d+)\} remove_matched;
into device name_hid PNP0100 code_regex IRQNoFlags\s\(\)\n\s+\{(\d+)\} remove_matched;
into device name_hid PNP0B00 code_regex IRQNoFlags\s\(\)\n\s+\{(\d+)\} remove_matched;
into device name_hid PNP0103 code_regex IRQNoFlags\s\(\)\n\s+\{.*\} removeall_matched;
into device name_hid PNP0103 code_regex Name\s\(([^,]+),\sResourceTemplate\s\(\).*\n\s+\{((?:.|\n)*)\}\) replace_matched
begin
Name (%1, ResourceTemplate()\n
{\n
IRQNoFlags() { 0, 8, 11, 15 }\n
%2
})\n
end;

PLUG

允许XCPM(Apple XNU电源管理)提供更好的整体CPU控制。仅在Haswell和更新版本上受支持。

HPET

即高精度事件定时器(High Precision Event Timer),操作系统使用它来确定如何与设备通信(IRQ)。

RHUB

即根USB集线器(Root USB Hub),定义USB端口。

IMEI

即英特尔管理引擎接口(Intel Management Engine Interface),处理杂项任务。在Mac中依靠IMEI实现Intel GPU加速。如果使用未知ID,例如使用带有Sandy Bridge的7系列芯片组,Mac将无法找到IMEI,导致GPU加速丢失。

UNC

即Uncore Bridge,类似于北桥,处理与缓存相关的功能。若OEM定义了该设备,但该设备无法使用,Mac将无法进行处理。

SMBS

即系统管理总线(System Managment Bus),用于允许设备之间的通信。

PNLF

内置背光显示,用于控制亮度。

Intel显卡启用过程

需要WhateverGreen。

更正设备名称

对于Intel管理引擎为IMEI,对于视频卡为IGPU。WhateverGreen会自动处理该步骤。

注入属性

device-id

用于伪造显卡。

帧缓冲区

指定AAPL,ig-platform-idAAPL,snb-platform-id,以描述视频卡的可用输出和其他属性。以0x16260006为例,帧缓冲区数据如下。

1
06002616 01030303 00002002 00005001

06002616即0x16260006的小端形式,01030303与端口和管道数量有关。

00002002为帧缓冲区内存大小即framebuffer-stolenmem,00005001为游标字节大小即framebuffer-fbmem。两者的和必须小于DVMT的值。00002002转换为大端为0x02200000即34MB,00005001转换为大端为0x01500000即21MB,总计55MB,故DVMT必须大于55MB。

若DVMT仅可为32MB,可适当调整两者大小,将framebuffer-stolenmem设置为19MB即0x01300000,将framebuffer-fbmem设置为9MB即0x00900000。在Clover的KextToPatch中添加以下补丁即可。

1
2
3
4
Comment: 0x16260006, 32MB BIOS, 19MB framebuffer, 9MB cursor bytes (credit RehabMan)
Name: AppleIntelBDWGraphicsFramebuffer
Find: 06002616 01030303 00002002 00005001
Replace: 06002616 01030303 00003001 00009000

也可将字段缩短,以适合更多平台的显卡。

1
2
3
4
Comment: 0x19160002, 0x16160002, 0x16260002, 0x16220002, 0x162b0002, 0x16260005, 0x16260006, 32MB BIOS, 19MB framebuffer, 9MB cursor bytes (credit RehabMan)
Name: AppleIntelBDWGraphicsFramebuffer
Find: 01030303 00002002 00005001
Replace: 01030303 00003001 00009000

也可直接在设备属性中指定,如下。

1
2
3
framebuffer-patch-enable=1
framebuffer-stolenmem=<00003001>
framebuffer-fbmem=<00009000>

另外Skylake的0x19160000示例如下。

1
2
3
4
5
6
7
8
ID: 19160000, STOLEN: 34 MB, FBMEM: 21 MB, VRAM: 1536 MB, Flags: 0x0000090F
TOTAL STOLEN: 56 MB, TOTAL CURSOR: 1 MB (1572864 bytes), MAX STOLEN: 124 MB, MAX OVERALL: 125 MB (131608576 bytes)
Model name: Intel HD Graphics SKL CRB
Camelia: CameliaDisabled (0), Freq: 1388 Hz, FreqMax: 1388 Hz
Mobile: 1, PipeCount: 3, PortCount: 3, FBMemoryCount: 3
[0] busId: 0x00, pipe: 8, type: 0x00000002, flags: 0x00000098 - ConnectorLVDS
[1] busId: 0x05, pipe: 9, type: 0x00000400, flags: 0x00000187 - ConnectorDP
[2] busId: 0x04, pipe: 10, type: 0x00000400, flags: 0x00000187 - ConnectorDP

含义如下。注意有以下公式成立。

1
2
3
4
5
6
7
8
MAX STOLEN = 0x100000 + STOLEN * FBMemoryCount + FBMEM

# 若将第一位(0x02)设置为FBFramebufferCommonMemory,则FBMemoryCount被视为1
# 若未设置第二位(0x04)-FBFramebufferCompression,则将FBMEM视为0
TOTAL STOLEN = 0x100000 + STOLEN * FBMemoryCount + FBMEM

# 在Sandy Bridge上的特殊情况
TOTAL STOLEN = MAX STOLEN = FBMEM
参数 含义
Flags 帧缓冲区位掩码配置
STOLEN framebuffer-stolenmem中的值
FBMEM framebuffer-fbmem中的值
TOTAL STOLEN 必须小于或等于BIOS中设置的值
TOTAL CURSOR 屏幕上硬件光标的计算出的内存值
MAX STOLEN 一般为TOTAL STOLEN,但如果Flags中有一个配置,则配置应尽可能地节省内存
MAX OVERALL MAX STOLEN+TOTAL CURSOR
FBMemoryCount 可用帧缓冲区数量

自定义补丁

列表

所有自定义补丁如下。

参数 含义
Semantic
framebuffer-patch-enable 启用Semantic修补
framebuffer-framebufferid 正在修补的帧缓冲区(默认为当前)
framebuffer-mobile
framebuffer-pipecount
framebuffer-portcount
framebuffer-memorycount
framebuffer-stolenmem 帧缓冲区内存大小
framebuffer-fbmem 游标字节大小
framebuffer-unifiedmem VRAM(不建议使用此补丁)
framebuffer-cursormem Haswell专用
framebuffer-flags
framebuffer-camellia 集成显示控制器(仅与真实Mac相关)
framebuffer-conX-enable 启用连接器X修补
framebuffer-conX-index
framebuffer-conX-busid
framebuffer-conX-pipe
framebuffer-conX-type
framebuffer-conX-flags
framebuffer-conX-alldata 完全替换连接器
framebuffer-conX-YYYYYYYY-alldata 如果当前帧缓冲区匹配YYYYYYYY,则完全替换连接器
Binary
framebuffer-patchN-enable 启用补丁N(N为补丁编号,可为0-9)
framebuffer-patchN-framebufferid 正在修补的帧缓冲区(默认为当前)
framebuffer-patchN-find
framebuffer-patchN-replace
framebuffer-patchN-count 要搜索的模式迭代的数量(默认为1)
独显

添加属性disable-external-gpu=01000000即可,等同于启动参数-wegnoegpu。

音频

AppleALC会自动处理数字音频设备的部分,即注入hda-gfx属性以启用数字音频。未使用自定义补丁时,在10.10.5及以上系统,WhateverGreen将自动把connector-type由DP(00040000)改为HDMI(00080000)。物理连接类型可为HDMI/DVI/DP,但数字音频的connector-type必须为HDMI。

EDID

一般EDID会被自动识别。在极少数情况下需要手动注入EDID,添加属性AAPL00,override-no-connect即可,值为EDID内容,其中00的第二个0表示显示器编号。

修复最大像素时钟频率

需要添加属性enable-max-pixel-clock-override=01000000,以提高最大像素时钟限制。在ThinkPad P71/XPS 15的4K@60Hz屏幕必须,否则会黑屏,HDMI 2.0的4K@60Hz屏幕也适用。等同于启动参数-igfxmpc,该参数将最大像素时钟限制从SBL默认的450MHz提高到675MHz。

也可添加属性max-pixel-clock-frequency,更改默认最大像素时钟频率的675MHz限制,以Hz为单位。

也可使用enable-hdmi20=01000000,以跳过像素时钟验证。等同于启动参数-cdfon,但应首先使用-igfxmpc。

修复无效最大链接速率

该问题在Dell XPS 15 9570、带有夏普显示屏的Dell Inspiron 7590等出现。

需要添加属性enable-dpcd-max-link-rate-fix=01000000,以防止被零除导致的内核崩溃,同时修复从扩展DPCD缓冲区读取的无效最大链接速率值。等同于启动参数-igfxmlr。

可通过指定dpcd-max-link-rate,通过内置显示屏手动指定最大链接速率值,通常用于4K/1080p显示,值可为0x06(RBR)/0x0A(HBR)/0x14(HBR2)/0x1E(HBR3)。如果指定了无效值或未指定该属性,WhateverGreen将自动探测最大链接速率值。一般无需指定,在驱动程序不支持所探测的值则需要手动指定,以防止被零除导致的内核崩溃。

修复Skylake/Kaby Lake/Coffee Lake以高像素时钟速率建立Intel HDMI连接的无限循环

主要表现为插入HDMI电缆时,内置笔记本电脑的显示屏仍为黑色。

添加属性enable-hdmi-dividers-fix=01000000,或使用启动参数-igfxhdmidivs。

LSPCON驱动程序支持

KBL/CFL平台的笔记本通常配有HDMI 2.0端口,可路由到IGPU或DGPU。Intel(U)HD Graphics不提供本机HDMI 2.0输出,由LSPCON设备处理该事件。

LSPCON可在电平转换器(LS)或协议转换器(PCON)模式下工作,其中LS模式可产生HDMI 1.4信号,PCON模式可产生HDMI 2.0输出。

WhateverGreen通过自动将适配器配置为在新的HDMI连接上以PCON模式运行来提供对板载LSPCON的驱动程序支持,从而解决了某些平台上的黑屏问题。LSPCON驱动程序仅适用于将HDMI 2.0路由至IGPU的笔记本电脑和PC,除非新的IGPU开始提供本地HDMI 2.0输出,否则所有更新的平台都需要LSPCON驱动程序。支持SKL、KBL、CFL及更高版本。

若当前已经可正常工作,则无需启用以下修补。

添加属性enable-lspcon-support=01000000以启用驱动程序,或使用启动参数-igfxlspcon。

添加属性framebuffer-conX-has-lspcon=01000000以通知驱动程序哪个连接器具有板载LSPCON适配器,其中X为HDMI端口的相应连接器索引(0/1/2/3),可在IORegistryExplorer的IGPU下找到。若只有2K/4K HDMI监视器,可能需要先进行无限循环修复。

该选项可选。添加属性framebuffer-conX-preferred-lspcon-mode以为板载LSPCON适配器指定模式,为01000000(PCON,DP到HDMI 2.0)和00000000(LS,DP到HDMI 1.4)之一,无效值或未指定属性则指定为PCON模式。

核心显示时钟频率支持

添加属性enable-cdclk-frequency-fix=01000000,或使用启动参数-igfxcdc。

核心显示时钟(CDCLK)是显示引擎用来完成其工作的主要时钟之一。Apple的图形驱动程序期望固件已将时钟频率设置为652.8MHz或648MHz,实际值取决于硬件。部分笔记本将其设置为更低的值(如172.8MHz),此时将发生内核崩溃消息如Unsupported CD clock decimal frequency 0x158。该补丁将时钟重新编程以将其频率设置为支持的值之一。

修复DVMT预分配内存计算错误导致的panic

添加属性enable-dvmt-calc-fix=01000000,或使用启动参数-igfxdvmt,以修复修复ICL平台上DVMT预分配内存量的计算,防止内核恐慌Unsupported ICL SKU

苹果图形驱动程序读取BIOS或固件中设置的DVMT值并计算内存总量,但计算过程仅适用于预分配的内存大小为32MB的倍数。当笔记本电脑在ICL+平台上默认将DVMT设置为60MB时,framebuffer控制器会用预分配的错误的内存初始化STOLEN内存管理器。

当前STOLEN内存不够时出现的panic已被消除,但仍建议使用该补丁。

启用补丁后可在IORegistryExplorer查看图形设备下的fw-dvmt-preallocated-memory属性中找到实际的DVMT预分配内存数量,单位是MB。

修复Haswell缓冲区故障

添加属性framebuffer-cursormem即可。

弥补AzulPatcher4600

以下补丁等同于使用AzulPatcher4600.kext。注意该kext已被合并到WhateverGreen。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<dict>
<key>Devices</key>
<dict>
<key>Properties</key>
<dict>
<key>PciRoot(0x0)/Pci(0x2,0x0)</key>
<dict>
<key>AAPL,ig-platform-id</key>
<data>BgAmCg==</data>
<key>device-id</key>
<data>EgQAAA==</data>
<key>framebuffer-con1-enable</key>
<data>AQAAAA==</data>
<key>framebuffer-con1-pipe</key>
<data>EgAAAA==</data>
<key>framebuffer-con1-type</key>
<data>AAgAAA==</data>
<key>framebuffer-con2-alldata</key>
<data>/wAAAAEAAABAAAAA</data>
<key>framebuffer-con2-enable</key>
<data>AQAAAA==</data>
<key>framebuffer-cursormem</key>
<data>AACQAA==</data>
<key>framebuffer-memorycount</key>
<data>AgAAAA==</data>
<key>framebuffer-patch-enable</key>
<data>AQAAAA==</data>
<key>framebuffer-portcount</key>
<data>AgAAAA==</data>
</dict>
</dict>
</dict>
</dict>

说明

VGA支持

Skylake及更高版本提供VGA支持。对于Ivy Bridge及附近的次代,可使用以下选项修补connector。

1
2
06020000 02000000 30000000 // Option 1
06020000 01000000 30000000 // Option 2

在10.8.2及更高版本上,不可能在Ivy Bridge启用VGA。

热插拔VGA一般不起作用。

Mac系统启动过程

引导器启动

以OpenCore为例,启动过程如下。

1
2
3
4
5
6
7
8
9
10
电脑启动,搜索引导设备
系统定位到EFI分区下的EFI/BOOT/BOOTx64.efi
加载BOOTx64.efi,然后链式加载EFI/OC/OpenCore.efi
应用NVRAM属性
从EFI/OC/Drivers加载EFI驱动
安装GOP (Graphics Output Protocol)
从EFI/OC/ACPI加载ACPI表
应用SMBIOS数据
加载OpenCore并显示所有可能的启动选项
引导安装程序

boot.efi切换

切换至Mac引导加载程序boot.efi,为内核加载准备环境。OpenCore在该环节注入kexts。

XNU/内核切换

boot.efi准备好环境后,内核进入根阶段(Rooting Phase)。该阶段验证SMBIOS数据,加载ACPI表/Kexts。若SSDT/Kexts损坏,或内存映射混乱,将导致该阶段出现问题。

出现[ PCI configurations begin ]后,将开始进行硬件测试,IOKit开始硬件探测以查找要附加到的设备的地方。测试的主要内容包括EC、存储介质、PCI/e、NVRAM、RTC、PS2、I2C等。

完成后将进行USB映射,注意15端口限制将在此时发挥作用。若找不到启动设备,Waiting for Root Device错误将在此时出现。

在出现Waiting for DSMOS时,FakeSMC/VirtualSMC开始发挥作用。DSMOS本身为一个kext,验证系统是否有SMC并会请求密钥。如果缺少此密钥,则DSMOS将不会解密其余的二进制文件,系统启动将卡住。卡在kextd stall[0]: AppleACPICPU也为此错误。

出现AppleHDADriver时,音频驱动程序起作用,AppleALC使机器音频工作。完成后进入GPU驱动程序初始化,WhateverGreen发挥作用,出现IOConsoleUsers提示。若卡在此,则一般为GPU本身问题,而非WhateverGreen本身的问题。

macOS切换

出现Apple标志,启动系统。

ROM/MLB/序列号

ROM部分定义在SmUUID中,应为12个字符,符合Apple的MAC地址标准,否则非法。

MLB即Main Logic Board,用于识别硬件。序列号以MLB为基础生成。前期序列号为11位,MLB为13位。后期序列号为12位,MLB为17位。

序列号和MLB不共享制造位置和型号ID,序列号中的定义对MLB无效。MLB和序列号有逻辑匹配,但不能按字母匹配。

序列号

序列号格式如下。

1
2
3
4
5
6
7
8
9
生产地P/年Y/周W/在该周的产品号S/ID型号C

// 11位
PP/Y/WW/SSS/CCC

// 12位
// Y包含字母代码,表示年份及属于上半年还是下半年
// W使用数字1-9和除A/B/E/I/O/S/U/Z的字母,共27个
PPP/Y/W/SSS/CCCC

MLB

1
2
3
4
5
6
生产地P/年Y/周W/在该周的产品号S/ID型号C

PP/Y/WW/SSSS/CCCC

// 17位
PPP/Y/W/XXXXXX/CCCCCC

资料

长期更新教程

应长期关注以下教程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 于2021-06-06阅读
https://dortania.github.io/OpenCore-Install-Guide/
https://dortania.github.io/OpenCore-Post-Install/

# 仍然保留的阅读内容
# config.plist,各平台都还没看
https://dortania.github.io/OpenCore-Install-Guide/config.plist/penryn.html#starting-point

https://dortania.github.io/OpenCore-Multiboot/oc/linux.html#method-a-chainloading-a-efi-bootloader-grub2-systemd-boot

# 看到这里
https://github.com/dortania/OpenCore-Install-Guide/blob/master/clover-conversion/Clover-config.md#graphics

# OpenCore-Post-Install看到这里
https://dortania.github.io/OpenCore-Post-Install/usb/system-preparation.html#checking-what-renames-you-need

论坛和博客

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
https://dortania.github.io/
https://aserebln.blogspot.com/
http://netkas.org/
https://howtomacospc.wordpress.com/
https://hackintosh.com/
https://blog.skk.moe/
http://dosdude1.com/
https://blog.daliansky.net/
https://osxlatitude.com/forums/
https://www.tonymacx86.com/forums/
https://www.macos86.it/
https://www.hackintosh-forum.de/
https://www.reddit.com/r/hackintosh/
https://www.insanelymac.com/forum/
https://blog.neroxps.cn/
https://www.hackintosh-montreal.com/
https://www.applelife.ru/
https://www.misonsky.cn/
https://www.bugprogrammer.me/
https://fangf.cc/
https://blog.xjn819.com/
http://bbs.pcbeta.com/
http://mac.pcbeta.com/
https://www.itpwd.com/
https://www.penghubingzhou.cn/#blog
https://blog.zuiyu1818.cn/
https://change-y.github.io/
https://www.macrumors.com/
https://www.kancloud.cn/chandler/mac_os/480611
https://www.firewolf.science/
https://www.osx86.net/
http://yqp7js.coding-pages.com/
https://xstar-dev.github.io/
https://heipg.cn/
https://hamac.pl/
https://www.reddit.com/r/hackintosh/
https://pikeralpha.wordpress.com/
https://com-chris1111.github.io/
https://i.pcbeta.com/home.php?mod=space&uid=233039&do=thread&view=me&type=reply&order=dateline&from=space

硬件选择

1
2
3
4
5
6
7
https://wiki.osx86project.org/wiki/index.php/Main_Page
https://blog.daliansky.net/Mojave-Hardware-Support-List.html
https://www.tonymacx86.com/threads/guide-how-to-get-bluetooth-and-wifi-working.275962/
https://4pda.to/forum/index.php?showtopic=72333&st=7780
https://www.insanelymac.com/forum/topic/286092-guide-1st-generation-intel-hd-graphics-qeci/?hl=%20vertek
http://myoldmac.net/sitemap-e.htm
https://github.com/toleda/wireless_half-mini

显卡

1
2
3
4
5
6
7
https://applelife.ru/threads/ati-radeon-hd-4xxx-hd-5xxx-amd-radeon-hd-6xxx-hd-7xxx-r5-r7-r9-rx-vega.28890/
https://applelife.ru/threads/nvidia-gt-x-750-950-980-maxwell-1030-1080-pascal.1546195/
https://applelife.ru/threads/nvidia-gt-x-640-690-740-760-780-kepler.37131/
https://applelife.ru/threads/nvidia-gt-x-420-480-510-590-610-630-fermi.27607/
https://www.tonymacx86.com/threads/guide-general-framebuffer-patching-guide-hdmi-black-screen-problem.269149/
https://www.tonymacx86.com/threads/ati-mobility-radeon-34000-hd.21620/
https://www.insanelymac.com/forum/topic/139476-ati-mobility-radeon-hd-3400/

ACPI

1
2
3
4
5
https://uefi.org/specifications
https://uefi.org/sites/default/files/resources/ACPI_6_3_May16.pdf
https://uefi.org/sites/default/files/resources/ACPI_5.pdf
https://uefi.org/sites/default/files/resources/ACPI_4.pdf
https://uefi.org/specs/ACPI/6.4/19_ASL_Reference/ACPI_Source_Language_Reference.html

引导器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 还没看的
// Clover显卡相关
https://www.insanelymac.com/forum/topic/282787-clover-v2-instructions/?do=findComment&comment=1853010
https://www.insanelymac.com/forum/topic/282787-clover-v2-instructions/?do=findComment&comment=1853099
// CPU
https://www.insanelymac.com/forum/topic/282787-clover-v2-instructions/?do=findComment&comment=1853597
https://www.insanelymac.com/forum/topic/282787-clover-v2-instructions/?tab=comments#comment-1853640

// 睡眠
https://www.insanelymac.com/forum/topic/282787-clover-v2-instructions/?tab=comments#comment-1853603

// RAID
https://www.insanelymac.com/forum/topic/282787-clover-v2-instructions/?do=findComment&comment=1868751

// 选项
https://www.insanelymac.com/forum/topic/282787-clover-v2-instructions/page/2/?tab=comments#comment-1878476

// kexts
https://www.insanelymac.com/forum/topic/282787-clover-v2-instructions/?do=findComment&comment=1909550

// AAPL
https://www.insanelymac.com/forum/topic/282787-clover-v2-instructions/?do=findComment&comment=2020878

// Legacy
https://www.insanelymac.com/forum/topic/298027-guide-aio-guides-for-hackintosh/page/14/?tab=comments#comment-2097514

问题库

1
2
3
4
https://www.tonymacx86.com/threads/readme-common-problems-and-workarounds-on-10-14-mojave.255823/
https://wiki.osx86project.org/wiki/index.php/German_FAQ
https://www.tonymacx86.com/threads/faq-read-first-laptop-frequent-questions.164990/
https://www.insanelymac.com/forum/topic/280062-waiting-for-root-device-when-kernel-cache-used-only-with-some-disks-fix/

亮度修复

1
2
3
https://www.tonymacx86.com/threads/native-brightness-working-without-blinkscreen-using-patched-applebacklight-kext.121031/
https://www.tonymacx86.com/threads/fixing-brightness-with-custom-edid.219413/
https://www.tonymacx86.com/threads/guide-patching-dsdt-ssdt-for-laptop-backlight-control.152659/

电源管理

1
2
3
4
https://www.tonymacx86.com/threads/macos-native-cpu-igpu-power-management.222982/
https://www.tonymacx86.com/threads/mavericks-native-cpu-igpu-power-management.128926/
https://www.tonymacx86.com/threads/ml-native-ivy-bridge-cpu-and-gpu-power-management.86807/
http://bbs.pcbeta.com/viewthread.php?tid=632561&fromuid=512654

旧版系统

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
https://wiki.osx86project.org/wiki/index.php/Install_On_A_Partition_Simple_And_Accurate
https://emaculation.com/doku.php/sheepshaver_mac_os_x_setup
https://emaculation.com/doku.php/sheepshaver_setup
https://www.emaculation.com/doku.php/ppc-osx-on-qemu-for-osx
https://www.emaculation.com/doku.php/ppc-osx-on-qemu-for-windows
https://www.emaculation.com/forum/viewtopic.php?t=5275
https://emaculation.com/doku.php/basilisk_ii_setup
https://emaculation.com/doku.php/basiliskii_osx_setup
https://emaculation.com/doku.php/mini_vmac_setup
https://www.gryphel.com/c/minivmac/
https://www.emaculation.com/doku.php/basilisk_ii
https://www.emaculation.com/doku.php/sheepshaver
http://macintoshgarden.org/installing-software-your-emulator









Mac OSX Snow Leopard 10.6.6 Intel AMD Vmware Image
https://thepiratebay.org/description.php?id=6120172

SnowLeopardAMD
https://drive.google.com/file/d/18D9r0f40IGxo8f2llV1Nkl3DQux0sw9C/view
直接烧录到U盘即可
对于Intel,安装条走完即可
对于AMD,安装条走完后再进去一次安装程序,打开终端并输入以下命令
cd /Volumes/SnowLeopardAMD/PostInstall
sh post.sh



参考:
https://web.archive.org/web/20201129192905/https://amd-osx.com/forum/viewtopic.php?t=4482#p39746

其它

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
https://wiki.osx86project.org/wiki/index.php/Hardware_.kext_Patching_List
https://wiki.osx86project.org/wiki/index.php/Leopard_on_MBR_DualBoot
https://www.insanelymac.com/forum/topic/286092-guide-1st-generation-intel-hd-graphics-qeci/
https://www.olarila.com/topic/5693-guide-ssdt-with-pikes-pm-script-and-use-with-cpufriend/
https://applelife.ru/threads/fakesmc-virtualsmc-lan-sound-graphics-gde-vzjat-keksty.2942933/
https://osy.gitbook.io/hac-mini-guide/details/hades-canyon-nuc
http://www.contrib.andrew.cmu.edu/~somlo/OSXKVM/OLD/index-20131109.html#sec_1
https://github.com/dortania/clover-laptop-guide/blob/master/extras/dual-booting-with-bluetooth-devices.md
https://www.tonymacx86.com/threads/skylake-hwp-enable.214915/
https://blog.neroxps.cn/2017/03/07/BCM94352-5GHz-CN/
https://www.tonymacx86.com/threads/guide-usb-power-property-injection-for-sierra-and-later.222266/

// HD2000显存
https://www.insanelymac.com/forum/topic/298027-guide-aio-guides-for-hackintosh/page/17/?tab=comments#comment-2102367

// GPT Fdisk
https://www.insanelymac.com/forum/topic/298027-guide-aio-guides-for-hackintosh/page/15/?tab=comments#comment-2098111

https://forums.macrumors.com/threads/mp5-1-what-you-have-to-do-to-upgrade-to-mojave-bootrom-upgrade-instructions-thread.2142418/

引导器

在macOS中,可通过在终端上输入以下命令获取引导器路径。

1
nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:boot-path

可通过在终端上输入以下命令获取OEM信息。

1
2
3
nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:oem-product # SMBIOS Type1 ProductName
nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:oem-vendor # SMBIOS Type2 Manufacturer
nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:oem-board # SMBIOS Type2 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
2
3
4
5
6
7
8
9
10
11
12
13
14
# 错误一
ERROR!!! Load prelinked kernel with status 0x8000000000000009

# 错误二
Couldn't allocate runtime area

# 错误三
+++++++++++++++++++++++++++++++

# 错误四
panic(cpu 6 caller 0xffffff801fc057ba): a freed zone element has been modified in zone kalloc.4096: expected 0x3f00116dbe8a46f6 but found 0x3f00116d00000000

# 错误五
Only 244/256 slide values are usable!

一般而言,采用固定内存分配时,内核被分配到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
2
3
4
5
6
AvoidRuntimeDefrag: YES
DevirtualiseMmio: YES
EnableSafeModeSlide: YES
ProtectUefiServices: NO
ProvideCustomSlide: YES
RebuildAppleMemoryMap: YES
1
2
3
4
memmap -b

# 也可通过以下命令将内容写入文件
memmap > memmap.txt

在第十行左右找到符合要求的数据,其中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
2
3
4
5
6
7
8
21:495 00:009 OCABC: MMIO devirt start
21:499 00:003 OCABC: MMIO devirt 0x60000000 (0x10000 pages, 0x8000000000000001) skip 0
21:503 00:003 OCABC: MMIO devirt 0xFE000000 (0x11 pages, 0x8000000000000001) skip 0
21:506 00:003 OCABC: MMIO devirt 0xFEC00000 (0x1 pages, 0x8000000000000001) skip 0
21:510 00:003 OCABC: MMIO devirt 0xFED00000 (0x1 pages, 0x8000000000000001) skip 0
21:513 00:003 OCABC: MMIO devirt 0xFEE00000 (0x1 pages, 0x800000000000100D) skip 0
21:516 00:003 OCABC: MMIO devirt 0xFF000000 (0x1000 pages, 0x800000000000100D) skip 0
21:520 00:003 OCABC: MMIO devirt end, saved 278608 KB

将十六进制转换为十进制后,在配置文件中的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
romnd​​rv=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
2
3
Name: AppleAHCIPort
Find: 45787465 726E616C
Replace: 496E7465 726E616C

允许使用MacPro4,1或MacPro5,1的SMBIOS时不带ECC内存引导

1
2
3
Name: AppleTyMCEDriver
Find: 720A004D 61635072 6F342C31 004D6163 50726F35 2C310058
Replace: 720A0000 00000000 00000000 00000000 00000000 00000058

使用VoodooHDA时将系统偏好设置-声音-输出中的设备由Headphones改为Telephones

1
2
3
Name: VoodooHDA
Find: 48656164 70686F6E 657300
Replace: 54656C65 70686F6E 657300

IOAPIC修复

1
2
3
Name: AppleAPIC
Find: C1E8100F B6F0
Replace: BE170000 0090

添加TRIM支持

1
2
3
Name: IOAHCIBlockStorage
Find: 4150504C 45205353 44
Replace: 00000000 00000000 00

Intel HD3000连接器补丁

1
2
3
Name: AppleIntelSNBGraphicsFB
Find: 01020400 10070000 10070000 05030000 02000000 30000000 02050000 00040000 07000000 03040000 00040000 09000000 04060000 00040000 09000000
Replace: 01020300 10070000 10070000 03040000 00040000 09000000 02050000 00040000 07000000 04060000 00040000 09000000 00000000 00000000 00000000

kernel补丁

去除Lilu内核崩溃时的kexts输出

根据MatchOS的版本号选用更名补丁。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Comment: Disable panic kext logging on 10.15.4 Release kernel
Find: 008a0284c074
Replace: 008a0284c0eb
MatchOS: 10.14.4,10.14.5

Comment: Disable panic kext logging on 10.13 Release kernel
Find: 8A0284C07444
Replace: 8A0284C0EB44
MatchOS: 10.13

Comment: Disable panic kext logging on 10.14-10.14.3 Release kernel
Find: 8A0284C07442
Replace: 8A0284C0EB42
MatchOS: 10.14-10.14.3

Comment: Disable panic kext logging on 10.14.4 Release kernel
Find: 008A0284C074
Replace: 008A0284C0EB
MatchOS: 10.14.4

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
2
3
4
5
6
7
8
9
10
11
12
13
// 查询状态
csrutil status

// 完全启用
csrutil enable
// 或csrutil clear

// 开关各项技术
csrutil enable [--without kext|fs|debug|dtrace|nvram] [--no-internal]

// 禁用
csrutil disable
// 或csrutil enable --without kext --without fs --without debug --without dtrace --without nvram
通过引导器

通过修改引导器中的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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/*
* USB compatibility table for disable phantoms EHC1, EHC2.
*
* Attention!
* Only for 7,8,9-series chipsets and 10.11 and newer!
*
* To disable EHC1 and EHC2 - set an option "XHCI Mode" to "Enabled" in yours BIOS.
* If the "XHCI Mode" option is not available in yours BIOS or works incorrectly, then use this ACPI table.
* Disabling through BIOS is preferable whenever possible.
*
* WARN: for some motherboards you need to use either "EH1D = One" or "EH2D = One" but not both!
* This is because for some motherboards, device (EHC1 or EHC2) is used by macOS. Check the IOReg.
*/
DefinitionBlock ("", "SSDT", 2, "ACDT", "EHCx_OFF", 0x00001000)
{
Scope (\)
{
OperationRegion (RCRG, SystemMemory, 0xFED1F418, One)
Field (RCRG, DWordAcc, Lock, Preserve)
{
, 13,
EH2D, 1,
, 1,
EH1D, 1
}

Method (_INI, 0, NotSerialized) // _INI: Initialize
{
// In most cases this patch does benefit all operating systems,
// yet on select pre-Windows 10 it may cause issues.
// Remove If (_OSI ("Darwin")) in case you have none.
If (_OSI ("Darwin")) {
EH1D = One // Disable EHC1
EH2D = One // Disable EHC2
}
}
}
}

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
2
3
4
EFI/CLOVER/OEM/xxx/kexts/xx.y
EFI/CLOVER/OEM/xxx/kexts/Other
EFI/CLOVER/kexts/xx.y
EFI/CLOVER/kexts/Other

配置文件

默认配置文件路径为EFI/CLOVER/config.plist。

每个主题有独特的配置文件,如EFI/CLOVER/themes/black_green/theme.plist。主题配置文件示例如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Author</key>
<string>Slice</string>
<key>Year</key>
<string>2012</string>
<key>Description</key>
<string>Main metallic looking theme</string>
<key>Theme</key>
<dict>
<key>Badges</key>
<dict>
<key>Show</key>
<true/>
<key>Inline</key>
<false/>
<key>Swap</key>
<false/>
</dict>
<key>Background</key>
<dict>
<key>Path</key>
<string>MetalDragon.png</string>
<key>Type</key>
<string>Scale</string>
<key>Dark</key>
<false/>
<key>Sharp</key>
<string>0x80</string>
</dict>
<key>Banner</key>
<string>logo-trans.png</string>
<key>Font</key>
<dict>
<key>CharWidth</key>
<integer>10</integer>
<key>Path</key>
<string>BoG_LucidaConsole_10W_NA.png</string>
<key>Type</key>
<string>Load</string>
</dict>
<key>Selection</key>
<dict>
<key>Big</key>
<string>Select_trans_big.png</string>
<key>Color</key>
<string>0xF3F3F380</string>
<key>Small</key>
<string>Select_trans_small.png</string>
<key>OnTop</key>
<false/>
</dict>
<key>Anime</key>
<array>
<dict>
<key>ID</key>
<integer>1</integer>
<key>Path</key>
<string>logo_3D</string>
<key>Frames</key>
<integer>15</integer>
<key>FrameTime</key>
<integer>200</integer>
</dict>
</array>
</dict>
</dict>
</plist>

组件

内核

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
2
3
4
5
6
7
# 机器主板名称可在boot.log查看
# 以running on Inspiron 1525 ... with board 0U990C为例
# 可选用Inspiron 1525或0U990C
->[所引导的系统分区]/DSDT.aml
->[Clover所在分区]/EFI/CLOVER/OEM/[机器主板名称]/ACPI/patched/DSDT.aml
->[Clover所在分区]/EFI/CLOVER/ACPI/patched/DSDT.aml
->BIOS
重命名规律

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
├── ACPI
├── CLOVERX64.efi
├── config.plist
├── drivers
│ └── UEFI
│ ├── ApfsDriverLoader.efi
│ ├── AudioDxe.efi
│ ├── DataHubDxe.efi
│ ├── FSInject.efi
│ ├── HFSPlus.efi
│ ├── OpenRuntime.efi
│ └── VirtualSmc.efi
└── kexts
└── Other
├── Lilu.kext
├── VirtualSMC.kext
└── WhateverGreen.kext

基本配置

隐藏启动界面

确保系统正常运作后,打开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
2
3
4
# fs0是Clover所在ESP分区标号
fs0:
cd EFI\CLOVER\tools
BootChimeCfg.efi

引导生成

在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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
├── ACPI
├── Resources
│ └── OcBinaryData
├── Drivers
│ ├── HfsPlus.efi
│ └── OpenRuntime.efi
├── Kexts
│ ├── Lilu.kext
│ ├── VirtualSMC.kext
│ └── WhateverGreen.kext
├── Tools
│ ├── ChipTune.efi
│ ├── ...
│ └── VerifyMsrE2.efi
├── OpenCore.efi
└── config.plist
【进阶】Drivers的选择

对于UEFI机器,使用以下驱动即可。

1
2
HfsPlus
OpenRuntime

对于BIOS机器则需要以下驱动。

1
2
3
OpenUsbKbDxe
HfsPlusLegacy
OpenPartitionDxe # OpenDuet用户(即没有 UEFI)将内置此驱动程序,仅在10.7-10.9使用

对于使用32位CPU的机器,还需要HfsPlus32,下载链接如下。

1
https://github.com/acidanthera/OcBinaryData/blob/master/Drivers/HfsPlus32.efi
【进阶】OpenRuntime的说明

若使用OpenRuntime,且想获得和AptioMemoryFix类似的行为,需要使用以下Quirks。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
ProvideConsoleGop(UEFI Quirk)
AvoidRuntimeDefrag
DiscardHibernateMap
EnableSafeModeSlide

ForceExitBootServices

ProvideCustomSlide


// 需根据机型自行尝试是否启用
SyncRuntimePermissions
SetupVirtualMap
ProtectMemoryRegions
EnableWriteUnprotector
RebuildAppleMemoryMap


// 可选,建议启用
DevirtualiseMmio
ProtectUefiServices

// 可选,不建议启用
DiscardHibernateMap
ForceExitBootServices

kexts转移

OpenCore支持Clover下使用的大部分kexts,但有部分kexts已经被集成,具体如下。

名称 备注
NullCPUPowerManagement 整合到Kernel-Emulate-DummyPowerManagement
BT4LEContinuityFixup 整合到Kernel-Quirks-ExtendBTFeatureFlags

消除冲突

打开终端并输入以下命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 删除Clover设置面板
sudo rm -rf /Library/PreferencePanes/Clover.prefPane

# 删除ESP分区下的NVRAM.plist
rm -rf /Volumes/[ESP分区]/NVRAM.plist

# 删除RC脚本
rm -rf "/etc/rc.clover.lib"
rm -rf "/etc/rc.boot.d/10.save_and_rotate_boot_log.local"
rm -rf "/etc/rc.boot.d/20.mount_ESP.local"
rm -rf "/etc/rc.boot.d/70.disable_sleep_proxy_client.local.disabled"
rm -rf "/etc/rc.boot.d/80.save_NVRAM_plist.local"
rm -rf "/etc/rc.shutdown.local"
rm -rf "/etc/rc.boot.d"
rm -rf "/etc/rc.shutdown.d"

# 删除Clover新开发的NVRAM守护程序CloverDaemonNew
launchctl unload '/Library/LaunchDaemons/com.slice.CloverDaemonNew.plist'
rm -rf '/Library/LaunchDaemons/com.slice.CloverDaemonNew.plist'
rm -rf '/Library/Application Support/Clover/CloverDaemonNew'
rm -rf '/Library/Application Support/Clover/CloverLogOut'
rm -rf '/Library/Application Support/Clover/CloverWrapper.sh'

# 获取logoutHook路径并删除LogoutHook.command
sudo defaults read com.apple.loginwindow LogoutHook
sudo rm -rf $(sudo defaults read com.apple.loginwindow LogoutHook)

# 清空LogoutHook的触发设置
sudo defaults delete com.apple.loginwindow LogoutHook

完成后可重启并重置一次NVRAM,然后通过OpenCore引导,查看是否成功。

若成功,则可复制Clover的kext到Kexts文件夹,并继续以下操作完善。若由于SSDT/DSDT而无法进入系统,即应当通过以下操作修复。

修改SSDT/DSDT

由于OpenCore中的SSDT、DSDT、SMBIOS等将会对所有操作系统生效,因此需要修改SSDT和DSDT以使其只对Mac生效。具体方法为在代码生效部分加上以下框架。

1
2
3
4
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
DefinitionBlock ("", "SSDT", 2, "SUKA", "FixADP1", 0x00001000)
{
External (_SB_.ADP1, DeviceObj)
External (_SB_.AC0_, DeviceObj)
If (_OSI ("Darwin"))
{
Scope (\_SB)
{
Device (ADP1)
{
Name (_ADR, Zero)
Name (_PRW, Package (0x02) {
0x1C,
0x03
})
Method (_STA, 0, NotSerialized)
{
Return (0x0F)
}
}
}
}
}

也可不进行重命名,直接使用以下SSDT。注意该SSDT已注入Name (_PRW, Package (0x02) {0x1C,0x03})。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
DefinitionBlock ("", "SSDT", 2, "SUKA", "FixADP1", 0x00001000)
{
External (_SB_.ADP1, DeviceObj)
External (_SB_.AC0_, DeviceObj)
If (_OSI ("Darwin"))
{
Scope (\_SB)
{
Scope (AC0_)
{
Method (_STA, 0, NotSerialized)
{
Return (Zero)
}
}

Device (ADP1)
{
Name (_ADR, Zero)
Name (_PRW, Package (0x02) {
0x1C,
0x03
})
Method (_STA, 0, NotSerialized)
{
Return (0x0F)
}
}
}
}
}
【进阶】对于以上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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# Kernel Patches
# Kernel-Quirks-AppleXcpmCfgLock
MSR 0xE2 _xcpm_idle instant reboot

# Kernel-Quirks-AppleXcpmExtraMsrs
_xcpm_bootstrap
xcpm_pkg_scope_msrs
_xcpm_SMT_scope_msrs 1
_xcpm_SMT_scope_msrs #2
_xcpm_core_scope_msrs
_xcpm_performance_patch
xcpm MSR Patch 1 and 2
/0x82D390/MSR_PP0_POLICY 0x63a xcpm support patch 1 and 2

# Kext Patches
# Kernel-Quirks-PanicNoKextDump
Disable Panic Kext logging

# Kernel-Quirks-ExternalDiskIcons
AppleAHCIPort External Icon Patch1

# Kernel-Quirks-ThirdPartyDrives
SSD Trim Enabler

# Kernel-Quirks-XhciPortLimit
USB Port Limit Patches

# AppleALC+WhateverGreen
FredWst DP/HDMI patch

# Kernel-Quirks-IncreasePciBarSize
IOPCIFamily Patch

# WhateverGreen
Disable board-ID check

# AppleALC
AppleHDA Patch

# NVMeFix
# High Sierra及更新系统无需该Patch
IONVMe 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
2
3
cd [OC文件夹路径]/Utilties/ocvalidate
chmod +x ocvalidate
./ocvalidate [配置文件名称]

配置文件生成

可通过工具自动生成。

1
2
3
4
5
# Opencore Gen-X
https://github.com/Pavo-IM/OC-Gen-X

# AXIVO OpenCore Plistlib Generator
http://github.com/axivo/opencore

配置文件详解

用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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 硬盘
built-in

# USB
device-id
device_type
device_type

# IMEI
device-id
vendor-id

# WIFI
name
compatible

# LAN
device-id
compatible
vendor-id

# XHCI
device-id
device_type: UHCI
device_type: OHCI
device_type: EHCI
## 以下适用于device_type: EHCI
device-id
AAPL,current-available
AAPL,current-extra
AAPL,current-available
AAPL,current-extra
AAPL,current-in-sleep
built-in
## 以下适用于device_type: XHCI
device-id
AAPL,current-available
AAPL,current-extra
AAPL,current-available
AAPL,current-in-sleep
built-in

可通过设置外置硬盘的build-in属性为00以设置为内建。其中外置硬盘的设备路径可以通过gfxutil找到,具体为在系统PCI列表中找到类似AHCI Controller或NVM Express Controller的PCI名称,然后输入以下命令。

1
2
# pci0000,0000为上面找到的PCI名称
gfxutil -f pci0000,0000

添加该条目,并设置以下键即可。

类型
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
2
3
4
5
6
7
8
9
10
VoodooPS2Controller.kext
VoodooPS2Controller.kext/Contents/PlugIns/VoodooInput.kext
VoodooPS2Controller.kext/Contents/PlugIns/VoodooPS2Keyboard.kext
VoodooPS2Controller.kext/Contents/PlugIns/VoodooPS2Mouse.kext
VoodooPS2Controller.kext/Contents/PlugIns/VoodooPS2Trackpad.kext
VoodooI2C.kext/Contents/PlugIns/VoodooGPIO.kext
VoodooI2C.kext/Contents/PlugIns/VoodooI2CServices.kext
VoodooI2C.kext/Contents/PlugIns/VoodooInput.kext // 需禁用该项,防止与VoodooPS2Controller中的VoodooInput冲突
VoodooI2C.kext
VoodooI2CHID.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
启动项 .icns
其它
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文件放在同一目录,适用于所有文件系统
.lbl(.l2x) 与工具文件放在同一目录,适用于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
2
3
4
5
6
7
OC_SCAN_FILE_SYSTEM_LOCK 
OC_SCAN_DEVICE_LOCK
OC_SCAN_ALLOW_FS_APFS
OC_SCAN_ALLOW_DEVICE_SATA
OC_SCAN_ALLOW_DEVICE_SASEX
OC_SCAN_ALLOW_DEVICE_SCSI
OC_SCAN_ALLOW_DEVICE_NVME

建议添加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 - Unicode Hex Input
-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
2
wmic
csproduct list full
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
2
3
4
5
6
# 官方资源包
https://github.com/acidanthera/OcBinaryData

# 第三方资源包
https://github.com/blackosx/OpenCanopyIcons
https://applelife.ru/threads/kastomizacija-opencanopy.2945020/

默认选择的图标由DefaultBackgroundColor变量决定,当该变量的值定义为浅灰时,则使用Old前缀的图标,定义为其他颜色时则使用没有前缀名的图标。

调试模式

普通设置

需要将OpenCore、Lilu及其插件更换为DEBUG版本。对于OpenCore,需要更换以下文件。

1
2
3
4
5
EFI/BOOT/BOOTx64.efi
EFI/OC/Bootstrap/Bootstrap.efi
EFI/OC/Drivers/OpenRuntime.efi
EFI/OC/Drivers/OpenCanopy.efi # 最好不要用该驱动
EFI/OC/OpenCore.efi

可使用以下工具增强调试能力。

1
2
3
4
5
6
7
# DebugEnhancer.kext
# 允许更大的内核日志
https://github.com/acidanthera/DebugEnhancer

# SSDT-DBG.aml
# 启用ACPI表中的调试语句,帮助进行操作系统内ACPI事件调试
https://gist.github.com/al3xtjames/39ebea4d615c8aed829109a9ea2cd0b5

在OpenCore的配置文件中设置以下内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 提供更多调试信息,特别是与boot.efi相关的信息,并将日志存储到磁盘
Misc-AppleDebug = YES

# 将内核panic存储到磁盘
Misc-ApplePanic = YES

# 禁用UEFI Watchdog
Misc-DisableWatchdog = YES

# 启用调试输出
Misc-Target = 67

# 设置记录的内容
Misc-DisplayLevel = 2147483714

# keepsyms=1确保在内核崩溃期间保留符号
# debug=0x12a是DB_KPRT(0x8), DB_KDP_BP_DIS(0x32), DB_KDP_GETC_ENA(0x200)的组合
# msgbuf=1048576是内核的消息缓冲区大小,1048576为1MB(1024^2)
# -liludbgall在Lilu和任何其他插件上启用调试
# io=0xff启用IOKit调试(日志记录量很大)
# igdebug=0xff启用iGPU相关调试
# acpi_layer=0x8启用ACPI_TABLES调试(或使用0xFFFFFFFF启用全部位)
# acpi_level=0x2设置ACPI_LV_DEBUG_OBJECT调试(或使用0xFFFF5F启用ACPI_ALL_COMPONENTS)
NVRAM-boot-args = -v keepsyms=1 debug=0x12a msgbuf=1048576 -liludbgall io=0xff igdebug=0xff acpi_layer=0x8 acpi_level=0x2
【进阶】AppleDebug与log=1

AppleDebug选项适用于较新的Mac版本,会把boot.efi的verbose输出日志保存到通用 OpenCore日志中。

对于10.15.4之前的版本,将bootercfg设置为log=1,可以将verbose输出打印在屏幕上。

串行设置

若需要启用串行输出,需要在以上设置的基础上,在配置文件中设置以下内容。

1
2
3
4
5
6
7
8
# 执行串口初始化
Misc-SerialInt = YES

# 启用串行输出
Misc-Target = 75

# 将输出重定向到串行
NVRAM-boot-args = serial=5 msgbuf=1048576 debug=0x108

插入串口后使用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
2
3
4
5
Misc-Debug-Target=3
Misc-Debug-DisplayLevel=0x80000042
Misc-Security-HaltLevel=0x80000000
Misc-Debug-DisableWatchDog=true
Misc-Boot-ShowPicker=true

对于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
2
3
4
5
6
# 获取当前设置
Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Enum\HID\*\*\Device` Parameters FlipFlopWheel -EA 0
# 修改设置
# 鼠标滚动方向 相反 FlipFlopWheel 1
# 鼠标滚动方向 自然滚动 FlipFlopWheel 0
Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Enum\HID\*\*\Device` Parameters FlipFlopWheel -EA 0 | ForEach-Object { Set-ItemProperty $_.PSPath FlipFlopWheel 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
PS C:\gdisk> .\gdisk64.exe \\.\physicaldrive0
GPT fdisk (gdisk) version 1.0.4

Command (? for help): p
Disk \\.\physicaldrive0: 419430400 sectors, 200.0 GiB
Sector size (logical): 512 bytes
Disk identifier (GUID): DEC57EB1-B3B5-49B2-95F5-3B8C4D3E4E12
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 419430366
Partitions will be aligned on 2048-sector boundaries
Total free space is 4029 sectors (2.0 MiB)

Number Start (sector) End (sector) Size Code Name
1 2048 1023999 499.0 MiB 2700 Basic data partition
2 1024000 1226751 99.0 MiB EF00 EFI system partition
3 1226752 1259519 16.0 MiB 0C01 Microsoft reserved ...
4 1259520 419428351 199.4 GiB 0700 Basic data partition

Command (? for help): c
Partition number (1-4): 4
Enter name: BOOTCAMP

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to \\.\physicaldrive0.
Disk synchronization succeeded! The computer should now use the new partition table.
The operation has completed successfully.

安装到实体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
2
3
4
5
6
7
8
9
10
11
12
13
14
# 列出分区及其标志符
# 在结果中寻找刚才的EFI分区,此处为diskAs1
diskutil list

# 挂载EFI分区
diskutil mount /dev/diskAs1

# 从该EFI分区启动
bless --mount /Volumes/EFI --setBoot
# 若失败则使用以下命令
bless --mount /Volumes/EFI --setBoot --file /Volumes/EFI/EFI/BOOT/BOOTx64.efi --verbose

# 重启以进入OpenCore
reboot

重启后即跳出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
2
3
4
5
# 打开VMM标志
AAAAAAAAAAAAAACAAAAAAA==

# 关闭VMM标志
AAAAAAAAAAAAAAAAAAAAAA==​
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 进入磁盘工具
diskpart

# 列出所有的磁盘
list volume

# 根据上述结果选择需要安装Windows的磁盘
select volume 1

# 格式化分区
format quick fs=ntfs label=Windows

# 退出磁盘工具
exit

# 根据上述磁盘结果,进入USB安装盘分区
D:

# 备份EFI文件夹
ren efi efi.bak

# 查看需要安装的Windows版本
cd sources
dism /get-wiminfo /wimfile:install.wim

# 应用镜像
# index的数字根据上述结果选择
# applydir应为刚才格式化好的分区盘符
dism /apply-image /imagefile:install.wim /index:1 /applydir:C:\ /compact /EA

# 生成启动文件
bcdboot C:\Windows /s D: /f uefi

# 退出
exit

完成后关闭命令提示符并重启,进入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//System/Library/CoreServices,其中为系统卷的标识符。HFS+文件系统则须复制到系统卷上的/System/Library/CoreServices目录。

出现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
2
<key>HaltLevel</key>
<real>2147483648</real>

修复为如下即可。

1
2
<key>HaltLevel</key>
<integer>2147483648</integer>

选择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
2
3
4
5
6
7
8
9
10
11
12
13
# r2908
https://cloud.189.cn/t/jymqYvaeYryi

# 2.0
http://www.mediafire.com/file/o5jmzzg1k33/Chameleon_2.0_%252B_EFI10.zip/file

# 1.0
http://www.mediafire.com/file/zjzxqojvziu/Chameleon_1.0_%252B_EFI10.zip/file

# 其它
http://chameleon.osx86.hu/
http://chameleon.osx86.hu/static/some-words-about-donation?ref=file_download/39/Chameleon-2.0-RC4-r684-bin.tar.gz
https://github.com/aserebln/Chameleon

手动安装

Chameleon关于启动的文件如下。

名称 作用
fdisk440 帮助写入boot0、boot0hfs的工具,只会写入440bytes,不破坏MBR中的关于Windows的任何资料
boot0 写入到MBR,boot0会搜索boot1h所在的第一个活动分区
boot0hfs 写入到MBR中,boot0hfs会搜索boot1h所在的第一个分区,无论是否设为活动分区
boot1h 写入到分区引导区块中,借此引导Boot文件
boot 放置于开机分区以完成开机引导程序

将文件复制到EFI分区后,Mac下终端执行以下命令即可将Chameleon安装到EFI分区。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 以下dev/rdisk1表示磁盘号
# dev/rdisk1s1表示EFI分区号
# /表示Mac安装分区
cd /Volumes/EFI/usr/standalone/i386

# boot0安装模式
fdisk –f boot0 –u –y /dev/rdisk1
dd if=boot1h of=/dev/rdisk1s1
sudo cp boot /
sudo chown 0:0 /boot

# boot0hfs安装模式
fdisk –f boot0hfs –u –y /dev/rdisk1
dd if=boot1h of=/dev/rdisk1s1
sudo cp boot /
sudo chown 0:0 /boot

目录层级

Extra/Extensions

相当于Clover的kexts/Other目录。

配置文件详解

开启32位

变色龙RC5 r75x版起,开启32位的方法修改为在/Extra/com.apple.Boot.plist内容加入下面设置。

变色龙RC5 r1105版起,开启32位的方法修改为在/Extra/org.chameleon.Boot.plist内容加入下面设置。

1
2
3
4
<key>arch</key>
<string>i386</string>
<key>Kernel Flags</key>
<string></string>

启动参数

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 应当使用PCIRootUID=1
Device (PCI0)
{
Name (_HID, EisaId ("PNP0A03"))
Name (_ADR, 0x00)
Name (_UID, 0x01)
Name (_BBN, 0x00)
...
}

# 应当使用PCIRootUID=0
Device (PCI0)
{
Name (_HID, EisaId ("PNP0A08"))
Name (_CID, EisaId ("PNP0A03"))
Name (_ADR, Zero)
Name (_UID, Zero)
Name (_BBN, Zero)
...
}

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
2
3
# identifier为系统盘的索引号,如disk0s2
cd /
dd if=boot1h of=/dev/identifier

引导启动

找不到mach_kernel

打开org.chameleon.Boot.plist,修改以下内容。

1
2
<key>Kernel</key>
<string>mach_kernel</string>

若无效,则修改为以下内容。

1
2
<key>Kernel</key>
<string>/System/Library/Kernels/kernel</string>

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
2
3
Darwin/System/LibrarySL/Extensions/Extensions.mkext
Darwin/System/LibrarySL/x32/Extensions/Extensions.mkext
Darwin/System/LibrarySL/x64/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等。

ACPI

基础知识

ACPI表是一组硬件描述表,包括SSDT/DSDT等。ACPI是BIOS的基本部分,包含本机设备的基本信息,定义了设备的启动顺序,并提供了它们之间相互通信的基本方法。

Windows 98是第一个支持ACPI的操作系统,Windows Vista以后的Windows则要求电脑必须支持ACPI。Linux不需要ACPI也可以运行,但是在现代设备上禁用ACPI将会导致绝大部分硬件无法运行。Android中也内置了一个精简的ACPI。

Mac从PowerPC架构迁移到Intel架构后开始采用ACPI。但iOS并没有ACPI,而是完全使用自己的私有架构iBoot。搭载M1的Mac也不存在ACPI,使用IBoot作为Bootloader。因此搭载M1的Mac上是几乎没有可能运行Windows的。

系统ACPI表

DSDT与SSDT

DSDT是ACPI的一部分,描述计算机设备信息,包含主要的设备树和标准方法。DSDT是硬件表中最重要的一个,系统根据DSDT驱动相应的硬件。SSDT也称为热补丁,可以在不更改DSDT源文件的情况下完成对DSDT的修复,并实现相应功能。

系统的SSDT则通常包含SATA管理(\_SB.PCI0.SATA)、传感器管理(PTID)、CPU管理(\_PR.CPU)、Intel显卡管理(PCI0.GFX0/PCI0.VID)、GPU管理(GFX0/PEGP/DGFX)等。

大部分Intel iGPU在DSDT中被管理,但有时在SSDT中,可通过搜索GFX0所在位置确定。

因此,对DSDT的修补可以直接通过修改DSDT文件本身,也可以通过SSDT避免替代整个DSDT所带来的其它问题。用SSDT修补DSDT的基本思路是,SSDT中提供某设备经修补的函数,启动时引导器将会把SSDT中的内容注入到DSDT中。在SSDT的函数注入DSDT时,为防止DSDT中出现相同的函数导致冲突,一般需要对DSDT中的原函数进行重命名。

OEM SSDT

OEM SSDT在Mac下没有作用。删除OEM SSDT可避免发生冲突,但可能会发生意料不到的错误。

重命名法则

目的

重命名即对DSDT的部分字段进行修改。重命名法则通常写在引导器的配置文件中,在启动时引导器自动完成该工作。

SSDT的应用常常要配合ACPI的更名,但更名不只适用于SSDT,也可以适用于直接对DSDT进行部分小修改。更新BIOS有可能造成重命名失效。

规则

一般而言ACPI重命名为四个字符,这四个ASCII码对应的十六进制为八位。若需要将DSDT中所有的变量AAAA都替换为BBBB,则在config.plist中添加以下更名补丁即可。

1
2
3
Comment: change AAAA to BBBB
Find: 41414141 // AAAA的ASCII码十六进制数
Replace: 42424242 // BBBB的ASCII码十六进制数

有时需要进行部分修改。如SSDT经常需要将DSDT中的原函数更名,以达到让DSDT中的原函数失效、SSDT中的新函数生效的效果。此时应只对该函数的定义处进行更名,该函数的调用处则不应该被更名。但如果未添加冗余信息,则将会使函数调用处的名称也被更改,从而使调用的函数不是新写的函数,而是被更名过的原函数,这样SSDT便无法起作用。

举例如下。若修改时指定将ABCD修改为ABCX,则不仅ABCD的定义处被修改,EFGH中ABCD的调用处也被修改,则还是调用了被修改名字的原函数,SSDT不起作用。

1
2
3
4
5
6
7
8
9
Method (ABCD, 1, NotSerialized){
...
}

Method (EFGH, 1, NotSerialized){
...
ABCD()
...
}

对于部分修改的情况,为了精确定位到要修改的位置,一般需要添加冗余信息。

对于Method的定义,可通过其类型添加冗余信息。以下以ABCD该Method为例说明,其中ABCD对应的十六进制码为41424344。

方法名 十六进制码
Method (ABCD, 1, NotSerialized) 41424344 01
Method (ABCD, 0, Serialized) 41424344 08
Method (ABCD, 1, Serialized) 41424344 09

一般情况下遵循以下规则。

方法格式 十六进制码
Method(xxxx,a,N) xxxx的十六进制代码+a的十六进制代码,最后两位范围为 00-07
Method(xxxx,b,S) xxxx的十六进制代码+(b+8)的十六进制代码,最后两位范围为08-0F

对于其它无规律的情况,可手动查找。用Hex Friend打开DSDT文件,将搜索模式改为Text,搜索要替换的字段名。定位到要替换的字段位置后,选中该字段并将光标向后拉,直至选中约22个十六进制数。复制该值并搜索,查看该DSDT中该内容是否只出现了一次。若是,则将本内容填入Find中,而Replace填写替换了前8位十六进制数后的内容,示例如下。

1
2
3
4
// 带有14位冗余信息(12345678 901234)用于定位
Comment: change AAAA to BBBB
Find: 41414141 12345678 901234
Replace: 42424242 12345678 901234

若使用Clover引导,也可通过Tgtbridge限定字段的查找范围。定义Tgtbridge后,Clover只会在Tgtbridge值对应的设备中进行字段修改。以将DSDT中设备CCCC内的变量AAAA替换为BBBB为例,更名补丁如下。

1
2
3
4
Comment: change AAAA to BBBB in CCCC
Find: 41414141
Replace: 41414141
Tgtbridge: 43434343

获取十六进制码

打开Hackintool并切换到计算器选项卡,在ASCII码一栏输入原来的字段名,在16进制值一栏会显示对应的八个数字。

也可打开终端,利用以下命令得到ASCII码十六进制数。

1
2
// 获取BIFA的ASCII码十六进制数
echo -n BIFA | xxd

常见十六进制码

常见十六进制码含义如下。Noop一般用于补足字节数量。

十六进制码 源码
00 {
A0 If
A4 0A 0F Return(0x0F)
A3 Noop

提取ACPI表

通过Clover

此方法所提取的ACPI最纯净,推荐使用。

在Clover引导界面按F4即可,所有ACPI表将被提取到EFI/Clover/ACPI/origin目录下。

通过OpenCore

使用在USB中的DEBUG版本的OpenCore,并在配置文件中设置SysReport为True,即可在启动时自动提取ACPI表。将OpenCore替换为DEBUG版本,需要替换以下文件。

1
2
3
4
EFI/BOOT/BOOTx64.efi
EFI/OC/Bootstrap/Bootstrap.efi
EFI/OC/Drivers/OpenRuntime.efi
EFI/OC/OpenCore.efi

通过MaciASL

Mac下打开MaciASL,默认打开本机DSDT。

通过UefiTableExtract

该工具从UEFI BIOS固件中提取ACPI表。

打开以下链接并下载压缩包,解压后运行install.command,再运行UefiTableExtract即可。

1
https://github.com/Saman-VDR/uefiTableExtract

若遇到诸如Namespace lookup failure, AE_ALREADY_EXISTS的错误,可尝试以下命令进行修复。

1
2
3
cd AML
mv SSDT-trouble.aml SSDT-trouble.bin && iasl -d SSDT-trouble.bin
iasl -da DSDT.aml SSDT*.aml

通过acpidump

通过以下链接下载acpidump.efi,并复制到Clover或OpenCore的Tools文件夹中。对于OpenCore,还需在config.plist的Misc-Tools下添加该工具的相关条目。

1
2
https://www.acpica.org/downloads/uefi-support
https://github.com/dortania/OpenCore-Install-Guide/blob/master/extra-files/acpidump.efi.zip

在Clover或OpenCore的引导界面上将会显示该工具,调用后会生成DSDT.dat,修改后缀名为DSDT.aml即可。若无法打开此工具,则可在引导界面进入EFI Shell,输入以下命令以手动运行。

1
2
3
4
fs0: // 替代为自己的EFI分区标识
ls
cd EFI\OC\Tools // 或EFI\Clover\Tools
acpidump.efi -b -n DSDT -z

也可直接使用acpidump.exe,在Windows下运行即可。

1
https://acpica.org/downloads/binary-tools

通过RW-Everything

在Windows下打开RW-Everything,点击Access-ACPI Tables,选择要提取的表,点击Save as Binary即可。

通过aida64

在Windows下打开aida64,点击工具-ACPI浏览器,点击Save DSDT以保存DSDT,点击Save Table以保存SSDT。

通过Linux

以Ubuntu为例,启动系统后进入终端并输入以下命令以存储DSDT。

1
2
cd Desktop
sudo cat /proc/acpi/dsdt > dsdt.aml

通过SSDTTime

在Windows或Linux下打开SSDTTime,选择Dump DSDT即可。

SSDT加载顺序

当SSDT的对象为机器的ACPI时,各SSDT之间没有顺序要求。当SSDT的对象为在另一个新的SSDT定义的设备时,将此SSDT放到定义该设备的SSDT之后加载。

编译与反编译

ACPI表主要有两种形式,dsl为未编译过的源码,aml为编译过的应用文件。dat扩展名与aml完全相同。

尽管可以直接用MaciASL打开aml文件,但这样的操作实际上是对单个文件进行反汇编。由于DSDT和SSDT间可能存在复杂的应用关系,独立反汇编将可能导致错误,因此建议先将aml反编译为dsl文件。

以下所有操作均需ACPI表的编译器iasl,可通过以下链接下载。

1
2
https://bitbucket.org/RehabMan/acpica/downloads/
https://github.com/acidanthera/MaciASL/blob/master/Dist/iasl-stable

终端切换到iasl所在目录,输入以下命令即可。

1
2
3
4
5
6
7
8
9
10
# 编译与反编译
# 提供aml文件即可得到dsl文件,反之亦可
iasl DSDT.dsl/SSDT*.dsl

# 编译
iasl -l DSDT.dsl/SSDT*.dsl

# 反编译
# 对于较旧的ACPI表需要加-da参数,较新的ACPI表(Skylake及更高)则不用加
iasl [-da] -dl DSDT.aml/SSDT*.aml

DSDT

修改

DTGP方法

许多修复需要调用到该方法,放置于DSDT的前部即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Method (DTGP, 5, NotSerialized)
{
If (LEqual (Arg0, Buffer (0x10)
{
/* 0000 */ 0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44,
/* 0008 */ 0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
}))
{
If (LEqual (Arg1, One))
{
If (LEqual (Arg2, Zero))
{
Store (Buffer (One)
{
0x03
}, Arg4)
Return (One)
}

If (LEqual (Arg2, One))
{
Return (One)
}
}
}
Store (Buffer (One)
{
0x00
}, Arg4)
Return (Zero)
}

RTC修复

适用于开机时发生错误,然后重新启动的情况。该情况下BIOS会恢复为默认设置。

修改前如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Device (RTC){
Name (_HID, Eisald ("PNP0B00"))
Name (ATT0, ResourceTemplate()
{
IO (Decode16,
0x0070,
0x0070,
0x00,
0x04
)
})
Name (ATT1, ResourceTemplate(){
IO (Decode16,
0x0070,
0x0070,
0x00,
0x04
)
IRQNoFlags ()
{8}
})
Method (_CRS, 0, NotSerialized)
{
If (LGreaterEqual (OSFX, 0x03))
{
If (HPTF){
Return (ATT1)
}
Else
{
Return (ATT0)
}
}
Else
{
Return (ATT0)
}
}
}

修改后如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Device (RTC){
Name (_HID, Eisald ("PNP0B00"))
Name (_CRS, ResourceTemplate() // ATT0修改为_CRS
{
IO (Decode16,
0x0070,
0x0070,
0x00,
0x02 // 0x04修改为0x02以防止BIOS重置
)
})

// 后面的内容非必要,直接删除
}

HPET修复

将HPET设备修改如下即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Device (HPET)
{
Name (_HID, EisaId ("PNP0103"))
Name (_CID, EisaId ("PNP0C01"))
Name (_STA, 0x0F)
Name (_CRS, ResourceTemplate ()
{
IRQNoFlags ()
{0}
IRQNoFlags ()
{8}
Memory32Fixed (ReadOnly,
0xFED00000, // Address Base
0x00000400, // Address Length
)
})
}

PIC/TIMR设备修复

删除它们中的每一条IRQNoFlags () {2}IRQNoFlags () {0}语句即可。

IOATAFamily.kext内核恐慌修复

在SATA和IDE0设备的GPCT方法前添加以下代码。

1
2
3
4
5
6
7
8
9
10
11
Field (IDCS, DWordAcc, NoLock, Preserve)
{
Offset (0x40),
PRIT, 16,
SECT, 16
}
Method (_INI, 0, NotSerialized)
{
Store (0xE307, PRIT)
Store (0xC000, SECT)
}

然后在_WAK方法中的最前面添加以下代码。

1
2
\_SB.PCI0.PATA._INI ()
\_SB.PCI0.SATA._INI ()

原生AHCI支持

在GPCT方法前插入以下代码。此代码依赖DTGP方法,需提前添加DTGP方法到DSDT前部。

1
2
3
4
5
6
7
8
9
10
11
12
13
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0xC5, 0x27, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}

Clamshell修复

定位到LID设备的_LID方法并修改如下。

1
2
3
4
5
6
7
8
9
10
11
Name (LIDS, One)
Method (_LID, 0, NotSerialized)
{
Store (^^PCI0.LPC.EC.HPLD, LIDS)
XOr (LIDS, One, Local0)
If (Local0)
{
Notify (SLPB, 0x80)
}
Return (LIDS)
}

修复UUID Error

在DSDT中搜索PCI0设备,查看_UID的值,示例如下。

1
Name (_UID, One)

启动参数添加PciRoot=#即可,其中#为_UID的值,上例为1。

让EHCI USB 2.0识别为内建

此代码依赖DTGP方法,需提前添加DTGP方法到DSDT前部。找到0x001D0007和0x001A0007两个设备,并将原来的设备名称分别更改为EHC1和EHC2。在EHC1设备下添加以下代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x04)
{
"AAPL,clock-id",
Buffer (One)
{
0x01
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}

在EHC2设备下添加以下代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x04)
{
"AAPL,clock-id",
Buffer (One)
{
0x02
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}

跳过操作系统检查

在操作系统检查功能的代码下方以及If (LGreaterEqual (_REV, 0x02))上方加入以下代码。

1
2
3
4
Store (One, WNTF)
Store (One, WXPF)
Store (0x02, WSPV)
Store (One, WVIS)

开启亮度滑块

Scope (_SB)块中的_INI方法之后,需要在LNKA设备上方添加以下设备。

1
2
3
4
5
6
7
Device (PNLF)
{
Name (_HID, EisaId ("APP0002"))
Name (_CID, "backlight")
Name (_UID, 0x0A)
Name (_STA, 0x0B)
}

用USB唤醒睡眠

适用于只可通过电源键进行睡眠唤醒的情况。

找到_WAK方法,将Notify附近的代码修改如下。具体为将USB0-USB4修改为UHC1-UHC5,添加EHC1和EHC2,并添加Return方法。

1
2
3
4
5
6
7
8
9
10
11
12
Notify (\_SB.PCI0.UHC1, Zero)
Notify (\_SB.PCI0.UHC2, Zero)
Notify (\_SB.PCI0.UHC3, Zero)
Notify (\_SB.PCI0.UHC4, Zero)
Notify (\_SB.PCI0.UHC5, Zero)
Notify (\_SB.PCI0.EHC1, Zero)
Notify (\_SB.PCI0.EHC2, Zero)
Return (Package (0x02)
{
Zero,
Zero
})

找到Scope (_GPE)物件,将USB0-USB4修改为UHC1-UHC5,USB1-USB2修改为EHC1-EHC2,并删除Notify (\_SB.PCI0.USB3, 0x02),然后在每个修改过的Notify方法后面加Notify (\_SB.PWRB, 0x02)

找到UHC1-UHC5和EHC1-EHC2设备,将其中_PRW中的Package的第二个参数由0x01或One修改为0x03。

添加以下物件后,在引导器配置中修改device-id的参数即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Method (DTGP, 5, NotSerialized)
{
If (LEqual (Arg0, Buffer (0x10)
{
/* 0000 */ 0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44,
/* 0008 */ 0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
}))
{
If (LEqual (Arg1, One))
{
If (LEqual (Arg2, Zero))
{
Store (Buffer (One)
{
0x03
}, Arg4)
Return (One)
}

If (LEqual (Arg2, One))
{
Return (One)
}
}
}
Store (Buffer (One)
{
0x00
}, Arg4)
Return (Zero)
}

使用VoodooHDA但忘记删除AppleHDA修复

注释HDEF设备即可。

引导加载AC适配器驱动

在AC设备的Name (_UID, Zero)后添加以下代码。

1
2
3
4
5
Name (_PRW, Package (0x02)
{
0x18,
0x03
})

引导加载AppleLPC

DSDT搜索0x001F0000,查看对应的设备,对于技嘉为PX40,可全部修改为LPCB或不修改。然后在该设备添加以下方法即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x18, 0x3A, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}

其中device-id列表如下。

device-id 型号
0x02, 0x3B, 0x00, 0x00 5 Series/3400 Series
0x01, 0x3B, 0x00, 0x00 Mobile 5 Series
0x00, 0x3B, 0x00, 0x00 5 Series
0x18, 0x3A, 0x00, 0x00 ICH10
0x16, 0x29, 0x00, 0x00 ICH9R
0x15, 0x28, 0x00, 0x00 ICH8M
0x11, 0x28, 0x00, 0x00 ICH8M-E
0xBD, 0x27, 0x00, 0x00 ICH7M-DH
0xB9, 0x27, 0x00, 0x00 ICH7M
0x70, 0x26, 0x00, 0x00 ICH6-ESB

引导加载显卡驱动

DSDT搜索PCI0,然后在设备内添加以下内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
Device (PEGP)
{
Name (_ADR, 0x00010000)
Device (GFX0)
{
Name (_ADR, Zero)
Name (_SUN, One)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x18)
{
// ****可不使用此部分****
"AAPL,slot-name",
Buffer (0x07)
{
"Slot-1"
},
// ********************

"device_type",
Buffer (0x0C)
{
"NVDA,Parent"
},

// 根据显卡名称修改,注意也要修改0x17为字符串长度
"model",
Buffer (0x17)
{
"NVIDIA Geforce 9800 GT"
},

// 在Windows下通过NVFlash取得,具体查看以下解释
"NVCAP",
Buffer (0x14)
{
/* 0000 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00,
/* 0008 */ 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
/* 0010 */ 0x00, 0x00, 0x00, 0x00
},

// 根据显卡名称修改,注意也要修改0x06为字符串长度
"rom-revision",
Buffer (0x06)
{
"3173a"
},

// 显卡显存
// 0x10为256MB
// 0x20为512MB
// 0x40为1024MB
"VRAM,totalsize",
Buffer (0x04)
{
0x00, 0x00, 0x00, 0x20
},

"@0,compatible",
Buffer (0x0B)
{
"NVDA,NVMac"
},

"@0,device_type",
Buffer (0x08)
{
"display"
},

"@0,name",
Buffer (0x0F)
{
"NVDA,Display-A"
},

"@1,compatible",
Buffer (0x0B)
{
"NVDA,NVMac"
},

"@1,device_type",
Buffer (0x08)
{
"display"
},

"@1,name",
Buffer (0x0F)
{
"NVDA,Display-B"
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
}

NVCAP的内容需要先在Windows下打开NVFlash,并输入以下命令以生成ROM。

1
nvflash -b nvidia.rom

然后在Mac下使用NVCAP Maker打开生成的nvidia.rom,得到数字后两两分开即可,示例如下。

1
2
3
4
5
# 处理前
04000000000003000c0000000000000700000000

# 处理后
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00

禁用显卡

在显卡设备的_INI方法添加以下代码即可。

1
_OFF()

若提示未找到对象,添加外部引用即可。

引导加载声卡驱动

DSDT搜索0x001B0000,查看对应的设备,应当为AZAL。将AZAL全部修改为HDEF,然后在该设备添加以下方法即可,注意layout-id需要配合自行制作的驱动参数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x04)
{
"layout-id",
Buffer (0x04)
{
0x78, 0x03, 0x00, 0x00
},

"PinConfigurations",
Buffer (Zero) {}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}

设置调节风扇转速快捷键

以Fn+Home为例,该快捷键在_Q14被定义。也可使用Fn+End,定义于_Q15。根据需求,在快捷键的对应方法添加以下代码。

1
2
3
4
5
6
7
8
9
# 选择其一即可
## 自动模式
Store (0x80, \_SB.PCI0.LPC.EC.HFSP)
## 关闭
Store (0x00, \_SB.PCI0.LPC.EC.HFSP)
## 最慢
Store (0x01, \_SB.PCI0.LPC.EC.HFSP)
## 最快
Store (0x05, \_SB.PCI0.LPC.EC.HFSP)

亮度按键映射

对于使用VoodooPS2Controller,补丁如下。注意LPCB也可能为LPC、SBRG,PS2K也可能为KBD、KBD0。

1
2
3
4
5
6
7
8
9
10
into method label _Q11 replace_content
begin
// Brightness Down\n
Notify(\_SB.PCI0.LPCB.PS2K, 0x0405)\n
end;
into method label _Q12 replace_content
begin
// Brightness Up\n
Notify(\_SB.PCI0.LPCB.PS2K, 0x0406)\n
end

对于使用ApplePS2SmartTouchPad,补丁如下。注意PS2K也可能为KBD、KBD0。

1
2
3
4
5
6
7
8
9
10
11
into method label _Q11 replace_content
begin
// Brightness Down\n
Notify (PS2K, 0x20)\n
end;

into method label _Q12 replace_content
begin
// Brightness Up\n
Notify (PS2K, 0x10)\n
end;

加载AppleLPC

加载AppleLPC可实现原生CPU电源管理。

查看SLE下的AppleLPC.kext/Contents/Info.plist,可查看和AppleLPC匹配的设备ID。打开DSDT,搜索0x001F0000,在该设备下添加以下代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x18, 0x3A, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}

修改后需要屏蔽IRQ。查找PNP0000,按以下代码屏蔽IRQ。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Device (PIC)
{
...
Name (_CRS, ResourceTemplate()
{
IO (Decode16,
0x0020,
0x0020,
0x01,
0x02,
)
IO (Decode16,
0x00A0,
0x00A0,
0x01,
0x02,
)

/* IRQNoFlags ()
{2} */
})
}

查找PNP0100,按以下代码屏蔽IRQ。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Device (TMR){
...
Name (ATT5, ResourceTemplate()
{
IO (Decode16,
0x0040,
0x0040,
0x00,
0x04,
)

/* IRQNoFlags ()
{0} */
})
...
}

调试

可在任意地方插入以下代码,运行时睡眠灯将会闪烁。

1
2
3
\_SB.PCI0.LPC.EC.LED (0x07, 0x80)
Sleep(0x64)
\_SB.PCI0.LPC.EC.LED (0x07, 0x00)

ASL

语法

ASL是ACPI所使用的语法。注意不支持非ASCII字符注释(中文注释)。

iASL补丁

单行注释用#,每个补丁用;分隔。补丁的语法如下。

1
(into|into_all) (All|DefinitionBlock|Scope|Method|Device|Processor|ThermalZone) [(label|name_adr|name_hid|code_regex|code_regex_not|parent_label|parent_type|parent_adr|parent_hid) <selector>...] (insert|set_label|replace_matched|replaceall_matched|remove_matched|removeall_matched|remove_entry|replace_content|store_%8|store_%9) begin <argument> end;

其中不同类型的函数如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
# DOM
extent into,into_all
scope definitionblock,scope,method,device,processor,thermalzone,all
predicate label,name_adr,name_hid,parent_label,parent_type,parent_adr,parent_hid
action insert,set_label,remove_entry,replace_content

# REGEX
extent into,into_all
predicate code_regex,code_regex_not
action replace_matched,replaceall_matched,remove_matched,removeall_matched,store_%8,store_%9

# No Arguments
remove_entry,remove_matched,removeall_matched,store_%8,store_%9

变量

命名

变量命名不超过四个字符,且不能以数字开头。

所有ACPI标识符都是四个字符,短名称用下划线填充。如XHC在AML二进制中表示为XHC_,EC为EC__,EC0为EC0_,MEI为MEI_

类型

变量类型包括Integer、String、Event(事件)、Buffer(数组)、Package、Buffer Field等。定义变量时不需要显式声明其类型。

Integer

整数。定义示例如下。

1
Name(TEST, 0)
String

字符串。定义示例如下。

1
Name(MSTR, "ASL")
Package

对象集合。定义示例如下。

1
2
3
4
5
Name (_PRW, Package (0x02)
{
0x0D,
0x03
})
Buffer Field

Buffer Field的种类如下。

创建语句 大小
CreateBitField 1-Bit
CreateByteField 8-Bit
CreateWordField 16-Bit
CreateDWordField 32-Bit
CreateQWordField 64-Bit
CreateField 任意大小

定义示例如下。

1
2
3
4
5
6
CreateBitField (AAAA, Zero, CCCC)
CreateByteField (DDDD, 0x01, EEEE)
CreateWordField (FFFF, 0x05, GGGG)
CreateDWordField (HHHH, 0x06, IIII)
CreateQWordField (JJJJ, 0x14, KKKK)
CreateField (LLLL, Local0, 0x38, MMMM)
赋值
1
2
3
4
5
// 传统ASL
Store(Local0, Local1)

// ASL+
Local0 = Local1

作用域

Scope形成作用域,概念类似于数学中的集合{}。

引用

符号\引用根作用域,^(父运算符)引用上级作用域,一个^运算符将当前作用域上移一位。

在同一目录下引用其它字段只需写相对路径,在另一设备下引用则需写绝对路径。比如对于PWBW路径\_SB.PCI0.LPCB.PWBW,在_SB.PCI0.LPCB下只需通过PWBW引用,在外部则要通过\_SB.PCI0.LPCB.PWBW引用。

根作用域

有且仅有一个根作用域,因此DSDT均为如下框架。

1
2
3
DefinitionBlock ("xxxx", "DSDT", 0x02, "xxxx", "xxxx", xxxx){
...
}

xxxx参数依次表示输出文件名、OEMID、表ID、OEM版本。第三个参数根据第二个参数指定,DSDT一定是0x02。其他参数可以自由修改。

其它作用域

根作用域下有_GPE_PR_SB_SI_TZ五个作用域,Device(xxxx)也可看做是一个作用域。不同属性的设备放在对应的作用域下。

_GPE

ACPI的事件处理。

1
2
3
4
5
6
7
8
Scope (_GPE)
{
Method (_L0D, 0, NotSerialized)
{
...
}
...
}
_PR

处理器相关信息。不同的CPU所在的域会不同,常见的有_PR_SBSCK0等。

1
2
3
4
5
6
7
8
Scope (_PR)
{
Processor (CPU0, 0x00, 0x00000410, 0x06)
{
...
}
...
}
_SB

所有的设备和总线。

1
2
3
4
5
6
7
8
Scope (_SB)
{
Device (PCI0)
{
...
}
...
}
_SI

系统指示灯。白苹果中无此作用域。

_TZ

热区,用于读取某些温度。

函数/方法

方法定义

自定义的函数被称为方法,用Method定义。函数最多可以传递八个参数,在函数里用Arg0-Arg7表示,不可以自定义。函数最多可以用八个局部变量,用Local0-Local7表示,无需定义,但需要初始化即必须要有一次赋值操作才能使用。

函数可以定义在Device下或者Scope下,但是不能脱离Scope定义单独的函数。参数个数如果不定义默认为零。

定义示例如下。方法名为ABCD,参数个数为2,为可序列化函数。

1
Method (ABCD, 2, Serialized)
单一变量函数
1
2
3
4
5
// 定义TEST函数
Method (TEST)
{
...
}
有两个输出参数的函数

使用局部变量Local0-Local7。

1
2
3
4
5
6
7
8
9
10
11
12
13
// 定义有两个输入参数的MADD函数
Method (MADD, 2)
{
// 传统ASL
Store(Arg0, Local0)
Store(Arg1, Local1)
Add(Local0, Local1, Local0)

// ASL+
Local0 = Arg0
Local1 = Arg1
Local0 += Local1
}
带返回值的函数
1
2
3
4
5
6
7
8
9
// 实现自定义加法
Method (MADD, 2)
{
Local0 = Arg0
Local1 = Arg1
Local0 += Local1

Return (Local0)
}

调用方法如下。

1
2
3
4
5
// 传统ASL
Store(MADD(1,2), Local0)

// ASL+
Local0 = 1 + 2
可序列化函数

当函数声明为Serialized时,内存中仅能存在一个实例。一般应用在函数中创建一个对象。

1
2
3
4
Method(TEST, Serialized)
{
Name(MSTR,"I will success")
}

如果声明TEST函数如上,则运行以下代码时,若先执行Dev1的TEST,Dev2的TEST将等待Dev1中的TEST函数执行完毕后再执行。

1
2
3
4
5
6
7
Device (Dev1)
{
TEST()
}
Device (Dev2)
TEST()
}

若声明为NotSerialized,则在其中一个Dev调用TEST的时候,另一个将调用失败,因无法同时创建同一字符串MSTR。

现有函数
赋值函数

在ASL+中可直接使用=,传统ASL中需要用Store(A, B),表示将A存到B中,即B=A。

运算函数

传统ASL中没有运算符。在ASL+中引入了与C语言等同的+-*/=<<>>和逻辑判断==!=等。

算术运算函数
ASL+ 传统 ASL 中文含义 举例
+ Add 整数相加 Local0 = 1 + 2
Add (1, 2, Local0)
- Subtract 整数减法 Local0 = 2 - 1
Subtract (2, 1, Local0)
* Multiply 整数相乘 Local0 = 1 * 2
Multiply (1, 2, Local0)
/ Divide 整数除法 Local0 = 10 / 9
Divide (10, 9, Local1(余数), Local0(结果))
% Mod 整数求余 Local0 = 10 % 9
Mod (10, 9, Local0)
<< ShiftLeft 左移 Local0 = 1 << 20
ShiftLeft (1, 20, Local0)
>> ShiftRight 右移 Local0 = 0x10000 >> 4
ShiftRight (0x10000, 4, Local0)
Decrement 整数自减 1 Local0–
Decrement (Local0)
++ Increment 整数自增 1 Local0++
Increment (Local0)
& And 整数于 Local0 = 0x11 & 0x22
And (0x11, 0x22, Local0)
&#124; Or Local0 = 0x01 \ 0x02
Or (0x01, 0x02, Local0)
~ Not 取反 Local0 = ~(0x00)
Not (0x00,Local0)
Nor 异或 Nor (0x11, 0x22, Local0)
逻辑运算函数
ASL+ 传统 ASL 中文含义 举例
&& LAnd 逻辑与 If (BOL1 && BOL2)
If (LAnd(BOL1, BOL2))
! LNot 逻辑反 Local0 = !0
Store (LNot(0), Local0)
&#124; LOr 逻辑或 Local0 = (0 | 1)
Store (LOR(0, 1), Local0)
< LLess 逻辑小于 Local0 = (1 < 2)
Store (LLess(1, 2), Local0)
<= LLessEqual 逻辑小于等于 Local0 = (1 <= 2)
Store (LLessEqual(1, 2), Local0)
> LGreater 逻辑大于 Local0 = (1 > 2)
Store (LGreater(1, 2), Local0)
>= LGreaterEqual 逻辑大于等于 Local0 = (1 >= 2)
Store (LGreaterEqual(1, 2), Local0)
== LEqual 逻辑相等 Local0 = (Local0 == Local1)
If (LEqual(Local0, Local1))
!= LNotEqual 逻辑不等于 Local0 = (0 != 1)
Store (LNotEqual(0, 1), Local0)
延迟函数
名称 含义 语法 参数 描述
Sleep 延迟 Sleep(Source1) 整数 执行被延迟至少所需的毫秒数(长期)
Stall 短时间停止 Stall(Source1) 整数 执行被延迟至少所需的微秒数(短期,超过100微秒的延迟必须使用Sleep而不是Stall)
现有方法

_字符开头的函数和变量均为系统保留方法。

_OSI

全称为Operating System Interfaces,即操作系统接口。当系统加载时,_OSI会接收到一个参数,不同的系统接收的参数不同,ACPI执行的指令就不同,具体如下表。

操作系统 字符串
macOS “Darwin”
Linux/基于Linux内核 “Linux”
FreeBSD “FreeBSD”
Windows “Windows 20XX”

采用操作系统补丁的作用在于修改其返回参数,或修改其参数对应的行为,从而解锁系统对某些部件的限制,通常情况下不推荐使用。示例如下。

1
2
3
4
5
6
7
8
9
10
11
12
// 需要解锁限制的部件
If ((_OSI ("Windows 2009") || _OSI ("Windows 2013")))
{
OperationRegion (PCF0, SystemMemory, 0xF0100000, 0x0200)
Field (PCF0, ByteAcc, NoLock, Preserve)
{
HVD0, 32,
Offset (0x160),
TPR0, 8
}
...
}

ACPI还定义了OSYS,对应关系如下。

标签值 OSYS值 对应系统
Windows 2009 0x07D9 Win7
Windows 2012 0x07DC Win8
Windows 2013 0x07DD Win8.1
Windows 2015 0x07DF Win10
Windows 2016 0x07E0 Win10 1607
Windows 2017 0x07E1 Win10 1703
Windows 2017.2 0x07E1 Win10 1709
Windows 2018 0x07E2 Win10 1803
Windows 2018.2 0x07E2 Win10 1809
Windows 2019 0x???? Win10 1903

Win8以上才支持I2C设备。当加载macOS时,_OSI接受的参数不会被ACPI识别,OSYS被赋予了默认值。这个默认值通常小于Win8要求的值,显然I2C无法工作,故VoodooI2C通常需要采用操作系统补丁来驱动触控板。

_STA

全称为Status,即状态。用于描述设备的状态,与PowerResource的_STA不同(PowerResource的_STA只有两个返回值One和Zero)。

ACPI表中的每个设备在初始化之前,都会先执行_STA函数检测这个设备的状态,若设备存在才初始化。若没有显式定义_STA函数,默认认为这个设备存在且能正常工作。描述设备的状态主要靠_STA的返回值,它的返回值有32位,目前只有末5位有定义,如下表。是则置该位为1,否则置为0。

Bit位 含义
0 设备是否存在
1 设备是否被启用且可以解码其资源
2 设备是否在UI中显示
3 设备是否正常工作
4 设备是否存在电池

若一个设备没有电池、可以正常工作并在系统中显示,则它的_STA返回值为二进制的01111,换成十六进制为0x0F。若一个设备不存在,返回值为00000,即十六进制下的0x00,或写成Zero。

0x0B表示设备处于半开状态,不允许解码其中的资源。0x1F只会在笔记本的电池设备中出现,多出的那个Bit用于通知电池控制设备(Control Method Battery Device,PNP0C0A)存在电池。

_CRS

全称为Current Resource Settings,即当前资源设置。_CRS函数返回一个Buffer,在触摸设备中会返回触摸设备所需的GPIO Pin/APIC Pin等。通过调整其值,可以控制设备的中断模式。

_SRS

全称为Set Resource Settings。

_CST

与CPU的C2/C4/C6/C7休眠有关。

_PCT

有关SpeedStep功能。

_PPC

控制CPU频率范围。

_PSS

一组包含可能的CPU states数组,与PLimitDict/UnderVoltStep/Turbo有关。

OperationRegion域

格式如下。

1
OperationRegion (RegionName, RegionSpace, Offset, Length)

各参数含义如下。

参数 含义
RegionName 操作区名称,可能不止一个(EC下的通常为ERAM、ECF2、ECF3、ECOR等)
RegionSpace 操作空间/作用域(通常EC使用的作用域都是EmbeddedControl,但某些厂商选择将EC数据映射到系统内存中,则作用域为SystemMemory)
Offset 作用域内每个Field的起始偏移量(EC作用域的起始偏移量通常为Zero,而系统内存作用域中用于映射EC数据的起始偏移量值由厂商决定)
Length 作用域内每个Field的最大长度

Field域

格式

格式如下。

1
Field (RegionName, AccessType, LockRule, UpdateRule) {FieldUnitList}

各参数含义如下。

参数 含义
RegionName 对应OperationRegion的操作区名称
AccessType 访问类型(EmbeddedControl只能是ByteAcc,代表按字节访问,因此偏移量是以字节来计算的,即每8位进1)
LockRule 锁定规则,与多线程相关,通常为NoLock
UpdateRule 更新规则,用来指定如何处理未产生改动的映射区域,通常为Preserve,即维持原值
FieldUnitList 字段单元列表,即寄存器列表
偏移量计算

以以下代码为例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SMBus I/O and Memory Mapped I/O Registers
OperationRegion (SMBI, SystemIO, 0x4000, 0x10)
Field (SMBI, ByteAcc, NoLock, Preserve)
{
HSTS, 8, // Host Status (HST_STS)
Offset (0x02),
HCON, 8, // Host Control (HST_CNT)
HCOM, 8, // Host Command (HST_CMD)
TXSA, 8, // Transit Slave Address (XMIT_SLVA)
DAT0, 8, // Host Data 0 (HST_D0)
DAT1, 8, // Host Data 1 (HST_D1)
HBDR, 8, // Host Block Data Register (Byte) (HOST_BLOCK_DB)
PECR, 8, // Packet Error Check Register (PEC)
RXSA, 8, // Receive Slave Address (RCV_SLVA)
SDAT, 16 // Receive Slave Data (SLV_DATA)
}

从以上代码,可知SMB_BASE=0x4000。故HSTS的地址为(4000+00)h,HCON的地址为(4000+02)h,HCOM的地址为(4000+03)h。注意后面数字为8时表示8bit,即一个字节,因此下一个变量的地址为上一个变量的地址加一。

Package()

对于以下代码,0x03表示参数个数。

1
2
3
Name (_PSS, Package(0x03)){
...
}

Buffer()

对于以下代码,0x07表示字符串长度,注意为字符数+空格数+1。

1
2
3
Buffer (0x07){
"Slot-1"
}

嵌入式控制器

即EmbeddedControl,该ACPI设备下通常具备电池、光线传感器、加速度传感器、EC Query方法映射等定义。

睡眠相关

PNP0C0E(睡眠按钮)、PNP0C0D(笔记本盖子)、_PTS(睡眠前执行)、_WAK(唤醒后执行)。

设备

I2C总线

通常具备触摸设备及人体学输入设备相关传感器(如指纹传感器)定义。

电池

在电池ACPI代码中,通常具备以下方法。电池驱动主要是通过操作_BIF和_BST这两个方法分别获取电池信息和电池状态。

在DSDT中搜索PNP0C0A(电池的_HID)即可找到电池设备的位置。

方法 作用
_BIF Battery Information,获取电池基本信息,包括设计容量、电池代号、序列号、电池类型、OEM信息等
_BIX Battery Information Extended,_BIF 的拓展方法,电池驱动通常优先使用_BIX方法获取电池信息
_BST Battery Status,获取电池实时状态,返回电池充电状态、剩余容量百分比和数值以及当前电池电压
_BIP Battery Trip Point,设置电池低电量触发值,大部分电池不支持此功能,这种情况下系统会轮询_BST中的剩余电量来判断是否处于警戒水平
EC设备

即Embedded Controller,在主板和嵌入式外围设备(如热键、端口或电池)之间进行通信。

在DSDT中搜索PNP0C09(EC的_HID)即可找到EC设备的位置。定义代码如下。

不同机器的EC名称不一样,常见的为EC、EC0、H_EC,戴尔机器通常使用ECDV,华为通常使用HWEC。

1
2
3
4
5
Scope (_SB.PCI0.LPCB)
{
Device (H_EC)
{
Name (_HID, EisaId ("PNP0C09") /* Embedded Controller Device */) // _HID: Hardware ID
设备名称对应关系
设备名称 所在地址 代表装置 作用 常用命名 备注
PEGP 10000 PCI Express Root Port 显示卡 PEGP/IOU0/IOU1/IOU2/NRP1/NRP5/P0P9 关于显示的装置都会出现该项目,如GFX0/LCD/VGA/TV/PXS1
HDEF 1B0000 HD Audio Controller 声卡 HDEF
PEX0-PEX5 1C0000-1C0005 PCI Express Port 1-PCI Express Port 6 内建有线/无线网卡、FireWire、JmicronATA、JmicronSATA RP01-RP06 在LAN/GIGE/ETH/ARPT/FRWR出现
USB0-USB6、US31 1A0001-1A0002、1D0001-1D0002 USB UHCI Controller 1-USB UHCI Controller 6 USB UHC1-UHC6
USBE、USE2 1A0007、1D0007 USB2 EHCI Controller 1、USB2 EHCI Controller 2 高速USB EHC1-EHC2
HUB0 1E0000 PCI Bridge FireWire PCIB 在FRWR出现
PX40 1F0000 LPC Interface Controller 并行埠、串列埠、键盘、滑鼠、软碟机等低速设备管理装置 LPCB 在HPET/RTC等出现
IDE0 1F0001 IDE Controller IDE控制器(光驱) PATA 较新主板无该设备
IDE1 1F0002 SATA AHCI Controller SATA(AHCI) SATA
IDE2 1F0005 SATA RAID Controller / / 苹果不支持Intel RAID,所以没有这个项目
PX43 1F0003 SMBus Controller System Management Bus Controller,控制主板上的装置并收集相应的讯息 SBUS
APIC Advanced Programmable Interrupt Controller ACPI控制器
MCHC Memory Controller Hub 内存控制器

流程控制

以下均以ASL+举例。

If-ElseIf-Else
1
2
3
4
5
6
7
8
9
10
11
12
If (_OSI ("Darwin"))
{
OSYS = 0x2710
}
ElseIf (_OSI ("Linux"))
{
OSYS = 0x03E8
}
Else
{
OSYS = 0x07D0
}
Switch-Case-Default-BreakPoint

BreakPoint相当于断点,意为退出当前Switch。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Switch(Arg2)
{
Case(1)
{
If(Arg1 == 1)
{
Return (1)
}
BreakPoint
}
Case(2)
{
......
Return (2)
}
Default
{
BreakPoint
}
}
While
1
2
3
4
5
6
Local0 = 10
While (Local0 >= 0x00)
{
Local0--
Stall (32)
}
For
1
2
3
4
for (local0 = 0, local0 < 8, local0++)
{
...
}
存在性判断

CondRefOf可以用来判断所有类型Object的存在与否。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Method (SSCN, 0, NotSerialized)
{
If (_OSI ("Darwin"))
{
...
}
ElseIf (CondRefOf (\_SB.PCI0.I2C0.XSCN))
{
If (USTP)
{
Return (\_SB.PCI0.I2C0.XSCN ())
}
}

Return (Zero)
}

编译错误与警告

(from opcode)

编译完成后在文件内的某些行会有此该提示,一般位于以下位置,表明名称已在作用域中,其外部声明是多余/不必要的。可直接注释掉此行。

1
External (DTS1, FieldUnitObj)    // (from opcode)
only 0 was resolved (2 unresolved)

在编译完成后,文件内可能会有以下注释,主要含义为方法名称未定义。由于某些方法在Windows而不在ACPI表被定义,因此该警告可忽略。

1
2
3
4
/* There were 2 external control methods found during 
* disassembly, but only 0 was resolved (2 unresolved)
...
*/
illegal open scope on external object from within dsdt

CondRefOf函数导致,该函数用于确认该项存在。删除整个CondRefOf块即可。

Pass 1 parse of [DSDT]

DSDT/SSDT中的方法不受MaciASL支持,更新MaciASL即可。

Invalid character (0x3D), expecting ASL keyword or name

DSDT/SSDT中的方法不受MaciASL支持,更新MaciASL即可。

Syntax error, unexpected PARSEOP_ONE, expecting ‘(‘

DSDT/SSDT中的方法不受MaciASL支持,更新MaciASL即可。

错误示例

syntax error, unexpected PARSEOP_ARG0

错误代码如下。

1
2
3
4
5
6
7
8
9
Method (ADBG, 1, Serialized)
{
If (CondRefOf (MDBG))
{
Return (MDBG)
Arg0
}
Return (Zero)
}

修正后代码如下。

1
2
3
4
5
6
7
8
Method (ADBG, 1, Serialized)
{
If (CondRefOf (MDBG))
{
Return (MDBG (Arg0))
}
Return (Zero)
}
syntax error, unexpected PARSEOP_ZERO

删除全部的Zero即可。

syntax error, unexpected PARSEOP_FIELD

错误代码如下。

1
2
3
OperationRegion (HRPE, SystemMemory, \_GPE.MMTB (0x04), Field (HRPE, DWordAcc, Lock, Preserve)){
VDPC, 32
}

修改如下。

1
2
3
4
5
OperationRegion (HRPE, SystemMemory, \_GPE.MMTB, 0x04)
Field (HRPE, DWordAcc, Lock, Preserve)
{
VDPC, 32
}
Min/Max/Length/Gran are all zero,but no resource tag

错误代码如下。

1
2
3
4
5
6
IO(Decode16,
0×0000,
0×0000,
0×00,
0×00,

修正后代码如下。

1
2
3
4
5
6
IO(Decode16,
0×0000,
0×0000,
0×00,
0×01,

syntax error, unexpected PARSEOP_NAMESEG,expecting’(’

找到如下代码并删除即可。

1
2
3
4
MUID
REVI
SFNC
XRG0
Name already exists in scope(IGDS)

删除多余的外部引用语句即可。

Not a control method, cannot invoke (W008 is a BufferField)

错误代码如下。

1
Store (^^PCI0.LPCB.EC.FBF2, W008 (Store (0x03, ^^PCI0.LPCB.EC.FDAT), Store (0xC0, ^^PCI0.LPCB.EC.FCMD)))

修正后代码如下。

1
2
3
Store (^^PCI0.LPCB.EC.FBF2, W008)
Store (0x03, ^^PCI0.LPCB.EC.FDAT)
Store (0xC0, ^^PCI0.LPCB.EC.FCMD)
ResourceTag larger than Field (Tag: 64 bits, Field: 32 bits)

错误代码如下。

1
CreateDWordField (BUF0, _SB.PCI0._Y0F._LEN, MSLN)

修正后代码如下。

1
CreateQWordField (BUF0, _SB.PCI0._Y0F._LEN, MSLN)
Warning ResourceTag larger than Field (Tag: 16 bits, Field: 8 bits)

错误代码如下。

1
CreateByteField (BUF0, _SB.PCI0.LPCB.N393.LPT1._CRS._Y16._MIN, IOL0)

修正后代码如下。

1
CreateWordField (BUF0, _SB.PCI0.LPCB.N393.LPT1._CRS._Y16._MIN, IOL0)
ResourceTag larger than Field (Tag: 64 bits, Field: 32 bits)

错误代码如下。

1
CreateDWordField (BUF0, _SB.PCI0._Y0F._LEN, MSLN)

修正后代码如下。

1
CreateQWordField (BUF0, _SB.PCI0._Y0F._LEN, MSLN)
ResourceTag larger than Field(Tag:64its,Field:32bits), Remark Effective AML package length is zero

错误代码如下。

1
Package (0x00) {}

修正后代码如下。

1
Package (0xFF) {}
Result is not used, possible operator timeout will be missed

错误代码如下。

1
Acquire (MUT0, 0x0FFF)

修正后代码如下。

1
Acquire (MUT0, 0xFFFF)
Possible operator timeout is ignored

错误代码如下。

1
Acquire (MUT0, 0x0FFF)

修正后代码如下。

1
Acquire (MUT0, 0xFFFF)
syntax error, unexpected PARSEOP_PACKAGE

错误代码如下。

1
2
3
4
5
6
7
8
9
Package (0x06)
{
0x80000000,
0x80000000,
0x80000000,
0x80000000,
0x80000000,
0x80000000
}

删除错误行之后一直到下一个NAME之前的内容即可。

_REG has no corresponding Operation Region

错误代码如下。

1
Method (_REG, 2, NotSerialized)

删除_REG之前的短横即可。

Remark Use of compiler reserved name (_T_0)

错误代码如下。

1
Name (_T_0, Zero)

将_T前边的短横删除,或者改为T0_0即可。若后边是其他数2,3等等,那么相应改为T2_2,T3_3。

Unknown reserved name (_VPC)

错误代码如下。

1
Name (_VPC, Zero)

VPC即Virtual power control。搜索VPC,可以看到大部分的VPC之前都没有短横,所以删除所有搜索到的带短横的VPC之前的短横。

not a control method : PS0X()

删除 PS0X(),修改为 Return (PS0X)。

Unknown reserved name (_CFG)

_CFG指向Method (_CFG, 0, NotSerialized),则删除CFG之前的短横即可。

Not all control paths return a value (WQAA)

错误代码如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Method (WQAA, 1, NotSerialized)
{
If (LEqual (Arg0, Zero))
{
Store (T2D0, Local0)
Return (Local0)
}
...
If (LEqual (Arg0, 0x21))
{
Store (TDBB, Local0)
Return (Local0)
}
}

修正后代码如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Method (WQAA, 1, NotSerialized)
{
If (LEqual (Arg0, Zero))
{
Store (T2D0, Local0)
Return (Local0)
}
...
If (LEqual (Arg0, 0x21))
{
Store (TDBB, Local0)
Return (Local0)
}
Return (Zero)
}
Reserved method should not return a value (_PDC)

错误代码如下。

1
2
3
4
5
6
7
Method (_PDC, 1, NotSerialized)
{
Store (CPPC, _PR.CPU0._PPC)
Store (CPDC (Arg0), Local0)
GCAP (Local0)
Return (Local0)
}

修正后代码如下。

1
2
3
4
5
6
7
Method (_PDC, 1, NotSerialized)
{
Store (CPPC, _PR.CPU0._PPC)
Store (CPDC (Arg0), Local0)
GCAP (Local0)
Return (Zero)
}
Statement is unreachable

错误代码如下。

1
2
3
4
5
6
Method (_PRW, 0, NotSerialized)
{
Return (GPRW)
0x09
0x04
}

修正后代码如下。

1
2
3
4
Method (_PRW, 0, NotSerialized)
{
Return (GPRW)
}
syntax error, unexpected PARSEOP_IF, expecting PARSEOP_CLOSE_PAREN or ‘,’

错误代码如下。

1
2
3
4
5
6
7
8
9
If (LEqual (PM6H, One))
{
CreateBitField (BUF0, \_SB.PCI0._Y0C._RW, ECRW) // _RW_: Read-Write Status
Store (Zero, ECRW (If (PM0H)
{
CreateDWordField (BUF0, \_SB.PCI0._Y0D._LEN, F0LN) // _LEN: Length
Store (Zero, F0LN)
}))
}

修正后代码如下。

1
2
3
4
5
6
7
8
9
10
11
If (LEqual (PM6H, One))
{
CreateBitField (BUF0, \_SB.PCI0._Y0C._RW, ECRW) // _RW_: Read-Write Status
Store (Zero, ECRW)
}

If (PM0H)
{
CreateDWordField (BUF0, \_SB.PCI0._Y0D._LEN, F0LN) // _LEN: Length
Store (Zero, F0LN)
}
Invalid combination of length and Min/Max fixed flags

0x0000, // Length改成0x0001, // Length即可修复错误。若为其它数值,注意需要转换为十六进制。

Control Method should be made Serialized(due to creation of named objects within)

错误代码如下。

1
2
3
4
Method (UXDV, 1, NotSerialized)
{
...
}

修正后代码如下。

1
2
3
4
Method (UXDV, 1, Serialized)
{
...
}
Error _HID suffix must be all hex digits (GH)

错误代码如下。

1
Name (_HID, "ABCDEFGH")

将GH改为01即可。

Result is not used, operator has no effect

错误代码如下。

1
Add (Local0, 0x02)

修正后代码如下。

1
Add (Local0, 0x02, Local0)
Not all control paths return a value (_CRS), Reserved method must return a value (Buffer required for _CRS)

错误代码如下。

1
2
3
4
5
6
7
Method (_CRS, 0, NotSerialized)
{
If (IGDS)
{
Return (CRS)
}
}

修正后代码如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Method (RES, 0, NotSerialized)
{
Return (Zero)
}

Method (_CRS, 0, NotSerialized)
{
If (IGDS)
{
Return (CRS)
}
Else
{
Return (RES)
}
}

版本差异

iASL编译器有4.0、5.0、6.3等版本。其中4.0与5.0为旧版,6.3为新版。对于Snow Leopard及更早的系统,需要用旧版iASL编译,新版iASL编译会在系统启动时卡ACPI的panic。将DSDT从iASL 6.3改为iASL 4.0/5.0后,可能会出现编译错误。

对于找不到对象的错误,主要是因为ACPI 6.3允许后定义,ACPI 4.0/5.0则必须采用先定义的方式。解决方法为调整定义语句到调用语句之前,以及调换If语句的位置。

对于没有
I2cSerialBus/I2cSerialBusV2函数的错误,ACPI 4.0中并没有这两个函数,而ACPI 5.0中为I2CSerialBus函数。ACPI 4.0不支持I2C,只支持I2C的子集SMBus。解决方法为ACPI 5.0编译,并删除I2cSerialBusV2函数和Exclusive,

具体示例如下。

例一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Scope (_SB.PCI0)
{
Device (I2C1)
{
If (LNotEqual (SMD1, 0x02))
{
Name (_HID, "INT3443") // _HID: Hardware ID
Method (_HRV, 0, NotSerialized) // _HRV: Hardware Revision
{
Return (LHRV (SB11))
}

Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings
{
Return (LCRS (SMD1, SB01, SIR1))
}

Method (_STA, 0, NotSerialized) // _STA: Status
{
Return (LSTA (SMD1))
}
}

If (LEqual (SMD1, 0x02))
{
Name (_ADR, 0x00150001) // _ADR: Address
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
If (PCIC (Arg0))
{
Return (PCID (Arg0, Arg1, Arg2, Arg3))
}

Return (Buffer (One)
{
0x00
})
}
}
}
}

使用ACPI 6编译时无错误,使用ACPI 4编译时出现以下错误。

1
2
3
21694, 4096, syntax error, unexpected PARSEOP_IF
21715, 4057, Name already exists in scope (_ADR)
21730, 4096, syntax error, unexpected '}', expecting $end

主要修改方式为将If语句写到I2C1设备之外。修改如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Scope (_SB.PCI0)
{
Device (I2C1)
{
Name (LINK, "\\_SB.PCI0.I2C1")
Method (_PSC, 0, NotSerialized) // _PSC: Power State Current
{
Return (GETD (SB11))
}

Method (_PS0, 0, NotSerialized) // _PS0: Power State 0
{
LPD0 (SB11)
}

Method (_PS3, 0, NotSerialized) // _PS3: Power State 3
{
LPD3 (SB11)
}
}
}

If (LNotEqual (SMD1, 0x02))
{
Scope (_SB.PCI0.I2C1)
{
Name (_HID, "INT3443") // _HID: Hardware ID
Method (_HRV, 0, NotSerialized) // _HRV: Hardware Revision
{
Return (LHRV (SB11))
}

Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings
{
Return (LCRS (SMD1, SB01, SIR1))
}

Method (_STA, 0, NotSerialized) // _STA: Status
{
Return (LSTA (SMD1))
}
}
}

If (LEqual (SMD1, 0x02))
{
Scope (_SB.PCI0.I2C1)
{
Name (_ADR, 0x00150001) // _ADR: Address
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
If (PCIC (Arg0))
{
Return (PCID (Arg0, Arg1, Arg2, Arg3))
}

Return (Buffer (One)
{
0x00
})
}
}
}

例二

1
2
3
4
5
6
7
Name (SBFB, ResourceTemplate ()
{
I2cSerialBusV2 (0x0020, ControllerInitiated, 0x00061A80,
AddressingMode7Bit, "\\_SB.PCI0.I2C0",
0x00, ResourceConsumer, _Y24, Exclusive,
)
})

使用ACPI 6编译时无错误,使用ACPI 4编译时出现以下错误。

1
22479, 4096, syntax error, unexpected PARSEOP_NAMESEG

由于ACPI 4不支持I2cSerialBus和I2cSerialBusV2,因此需要直接删除。

例三

1
2
3
4
5
6
7
Name (SBFI, ResourceTemplate ()
{
Interrupt (ResourceConsumer, Level, ActiveLow, ,, _Y2B)
{
0x00000000,
}
})

不可使用ACPI 4,需要使用ACPI 5。使用ACPI 5编译即无错误。

例四

1
2
3
4
5
6
7
8
9
Name (SBFG, ResourceTemplate ()
{
GpioInt (Level, ActiveLow, PullDefault, 0x0000,
"\\_SB.PCI0.GPI0", 0x00, ResourceConsumer, ,
)
{ // Pin list
0x0000
}
})

使用ACPI 5,更正如下。

1
2
3
4
5
6
7
8
9
Name (SBFG, ResourceTemplate ()
{
GpioInt (Level, ActiveLow, Exclusive, PullDefault, 0x0000,
"\\_SB.PCI0.GPI0", 0x00, ResourceConsumer, ,
)
{ // Pin list
0x0000
}
})

ACPIDebug

ACPIDebug可用于高级人员排错,也可记录部分按键轨迹。

驱动

ACPIDebug.kext下载链接如下。

1
https://bitbucket.org/RehabMan/os-x-acpi-debug/downloads/

下载后放入SLE中,用Kext Utility修复权限。

然后需要对DSDT进行修改。用MaciASL打开DSDT,点击Patch,在_OS-X-ACPI-Debug类别下打Add DSDT Debug MethodsInstrument EC Queries这两个补丁,退出并保存即可。

也可通过SSDT实现。放置以下SSDT即可。

SSDT-RMDT.aml如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
// for use with ACPIDebug
// This file was created by applying "Add DSDT Debug Methods" to an empty SSDT
//
// Use "Add SSDT Debug Extern Declarations" to access these methods from other
// hotpatch SSDTs or even patched OEM ACPI files.
//
DefinitionBlock("", "SSDT", 2, "OCLT", "RMDT", 0)
{
If (_OSI ("Darwin"))
{
Device (RMDT)
{
Name (_HID, "RMD0000") // _HID: Hardware ID
Name (RING, Package (0x0100){})
Mutex (RTMX, 0x00)
Name (HEAD, Zero)
Name (TAIL, Zero)
Method (PUSH, 1, NotSerialized)
{
Acquire (RTMX, 0xFFFF)
Local0 = (HEAD + One)
If ((Local0 >= SizeOf (RING)))
{
Local0 = Zero
}

If ((Local0 != TAIL))
{
RING [HEAD] = Arg0
HEAD = Local0
}

Release (RTMX)
Notify (RMDT, 0x80) // Status Change
}

Method (FTCH, 0, NotSerialized)
{
Acquire (RTMX, 0xFFFF)
Local0 = Zero
If ((HEAD != TAIL))
{
Local0 = DerefOf (RING [TAIL])
TAIL++
If ((TAIL >= SizeOf (RING)))
{
TAIL = Zero
}
}

Release (RTMX)
Return (Local0)
}

Method (COUN, 0, NotSerialized)
{
Acquire (RTMX, 0xFFFF)
Local0 = (HEAD - TAIL) /* \RMDT.TAIL */
If ((Local0 < Zero))
{
Local0 += SizeOf (RING)
}

Release (RTMX)
Return (Local0)
}

Method (P1, 1, NotSerialized)
{
PUSH (Arg0)
}

Method (P2, 2, NotSerialized)
{
Local0 = Package (0x02){}
Local0 [Zero] = Arg0
Local0 [One] = Arg1
PUSH (Local0)
}

Method (P3, 3, NotSerialized)
{
Local0 = Package (0x03){}
Local0 [Zero] = Arg0
Local0 [One] = Arg1
Local0 [0x02] = Arg2
PUSH (Local0)
}

Method (P4, 4, NotSerialized)
{
Local0 = Package (0x04){}
Local0 [Zero] = Arg0
Local0 [One] = Arg1
Local0 [0x02] = Arg2
Local0 [0x03] = Arg3
PUSH (Local0)
}

Method (P5, 5, NotSerialized)
{
Local0 = Package (0x05){}
Local0 [Zero] = Arg0
Local0 [One] = Arg1
Local0 [0x02] = Arg2
Local0 [0x03] = Arg3
Local0 [0x04] = Arg4
PUSH (Local0)
}

Method (P6, 6, NotSerialized)
{
Local0 = Package (0x06){}
Local0 [Zero] = Arg0
Local0 [One] = Arg1
Local0 [0x02] = Arg2
Local0 [0x03] = Arg3
Local0 [0x04] = Arg4
Local0 [0x05] = Arg5
PUSH (Local0)
}

Method (P7, 7, NotSerialized)
{
Local0 = Package (0x07){}
Local0 [Zero] = Arg0
Local0 [One] = Arg1
Local0 [0x02] = Arg2
Local0 [0x03] = Arg3
Local0 [0x04] = Arg4
Local0 [0x05] = Arg5
Local0 [0x06] = Arg6
PUSH (Local0)
}
}
}
}
//EOF

SSDT-TEST.aml,以Dell为例。注意需要重命名。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// In config ACPI, NEVT to XEVT
// Find: 4E 45 56 54 00
// Replace: 58 45 56 54 00
//
DefinitionBlock("", "SSDT", 2, "ACDT", "TEST", 0)
{
External(XEVT, MethodObj)
External(RMDT.P1, MethodObj)

Method (NEVT, 0, NotSerialized)
{
If (_OSI ("Darwin"))
{
\RMDT.P1("AAA001")
}
\XEVT()
}
}
//EOF

使用

重启后在Launchpad找到控制台,在搜索框输入ACPIDebug,然后按下键盘Fn+F5/F6。若控制台中出现信息,则ACPIDebug驱动成功。

Maciasl相关

版本区别

Rebabman版的Maciasl和原版的区别主要在于部分错误被改为了警告,具体如下。

1
2
3
4
5
6
7
8
9
10
'Illegal method invocation as target operand' (6126->3126)
'Illegal open scope on external object from within DSDT' (6148->3148)
'Min/Max/Length/Gran are all zero, but no resource tag' (6090->3090)
'Invalid combination of Length and Min/Max fixed flags' (6043->3043, one form only)
'Length is larger than Min/Max window' (6049->3049)
'Length is not equal to fixed Min/Max window' (6050->3050)
'Reserved name must be a control method (with zero arguments)' (6103->3103)
'invalid object type for reserved name' (6105->3105)
'Non-hex letters must be upper case' (6136->3136)
'Result is not used, operator has no effect' (6114->3114)

系统升级

以下均在Mojave的基础上进行。

基本知识

一般的小版本更新,如10.15.2升级10.15.3,可以直接在系统内升级。在「系统偏好设置」或「关于本机」中进去系统更新检查。当进度条走完后点击重启,在 Clover 引导界面会出现 Boot macOS install from xxxxx ,方向键选中并按空格,勾选 Verbose(-v) 和 nv_disable=1 后再启动。跑完日志和进度条后会开始升级、自动重启,如果重启后 Clover 中的 Boot macOS install from xxxxx 没有消失则重复上述操作(一般系统更新也需要二次安装)。升级成功后 Clover 引导界面下的 Boot macOS install from xxxxx 会消失。选择 Boot macOS install from xxxxx 进入系统即可。

Catalina

下载

在黑果小兵的部落阁下载即可。

在Mac下也可通过以下链接,通过App Store下载。

1
https://apps.apple.com/cn/app/macos-catalina/id1466841314?mt=12

也可通过以下链接。

1
2
链接 / https://cloud.189.cn/t/UFNFvauUVjua
提取码 / 5ckc

安装盘制作

若获得的是系统app安装包,则将其移动到应用程序文件夹后,可通过以下命令制作安装盘。注意MyVolume为USB磁盘名称。

1
sudo /Applications/Install\ macOS\ Catalina.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume

必要配置

配置EC

升级Catalina需要将EC控制器名称改为EC,否则系统启动崩溃。

对于台式机

如果为台式机,可直接禁用EC。

通过阻止AppleACPIEC

以OpenCore为例,在config.pilst中进入Kernel/Block,添加以下内容即可。

选项 内容
Enabled True
Indentifier com.apple.driver.AppleACPIEC
通过SSDT

可通过脚本自动添加。下载SSDTTime,解压后运行SSDTTime.command,选择Fake EC并拖拽DSDT文件以自动生成SSDT,放于引导器的ACPI部分即可。

也可手动添加。将以下代码复制到MaciASL中,将EC0改为对应的EC名称,另存为SSDT-no-EC.aml,放于引导器的ACPI部分即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
DefinitionBlock ("", "SSDT", 2, "ACDT", "SsdtnoEC", 0x00001000)
{
External (_SB.PCI0.LPCB, DeviceObj)
External (_SB.PCI0.LPCB.EC0, DeviceObj)

Scope (\_SB.PCI0.LPCB.EC0)
{
Method (_STA, 0, NotSerialized) // _STA: Status
{
If (_OSI ("Darwin"))
{
Return (0)
}
Else
{
Return (0x0F)
}
}
}
}
对于笔记本

由于笔记本有电池,不能禁用EC。

打开系统DSDT,搜索PNP0C09,查看对应的EC名称。若不止一个,则需要判断此EC是否被屏蔽,主要看其_STA方法是否存在Return (Zero),若存在,则说明此设备被禁用。如本机对应两个EC名称H_EC和EC0,但只有EC0未被屏蔽,则只需对EC0进行改名。

更名补丁示例如下,注意EC0需改成自己对应的EC设备名。

1
2
3
Comment: Rename EC0 to EC 
Find: 4543305F
Replace: 45435F5F

更新kexts

将要用到的kexts更新到最新版本。本机在未更新Lilu和Whatevergreen的情况下显卡出现GFX Firmware问题。

系统使用

解锁系统分区

Catalina的系统分区被锁定,无法直接修改系统盘内的文件。进行SLE路径的驱动安装等操作需要解锁。

通过终端
1
2
sudo su
sudo mount -uw / && killall Finder
通过自动执行脚本

打开系统的自动操作程序,选择应用程序-运行Shell脚本,修改Shell为/bin/bash并将以下脚本粘贴进去,保存为unlockSystem.app。

1
2
#! /bin/bash
echo '电脑密码' | sudo -S mount -uw / && killall Finder

打开偏好设置-用户与群组,在登录项中将unlockSystem.app添加到启动项并勾选隐藏即可。

通过plist

将以下内容保存为CatalinaAutoMountWritable.plist,并放在系统盘的Library/LaunchDaemons即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<false/>
<key>RunAtLoad</key>
<true/>
<key>LaunchOnlyOnce</key>
<true/>
<key>Label</key>
<string>CatalinaAutoMountWritable</string>
<key>ProgramArguments</key>
<array>
<string>/sbin/mount</string>
<string>-uw</string>
<string>/</string>
</array>
</dict>
</plist>

解锁Sidebar

部分机型不支持Sidebar,可通过修改机型或在终端输入以下命令解锁。

1
2
3
4
5
// 绕过SMBIOS限制
defaults write http://com.apple .sidecar.display allowAllDevices -bool YES

// 解锁系统首选项中Sidebar页
defaults write com.apple.sidecar.display hasShownPref -bool true

Big Sur

支持的SMBIOS如下。

1
2
3
4
5
6
7
iMac14,4及更新
MacPro6,1及更新
iMacPro1,1及更新
MacMini7,1及更新
MacBook8,1及更新
MacBookAir6,x及更新
MacBookPro11,x及更新

特性

即使关闭SIP,root用户依然无法挂载根目录为读写。这意味着直接修改System文件夹内的文件需要到Recovery模式下的终端修改。

因此,单用户模式下不能再加载launchd服务,也不能通过调用OpenDirectory服务修改root密码和管理员密码。

1
launchctl load /S*/L*/LaunchDaemons/com.apple.opendirectory.plist

launchctl在单用户模式加载的服务会自动停止运行,同时屏幕显示service only ran for 5 seconds,无法在单用户模式找回管理员密码。

同时,单用户模式中加载kext的kextload命令也失去了效果,被/usr/bin/kmutil接替,不允许绕过系统安全性设置来加载kext,这意味着root用户不能通过终端加载kext。

同时,AppleIntelInfo.kext已经无法用于获取当前CPU状态。

对于AirportBrcmFixup,可能需要使用brcmfx-driver=参数以强制加载驱动,如BCM94352Z用户可能需要使用brcmfx-driver=2。同时需要阻止AirPortBrcm4360_Injector.kext加载,可将其MaxKernel设置为19.9.9。

下载

在黑果小兵的部落阁下载即可。

在Mac下也可通过以下链接,通过App Store下载。

1
https://apps.apple.com/cn/app/macos-big-sur/id1526878132?mt=12

安装盘制作

若获得的是系统app安装包,则将其移动到应用程序文件夹后,可通过以下命令制作安装盘。注意MyVolume为USB磁盘名称。

1
sudo /Applications/Install\ macOS\ Big\ Sur.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume
【进阶】安装在旧版实体Mac机器上

支持Catalina的实体Mac中部分不支持Big Sur,但可以通过制作安装盘并修改安装盘必要内容的方式顺利安装。

对于Mac Mini 2012和其它支持Catalina的设备,可下载以下补丁并解压。

1
https://github.com/barrykn/big-sur-micropatcher

在终端以管理员身份运行micropatcher.sh,选择制作好的安装盘进行修补。如果找不到安装盘,在运行时可将安装盘路径附加到后面,如下。

1
./micropatcher.sh [安装盘路径,如/Volumes/ABC]

同理以管理员身份运行install-setvars.sh。对于2013年末的iMac,该脚本将启用SIP和ARV(Authenticated Root Volume,经过身份验证的根卷)。

注意,若希望显示详细日志,可在其后添加参数-v。若希望强制禁用SIP和ARV,可在其后添加参数-d。若希望强制启用,则可添加参数-e

修补完成后,将安装盘插入到Mac机器,重启并按住Option,然后选择安装盘即可。

若安装完成后出现panic,则按Command+Q,机器将重新启动。重新进入安装盘,打开终端并输入以下命令以安装WiFi补丁。

若希望尝试不同的WiFi补丁,可在脚本后添加参数–wifi=hv12v-old。若需要设置重写或不重写快照,可添加参数–create-snapshot或–no-create-snapshot。

1
2
3
4
5
6
7
# Image\ Volume为安装盘名称
# Macintosh\ HD为系统盘名称
# 用于普通Mac
/Volumes/Image\ Volume/patch-kexts.sh /Volumes/Macintosh\ HD

# 用于2010年或更旧的Mac(2009-2010Mac Pro除外)
/Volumes/Image\ Volume/patch-kexts.sh --2010 /Volumes/Macintosh\ HD

还可通过zap-snapshots.sh删除除最新快照外的所有快照,命令如下。

1
/Volumes/Image\ Volume/zap-snapshots.sh /Volumes/Macintosh\ HD

必要配置

除以下列出的项目外,其它与Catalina基本一致。

硬盘驱动

对于OpenCore引导,可能需要CtlnaAHCIPort,否则无法正常识别SATA硬盘。Clover引导不需要该kext。

建议将CtlnaAHCIPort.kext的MinKernel值设置为20.0.0,以避免任何潜在的冲突。

1
https://github.com/dortania/OpenCore-Install-Guide/blob/master/extra-files/CtlnaAHCIPort.kext.zip
【进阶】原因

Apple从AppleAHCIPort.kext中删除了AppleIntelPchSeriesAHCI类。

引导器修改

Big Sur需要Clover版本至少为5120,且需要使用OcQuirks作为内存管理驱动。

需要额外添加的启动参数如下。

1
2
// DW1820A/DW1560/DW1830等博通网卡可能还需要添加brcmfx-aspm
plugin-type=1 vsmcgen=1 -lilubetaall -vsmcbeta

安装重启后的第二阶段,如果直接从安装盘启动,会一直循环com.apple.xpc.launchd[1]。这时需要在CLOVER主引导界面按F3,选择Preboot以继续完成安装。

注意部分指南会指出不应使用NoTouchID.kext,但使用该kext能大大提升系统速度,因此还是推荐使用。

OpenCore基本与Clover一致。

系统使用

注意不要用Karbiner,不要开启Airdrop有线传输。

禁用SIP

对于OpenCore,打开config.plist,进入NVRAM-add-7C436110-AB2A-4BBB-A880-FE41995C9F82,并修改csr-active-config为FF0F0000,然后进入NVRAM-block-7C436110-AB2A-4BBB-A880-FE41995C9F82,添加csr-active-config一项。

然后进入系统恢复模式,输入以下命令后重启。

1
2
csrutil disable
csrutil authenticated-root disable

重建kexts缓存

Big Sur重建缓存的命令有所变化,如下。

1
2
3
4
sudo chown -R root:wheel ~/livemount/System/Library/Extensions/
sudo chmod -R 755 ~/livemount/System/Library/Extensions/
sudo kmutil install --volume-root ~/livemount --update-all
sudo kcditto

修改系统文件

Big Sur从快照启动,通过sudo mount -uw /挂载系统分区时会出现failed with 66的错误。

需要通过挂载系统分区,修改分区内容后新建系统分区快照,并指定启动时使用该快照,达到修改系统文件的目的。

注意,由于此方法会使快照的状态变为broken,所以只适用于OpenCore引导,并设置SecureBootModel为Disabled。若使用Clover引导或未设置SecureBootModel,则会启动到恢复模式。

确保禁用SIP后,打开终端并输入以下命令。

1
2
3
4
mkdir ~/livemount
diskutil list
// 查找系统分区,如disk1s5
sudo mount -o nobrowse -t apfs /dev/disk1s5 ~/livemount

前往用户目录,即可看到挂载的系统分区。在该目录下进行系统修改操作。完成后回到终端并输入以下命令,以创建新的快照。

1
sudo bless --folder ~/livemount/System/Library/CoreServices --bootefi --create-snapshot
其它方法

确保禁用SIP后,进入恢复模式,打开终端并输入以下命令。

1
2
3
4
5
6
7
8
9
10
11
12
diskutil list
// 查找系统分区,如disk1s5
diskutil mount disk1s5
ls -l /Volumes/
// 查找系统分区名称,如Samsung 1(因为挂载了快照,真正的系统分区后面会有一个1)
sudo mount -uw /Volumes/Samsung\ 1
sudo su
/System/Library/Filesystems/apfs.fs/Contents/Resources/apfs_systemsnapshot -v /Volumes/Samsung\ 1 -r""

diskutil apfs listSnapshots disk1s5
// 删除所有快照
diskutil apfs deleteSnapshot disk1s5 -uuid [UUID]

安装kext到SLE

确保禁用SIP后,打开终端并输入以下命令。

1
sudo kcditto

记录Volume Group UUID和Preboot disk。然后进入恢复模式,打开终端并输入以下命令。

1
2
3
4
diskutil mount /Volumes/[系统分区名称]
mount -uw /Volumes/[系统分区名称]
/System/Library/Filesystems/apfs.fs/Contents/Resources/apfs_systemsnapshot -s "Before" -v /Volumes/[系统分区名称]
cd /Volumes/[系统分区名称]

命令执行完成后可通过终端完成文件移动操作。以安装IO80211Family为例,命令如下。

1
2
3
cd /Volumes/[系统分区名称]/System/Library/Extension
mv IO80211Family.kext IO80211Family.kext.backup
cp -r /Volumes/[IO80211Family的位置]/IO80211Family.kext .

完成后需要重建内核缓存,命令如下。

1
kmutil install --update-all --volume-root /Volumes/[系统分区名称]

继续执行以下命令以新建快照。

1
2
/System/Library/Filesystems/apfs.fs/Contents/Resources/apfs_systemsnapshot -s "After" -v /Volumes/[系统分区名称]
/System/Library/Filesystems/apfs.fs/Contents/Resources/apfs_systemsnapshot -r "After" -v /Volumes/[系统分区名称]

然后需要将更新后的BootKernelExtensions复制到Preboot分区。输入以下命令。

1
2
3
4
5
6
7
8
diskutil mount /dev/[前面记录的Preboot disk]
cd /Volumes/Preboot
ls
// 确保存在以前面记录的Volume Group UUID为名的文件夹
cp -r [Volume Group UUID] [Volume Group UUID].bak
cd /Volumes/Preboot/[Volume Group UUID]/boot/System/Library/KernelCollections
cp /Volumes/[系统分区名称]/System/Library/KernelCollections/BootKernelExtensions.kc .
cp /Volumes/[系统分区名称]/System/Library/KernelCollections/BootKernelExtensions.kc.elides .

完成后重启即可。若失败,则进入恢复模式或引导到USB安装器,打开终端并输入以下命令,重启即可。

1
2
3
4
/System/Library/Filesystems/apfs.fs/Contents/Resources/apfs_systemsnapshot -r "Before" -v /Volumes/[系统分区名称]
cd /Volumes/Preboot
mv [Volume Group UUID] [Volume Group UUID].broken
cp -r [Volume Group UUID].bak [Volume Group UUID]

常用命令

重建内核缓存
1
kmutil install --update-all --volume-root /Volumes/[系统分区名称]

特殊安装方法

可通过VMWare在实体机上进行安装。需要本机同时安装有旧版Mac和Windows。

在Mac下打开磁盘工具,并分出一个新的APFS容器,建议分60G以上。打开VMWare Fusion并创建自定虚拟机,系统选择macOS的任意版本,选择新建虚拟磁盘。新建完成后调整内存大小,尽量调大以防止安装时卡住。

下载Paragon VMDK Mounter并激活,激活码如下。

1
VMDK-MOUNTER-2014-434979472,51537-43450-1B2D9-8213A

用Paragon VMDK Mounter打开新建的虚拟机,挂载刚创建的分区。若出现VDM API Error错误,则在系统偏好设置-安全性与隐私-通用中允许软件载入。

打开磁盘工具,将挂载好的VMDK外置磁盘格式化为macOS扩展(日志式),名称为Big Sur Installer。完成格式化后将Big Sur安装包复制到应用程序,然后打开终端并输入以下命令以将安装包写入VDMK磁盘。

1
sudo /Applications/Install\ macOS\ Big\ Sur\ Beta.app/Contents/Resources/createinstallmedia --volume /Volumes/Big\ Sur\ Installer

完成后在磁盘工具卸载VMDK磁盘,打开虚拟机检查是否能正常进入安装界面,若没有问题则直接关机。

将创建好的虚拟机复制到Windows,安装VMWare Workstation Pro并激活,双击虚拟机中的VMX文件以导入。打开VMX文件并添加以下内容,其中SMBIOS的应当用新的内容替换。

1
2
3
4
5
6
7
board-id.reflectHost = "FALSE"
board-id = "Mac-937A206F2EE63C01"
hw.model.reflectHost = "FALSE"
hw.model = "MacBookPro15,1"
serialNumber.reflectHost = "FALSE"
serialNumber = "D25XVQYDKGYG"
smbios.reflectHost = "FALSE"

打开VMWare macOS补丁Unblocker 302中的win-install,注意需要以管理员模式运行。进入VMWare Workstation Pro并选择刚才的虚拟机,点击编辑虚拟机设置,选择添加-硬盘-SATA-使用物理磁盘,设备选择之前在Mac下分出的APFS容器对应的设备,选择使用单个分区,然后根据分区大小选择对应的APFS容器。

开启虚拟机并完成安装,然后重启电脑即可通过OpenCore进入系统。

常见问题

启动过程

卡AppleACPICPU/x86Platform plugin

继续等待较长时间即可。在引导器的ACPI部分加入OC-little包X86注入部分的SSDT-PLUG即可修复。

卡Forcing CS_RUNTIME for entitlement

安装程序仍在运行,等待即可。

卡disk1s1 is locked

继续等待即可。

卡PCI Configuration Begins

一般出现在X99/X299主板,主要为RTC设备问题。可使用以下SSDT补丁解决。

1
https://github.com/acidanthera/OpenCorePkg/blob/master/Docs/AcpiSamples/Source/SSDT-RTC0-RANGE.dsl
卡ramrod(^^^^^^^^^^^^^)

SMC错误。更新最新的VirtualSMC和Lilu,并添加vsmcgen=1启动参数。若无效,可切换为Rehabman的FakeSMC。

卡waiting for root device

有可能是因为没有放VoodooI2C.kext,导致卡在IOUSBDevice。注意放置VoodooI2C.kext后,需要禁用其中的VoodooInput.kext.dYSM和VoodooInput.kext,因为VoodooI2C与VoodooPS2都有VoodooInput,两者会发生冲突。

出现Couldn’t alloc class “AppleIntelPchSeriesAHCI”

添加启动参数smcgen=1。

内核错误
Rooting from the live fs of a sealed volume is not allowed on a release build

修改系统快照导致。

对于OpenCore,更新至0.6.4或更新即可,也可通过设置SecretBootModel为Disabled以解决。对于Clover,由于无法设置SecretBootModel,需要恢复为未修改的快照。

注意,快照没有被破坏时,SecureBootModel可以设为Default。

可打开终端并输入以下命令以判断快照情况。若返回Snapshot Sealed为Yes,则未被修改。若为Broken,则快照被修改,可进入恢复模式,通过时间恢复机器回滚到以前的快照,或重新安装。

1
2
diskutil apfs list
Volume [disk number(disk1s8)] [UUID(A604D636-3C54-4CAA-9A31-5E1A460DC5C0)]
cannot perform kext scan

加载了多个VoodooInput。VoodooI2C和VoodooPS2都有VoodooInput,两者只能启用一个。

IOPCIFamily

一般出现在X79/X99主板,主要由于在ACPI中启用了未使用的非核心PCI桥接器导致。可使用以下SSDT补丁解决。

1
https://github.com/acidanthera/OpenCorePkg/blob/master/Docs/AcpiSamples/Source/SSDT-UNC.dsl
max_cpus_from_firmware not yet initialized

确保OpenCore版本为0.6.0以上,并启用AvoidRuntimeDefrag这一Quirk。

在配置文件的Kernel-Patch添加以下补丁可能会有用,注意需将BB804000000C3中的04替换为硬件支持的CPU线程数。

选项
Base _acpi_count_enabled_logical_processors
Count 1
Enabled True
Find
Identifier Kernel
Limit 0
Mask
MaxKernel
MinKernel 20.0.0
Replace B804000000C3
ReplaceMask
Skip 0

系统运行

设备属性注入失败

打开IORegistryExplorer并切换到对应设备,查看acpi-path属性是否存在。若不存在,则需要创建一个提供完整路径的SSDT,因为可能有一个未记录在ACPI表中的PCI桥接器。示例如下。

1
https://github.com/acidanthera/OpenCorePkg/blob/master/Docs/AcpiSamples/Source/SSDT-BRG0.dsl
基于HID的键盘/鼠标失效

在配置文件的Kernel-Patch添加以下补丁。

选项
Base _isSingleUser
Count 1
Enabled True
Find
Identifier com.apple.iokit.IOHIDFamily
Limit 0
Mask
MaxKernel
MinKernel 20.0.0
Replace B801000000C3
ReplaceMask
Skip 0
DRM视频解码黑屏

可尝试添加启动参数shikigva=80

状态栏卡顿

找不到wifi设备造成。使用USB网卡或无网卡时,需要删除WiFiAgent启动项,在终端运行以下命令即可。

1
2
3
mount -o rw /
cd /System/Library/LaunchAgents
sudo mv com.apple.wifi.WiFiAgent.plist ../LaunchAgentsIgnored
无法升级到更新的Big Sur版本

可能是Update Utility损坏,常见于Beta更新。在终端输入以下命令即可。

1
2
3
4
5
# Unenroll from beta catalog
sudo /System/Library/PrivateFrameworks/Seeding.framework/Resources/seedutil unenroll

# Enroll back in
sudo /System/Library/PrivateFrameworks/Seeding.framework/Resources/seedutil enroll DeveloperSeed

完成后可通过以下命令进行软件更新。

1
2
# List software updates via terminal
softwareupdate -l

若问题仍存在,可能是快照损坏。在终端输入以下命令以判断。

1
2
3
4
5
# List all APFS volumes
diskutil apfs list

# 替换为系统分区
Volume disk1s8 A604D636-3C54-4CAA-9A31-5E1A460DC5C0

若结果为Snapshot Sealed: Broken,则需要将OpenCore更新至0.6.4或更新,然后回滚系统快照。进入恢复模式后选择Restore From Time Machine Backup即可。

系统降级

以下均在Mojave的基础上进行。

注意Lilu及插件(包括VirtualSMC)需要Mountain Lion及更高版本才可运行。VirtualSMC需要Snow Leopard及更高版本,较低版本可使用FakeSMC。AppleALC需要Mountain Lion及更高版本才可运行,较低版本可使用VoodooHDA(10.6+)或VoodooHDA-FAT(10.5,32位CPU)。下载链接如下。

1
2
# VoodooHDA-FAT
https://github.com/khronokernel/Legacy-Kexts/blob/master/FAT/Zip/VoodooHDA.kext.zip

Snow Leopard及更低版本在使用OpenCore引导时需要启用RebuildAppleMemoryMap,以解决早期内核问题。Snow Leopard及更低版本仅支持iASL 4/5编译的DSDT/SSDT,不支持iASL 6。

High Sierra

下载

在黑果小兵的部落阁下载即可。此处使用10.13.6,使用10.13可能会出现OSInstall.mpkg似乎已缺失或已损坏的问题。

在Mac下也可通过以下链接,通过App Store下载。

1
https://apps.apple.com/cn/app/macos-high-sierra/id1246284741?mt=12

也可通过以下链接下载。

1
2
链接 / https://cloud.189.cn/t/2Iruua6B73Yj
提取码 / vc40

安装盘制作

若获得的是系统app安装包,则将其移动到应用程序文件夹后,可通过以下命令制作安装盘。注意MyVolume为USB磁盘名称。

1
sudo /Applications/Install\ macOS\ High\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume
【进阶】在Windows下制作的其它方法

也适用于Mojave。

下载以下内容并放置到名为SharedSupport的新建文件夹中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# High Sierra
# BaseSystem.dmg
https://swdist.apple.com/content/downloads/06/50/041-91758-A_M8T44LH2AW/b5r4og05fhbgatve4agwy4kgkzv07mdid9/BaseSystem.dmg

# BaseSystem.chunklist
https://swdist.apple.com/content/downloads/06/50/041-91758-A_M8T44LH2AW/b5r4og05fhbgatve4agwy4kgkzv07mdid9/BaseSystem.chunklist

# InstallInfo.plist
https://swdist.apple.com/content/downloads/06/50/041-91758-A_M8T44LH2AW/b5r4og05fhbgatve4agwy4kgkzv07mdid9/InstallInfo.plist

# InstallESDDmg.pkg
https://swdist.apple.com/content/downloads/06/50/041-91758-A_M8T44LH2AW/b5r4og05fhbgatve4agwy4kgkzv07mdid9/InstallESDDmg.pkg

# AppleDiagnostics.dmg
https://swdist.apple.com/content/downloads/06/50/041-91758-A_M8T44LH2AW/b5r4og05fhbgatve4agwy4kgkzv07mdid9/AppleDiagnostics.dmg

# AppleDiagnostics.chunklist
https://swdist.apple.com/content/downloads/06/50/041-91758-A_M8T44LH2AW/b5r4og05fhbgatve4agwy4kgkzv07mdid9/AppleDiagnostics.chunklist

# Mojave
# BaseSystem.dmg
https://swdist.apple.com/content/downloads/41/56/061-94403-A_5AM6QB8TGK/ijdhki76d4rw19t579eblaqc26ngzlhu1p/BaseSystem.dmg

# BaseSystem.chunklist
https://swdist.apple.com/content/downloads/41/56/061-94403-A_5AM6QB8TGK/ijdhki76d4rw19t579eblaqc26ngzlhu1p/BaseSystem.chunklist

# InstallInfo.plist
https://swdist.apple.com/content/downloads/41/56/061-94403-A_5AM6QB8TGK/ijdhki76d4rw19t579eblaqc26ngzlhu1p/InstallInfo.plist

# InstallESDDmg.pkg
https://swdist.apple.com/content/downloads/41/56/061-94403-A_5AM6QB8TGK/ijdhki76d4rw19t579eblaqc26ngzlhu1p/InstallESDDmg.pkg

# AppleDiagnostics.dmg
https://swdist.apple.com/content/downloads/41/56/061-94403-A_5AM6QB8TGK/ijdhki76d4rw19t579eblaqc26ngzlhu1p/AppleDiagnostics.dmg

# AppleDiagnostics.chunklist
https://swdist.apple.com/content/downloads/41/56/061-94403-A_5AM6QB8TGK/ijdhki76d4rw19t579eblaqc26ngzlhu1p/AppleDiagnostics.chunklist

下载完成后将InstallESDDmg.pkg重命名为InstallESD.dmg。用记事本打开InstallInfo.plist,删除InstallESD的chunklistURL和chunklistid键,同时将InstallESDDmg.pkg重命名为InstallESD.dmg。

打开BDU,选择用于制作安装盘的USB,点击Options,Source选择DL,将自动从网络下载最新版的Clover。Boot records选择Clover,分区格式选择FAT32-LBA,点击Refresh。

点击Tools-Extract HFS(HFS+) partition from DMG-files,选择BaseSystem.dmg,提取得到4.hfs。点击USB的第二个分区,选择Restore Partition,来源为刚才的4.hfs。

完成后通过Paragon Partition Manager Free将第二个分区的大小调整至足够大。然后打开TransMac,切换到刚才的HFS分区,进入Install macOS High Sierra.app/Contents,右侧点击Copy Here,来源选择刚才准备的SharedSupport文件夹。

若无法使用Paragon Partition Manager或TransMac,也可先尝试通过该USB引导。若成功进入安装程序,则可打开终端并通过以下命令复制必要的文件并开始安装。

1
2
3
4
5
6
7
# 复制文件
cd /
cp -R Install\ macOS\ High\ Sierra.app /Volumes/Macintosh\ HD/
cp -R /Volumes/DATA/SharedSupport /Volumes/Macintosh\ HD/Install\ macOS\ High\ Sierra.app/Contents/

# 启动安装
/Volumes/Macintosh\ HD/Install\ macOS\ High\ Sierra.app/Contents/Resources/startosinstall --volume /Volumes/Macintosh\ HD --converttoapfs NO --applicationpath /Volumes/Macintosh\ HD/Install\ macOS\ High\ Sierra.app

也可使用startosinstall.command脚本执行以上步骤,下载链接如下。解压后放置到安装盘根目录。

1
https://www.insanelymac.com/applications/core/interface/file/attachment.php?id=273769

在终端运行以下命令即可。

1
2
3
cd "/Volumes/Macintosh HD"
chmod +x startosinstall.command
./startosinstall.command

必要配置

时间设置

从U盘启动后,安装向导会提示安装包破损,其原因是苹果对安装包的签名已经过期。保持断网,在安装向导菜单栏点击实用工具-终端,输入以下命令即可。

1
date 0201010116

引导器修改

可使用原来的引导,将SMBIOS改为MacBook Pro14,2即可。注意csrconfig应为0x67。

驱动修补

无需任何修改。

Sierra

下载

在黑果小兵的部落阁下载即可。此处使用10.12.6,这是Whatevergreen支持的Kaby Lake架构下的最旧版本。

也可通过以下链接下载。

1
2
链接 / https://cloud.189.cn/t/BBJ3EnMvQZJr
提取码 / 9rhh

也可下载Apple官方镜像,如下。

1
http://updates-http.cdn-apple.com/2019/cert/061-39476-20191023-48f365f4-0015-4c41-9f44-39d3d2aca067/InstallOS.dmg

Apple官方镜像可能需要手动提取安装包。挂载dmg后,打开终端并输入以下命令。

1
2
3
4
5
6
7
cd ~/Desktop
mkdir MacInstall && cd MacInstall
xar -xf /Volumes/Install\ macOS/InstallOS.pkg
cd InstallOS.pkg
tar xvzf Payload
mv InstallESD.dmg Install\ macOS\ Sierra.app/Contents/SharedSupport/
mv Install\ macOS\ Sierra.app /Applications

安装盘制作

若获得的是系统app安装包,则将其移动到应用程序文件夹后,可通过以下命令制作安装盘。注意MyVolume为USB磁盘名称。

1
sudo /Applications/Install\ macOS\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume

必要配置

时间设置

在安装向导菜单栏点击实用工具-终端,输入以下命令即可。

1
date 100123452015

引导器修改

与High Sierra一致。

驱动修补

与High Sierra一致。

El Capitan

下载

10.11.6下载链接如下。

1
2
3
4
5
6
7
# 其它
https://sundryfiles.com/1LI3~i
https://sundryfiles.com/31KG~i
https://sundryfiles.com/1LI2~i

链接 / https://cloud.189.cn/t/ANVNv2mUfmMf
提取码 / mh5y

也可下载Apple官方镜像,如下。

1
http://updates-http.cdn-apple.com/2019/cert/061-41424-20191024-218af9ec-cf50-4516-9011-228c78eda3d2/InstallMacOSX.dmg

Apple官方镜像可能需要手动提取安装包。挂载dmg后,打开终端并输入以下命令。

1
2
3
4
5
6
7
cd ~/Desktop
mkdir MacInstall && cd MacInstall
xar -xf /Volumes/Install\ OS\ X/InstallMacOSX.pkg
cd InstallMacOSX.pkg
tar xvzf Payload
mv InstallESD.dmg Install\ OS\ X\ El\ Capitan.app/Contents/SharedSupport/
mv Install\ OS\ X\ El\ Capitan.app /Applications

安装盘制作

若获得的是系统app安装包,则将其移动到应用程序文件夹后,可通过以下命令制作安装盘。注意MyVolume为USB磁盘名称。

1
sudo /Applications/Install\ OS\ X\ El\ Capitan.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume --applicationpath /Applications/Install\ OS\ X\ El\ Capitan.app

引导器修改

使用Clover 3911。

设置FakeCPUID

每个系统都只能在特定架构的CPU下使用,系统会有对应的CPU白名单,在名单内的CPU才能被运行。对于Kaby Lake,El Capitan本身并不支持,因此启动时会出现卡一排+号,或卡AppleIntelCPU的问题。

通过设置FakeCPUID,可以在启动过程中骗过系统,从而顺利完成启动。注意系统启动完成后,通过Hackintool可以看到正确的CPU信息。对于El Capitan,可使用0406E3

若一时未能找到合适的CPUID,可在Clover引导页面进入Options-Binary Patching,勾选Support CPU,然后返回主界面进行引导。由于Clover引导的CPUID未必合适,因此可能会产生问题。

可通过查看安装包中的InstallESD.dmg/BaseSystem.dmg/System/Library/Extensions中含有架构缩写(如SL、KBL等)的kext,以判断该系统适用于哪些架构的CPU。

其它配置

勾选Kernel Pm、AppleRTC、XCPM、IntelCPUPM,csrconfig设置为0x67。

驱动修补

SATA支持

对于本机,El Capitan无法提供完整的SATA支持,从而导致启动时卡在DSMOS has arrived,且启动后无法识别SATA硬盘的问题。可通过在Clover中放置SATA-unsupported.kext修复。

键盘

不能使用最新版的VoodooPS2Controller,会卡在鼠标键盘解锁的页面。可以使用20161208的RehabMan版VoodooPS2Controller。

常见问题

登录时卡无敌风火轮

若已经出现该问题,则可重新进入一次设置向导以临时进入。Clover启动时添加引导参数-s以进入单用户模式,然后运行以下命令即可。

1
2
sbin/mount -uw
rm /var/db/.AppleSetupDone

也可在输入密码后,不要敲Enter键,而是单击输入框右侧的箭头按钮以临时进入系统。

设置自动登录即可从本质上避免此问题。也可打开终端,输入以下命令以解决。

1
2
3
su [用户名]
sudo find /private/var/folders | grep com.apple.LaunchServices | grep csstore
/private/var/folders/cd/someLongRandomNameHere/someFolderNumberHere/[上面出现的每一个.csstore文件]

Yosemite

下载

10.10.5下载链接如下。

1
2
3
4
5
6
7
# 其它
https://sundryfiles.com/2BK5~i
https://sundryfiles.com/2BK3~i
https://sundryfiles.com/2BK2~i

链接 / https://cloud.189.cn/t/zYFZnifm2iyq
提取码 / v0q0

也可下载Apple官方镜像,如下。

1
http://updates-http.cdn-apple.com/2019/cert/061-41343-20191023-02465f92-3ab5-4c92-bfe2-b725447a070d/InstallMacOSX.dmg

Apple官方镜像可能需要手动提取安装包。挂载dmg后,打开终端并输入以下命令。

1
2
3
4
5
6
7
cd ~/Desktop
mkdir MacInstall && cd MacInstall
xar -xf /Volumes/Install\ OS\ X/InstallMacOSX.pkg
cd InstallMacOSX.pkg
tar xvzf Payload
mv InstallESD.dmg Install\ OS\ X\ Yosemite.app/Contents/SharedSupport/
mv Install\ OS\ X\ Yosemite.app /Applications

安装盘制作

若获得的是系统app安装包,则将其移动到应用程序文件夹后,可通过以下命令制作安装盘。注意MyVolume为USB磁盘名称。

1
sudo /Applications/Install\ OS\ X\ Yosemite.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume --applicationpath /Applications/Install\ OS\ X\ Yosemite.app
【旧版】其它方法

在安装包上右键并点击显示包内容,双击Contents/SharedSupport/InstallESD.dmg以挂载。显示隐藏文件后挂载该镜像中的BaseSystem.dmg,挂载的磁盘将会显示为OS X Base System。

插入USB磁盘,打开磁盘工具,将OS X Base System磁盘恢复到USB磁盘。

【特殊】修改内核

对于Haswell,需要修改过的内核,链接如下。需复制到USB安装盘的/System/Library/Kernels。

1
https://www.dropbox.com/sh/dogcgje65kthyqy/AADhBj3_7Y5zxMlgrYe-mT25a

安装后需要替换系统盘中的内核。重新启动到安装程序,打开终端并输入以下命令。

1
2
# Hackintosh为系统盘名称
cp /System/Library/Kernels/kernel "/Volumes/Hacintosh/System/Library/Kernels/kernel"

必要配置

时间设置

在安装向导菜单栏点击实用工具-终端,输入以下命令即可。

1
date 100123452015

引导器修改

Clover使用4096。

设置FakeCPUID

可使用0306D0,以仿冒BroadWell。

其它配置

勾选Kernel Pm、AppleRTC、XCPM、IntelCPUPM,csrconfig设置为0x67。

驱动修补

USB

需要添加GenericUSBXHCI.kext以修补USB3驱动,且添加引导参数-gux_nomsi,否则在通过U盘启动时,由于无法找到启动盘,将卡在Still Waiting for root device。

注意,插入的设备在系统启动后无法热插拔。

常见问题

安装时卡one second remaining

原因是缺少TSplicedFont字体。通过以下链接下载字体包,放入USB安装盘的System/Library/Fonts即可。

1
https://www.google.com/get/noto/

Mavericks

下载

1
2
3
4
5
6
7
8
9
10
11
# 10.9.5
http://updates-http.cdn-apple.com/2019/cert/061-41343-20191023-02465f92-3ab5-4c92-bfe2-b725447a070d/InstallMacOSX.dmg

# 10.9.5
链接 / https://cloud.189.cn/t/VbAF3u3y6VB3
提取码 / to12


// 10.9
https://sundryfiles.com/2BKy~i
https://sundryfiles.com/3eM

安装盘制作

若获得的是系统app安装包,则将其移动到应用程序文件夹后,可通过以下命令制作安装盘。注意MyVolume为USB磁盘名称。

1
sudo /Applications/Install\ OS\ X\ Mavericks.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume --applicationpath /Applications/Install\ OS\ X\ Mavericks.app --nointeraction
【旧版】其它方法

与Yosemite相同。

【特殊】修改内核

对于Haswell,需要修改过的内核,链接如下。需复制到USB安装盘的根目录。

1
https://www.dropbox.com/sh/dogcgje65kthyqy/AADhBj3_7Y5zxMlgrYe-mT25a

安装后需要替换系统盘中的内核。重新启动到安装程序,打开终端并输入以下命令。

1
2
# Hackintosh为系统盘名称
cp /mach_kernel "/Volumes/Hacintosh/mach_kernel"

必要配置

时间设置

在安装向导菜单栏点击实用工具-终端,输入以下命令即可。

1
date 100123452014

引导器修改

Clover

Clover使用4096。

设置FakeCPUID

可使用0306C0,以仿冒HasWell。

其它配置

同Yosemite。

OpenCore

Mavericks的磁盘映像使用的是Apple分区方案(Apple Partitioning Scheme),需要OpenPartitionDxe驱动程序来进行DMG恢复和安装。可以将DmgLoading设置为Disabled,以在不加载DMG的情况下运行恢复功能,同时也避免了OpenPartitionDxe的需求。

缓存的内核映像通常不包括网络(IONetworkingFamily)或音频(IOAudioFamily)的家族驱动,这些家族驱动往往需要使用Force加载来注入。

Chameleon

Extra文件夹示例如下。

1
https://www.dropbox.com/s/8xw3bzol3xivqjh/Extra.zip

驱动修补

同Yosemite。

Mountain Lion

下载

1
2
3
4
5
6
7
8
9
10
11
// 速度较慢
https://thepiratebay.org/description.php?id=8922294
https://thepiratebay.org/description.php?id=8604586

// iATKOS
https://thepiratebay.org/description.php?id=7973176

// 10.8.5
https://sundryfiles.com/2BKv~i
https://sundryfiles.com/31KE
https://sundryfiles.com/2BJ7

安装盘制作

在系统app安装包上右键,点击显示包内容,进入Contents/Shared Support,双击InstallESD.dmg以挂载。打开磁盘工具,选择要设置为安装盘的USB,点击恢复,来源为刚才挂载的镜像Mac OS X Install ESD,等待完成即可。若报错,则可能需要禁用SIP。

如果为dmg镜像,也可直接双击挂载该镜像,并用该镜像恢复。

若无USB,可在硬盘上划分一块区域作为安装盘,在恢复时选择该分区即可。该方法可以摆脱USB的限制,如因USB 3.0未驱动而出现的Still Waiting for Root Device问题。

【特殊】修改内核

对于AMD CPU,需要修改过的内核,链接如下。

1
https://www.insanelymac.com/forum/topic/281450-mavericks-kernel-testing-on-amd-formerly-mountain-lion-kernel-testing-on-amd

必要配置

时间设置

在安装向导菜单栏点击实用工具-终端,输入以下命令即可。

1
date 020123452013

引导器修改

CLover和OpenCore同Mavericks。启动参数可能需要slide=0。

驱动修补

显卡

若使用HD 2500,可在变色龙的org.Chameleon.boot.plist添加以下内容。

1
2
<key>device-properties</key>
<string>7f0000000100000001000000730000000200000002010c00d041030a000000000101060000027fff04002c0000004100410050004c002c00690067002d0070006c006100740066006f0072006d002d00690064000000080000000b006601140000006800640061002d0067006600780000000d0000006f6e626f6172642d31</string>

若使用ATI 5000/6000控制器,需要使用ATIConnectors patch。

Lion

下载

尽量使用10.7.5。该版本前的SLE中的IOUSBFamily没有AppleUSBXHCI,因此GenericUSBXHCI无法工作,USB3不受支持。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 10.7.5
https://sundryfiles.com/IO
https://sundryfiles.com/31KT~i
https://sundryfiles.com/2BK0~i
https://sundryfiles.com/2BK1~i
https://www.malavida.com/en/soft/lion/mac/download
https://allmacworld.com/mac-os-x-lion-10-7-5-dmg-free-download/
https://justapplestuff.com/mac-os-x-lion-download/
https://pan.baidu.com/s/1dDEdXa5
https://igetintopc.com/mac-os-x-lion-10-7-5-dmg-free-download/

# 10.7
https://sundryfiles.com/1LI1
https://sundryfiles.com/31KH
https://sundryfiles.com/1LI0~i

# 其它
https://thepiratebay.org/description.php?id=6554150
https://thepiratebay.org/description.php?id=6688033
https://thepiratebay.org/description.php?id=7056418

# 速度较慢
https://thepiratebay.org/description.php?id=6200584
https://thepiratebay.org/description.php?id=6555402

安装盘制作

同Mountain Lion。

引导器修改

Clover

Clover使用4096。

设置FakeCPUID

可使用0206F0,以仿冒WestmereFx。

其它配置

勾选Kernel Pm、AppleRTC、XCPM、IntelCPUPM,csrconfig设置为0x67。

OpenCore

同Mavericks。

驱动修补

包括Lilu(使用32位内核时)及其插件在内的许多Kext在Lion或更低版本上都不支持,它们所需的内核API比较新,不在SDK之中。

Lion及更早系统不支持KASLR slide,因此会导致内存较低的固件分配内存失败。

显卡

若使用ATI 5000/6000控制器,需要使用ATIConnectors patch。

系统使用

显示隐藏文件

打开终端并输入以下命令即可。

1
2
defaults write com.apple.finder AppleShowAllFiles TRUE
killall Finder

常见问题

啰嗦模式

卡在MBR Start!

在BIOS关闭串行端口。

系统运行

出现「您的电脑尚未连接任何键盘,现在,请连接您的键盘」错误

删除/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/DeviceSection.bundle即可。

Snow Leopard

下载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 10.6.7 Acidanthera版(删除SMBIOS锁)
https://archive.org/details/10.6.7-10j3250-disk-images
https://mega.nz/folder/z5YUhYTb#gA_IRY5KMuYpnNCg7kR3ug/file/ioQkTagI

# 10.6.7
https://drive.google.com/drive/folders/0B661P9Kp9bPAdUViMVFYRW9KWFE

# 10.6.3
https://sundryfiles.com/1LI6~i
https://sundryfiles.com/3eO
http://shortconnect.com//81

# 其它
https://macintoshgarden.org/apps/apple-osx-snow-leopard
https://lu9-my.sharepoint.com/personal/barneys_5tb_in/_layouts/15/onedrive.aspx?originalPath=aHR0cHM6Ly9sdTktbXkuc2hhcmVwb2ludC5jb20vOnU6L2cvcGVyc29uYWwvYmFybmV5c181dGJfaW4vRVdTcFpSUXRvZ2hPbkVlYkQtQzBGdWdCVkhvbjRSVkxsYTgzcDRqYnc2eU11UT9ydGltZT1nNVd0RFh5aDJFZw&id=%2Fpersonal%2Fbarneys%5F5tb%5Fin%2FDocuments%2FMac%20OS%20Snow%20Leopard
https://thepiratebay.org/description.php?id=5068890
https://thepiratebay.org/description.php?id=6106470
https://thepiratebay.org/description.php?id=6407331

安装盘制作

同Mountain Lion。也可在终端输入以下命令以制作。

1
2
3
# /Volumes/Mac\ OS\ X\ Install\ DVD为挂载的磁盘
# /Volumes/MyVolume为需要制作的USB设备路径
sudo asr restore -source /Volumes/Mac\ OS\ X\ Install\ DVD -target /Volumes/MyVolume -erase -noverify
【进阶】在Lion上安装Snow Leopard

仅适用于BIOS引导。

挂载安装包后,切换到/Volumes/Mac OS X Install DVD/System/Installation/Packages,打开OSInstall.mpkg,安装目标选择要安装Snow Leopard的GUID磁盘。

若需要为MBR引导,可先用Flat Package Editor打开OSInstall.mpkg,打开Distribution并删除以下字段,然后保存。

1
2
3
eraseOptionAvailable='true'
hostArchitectures='i386'
allow-external-scripts='yes'

工具下载地址如下。

1
http://www.mediafire.com/file/mzomjodmkmm/SL_Files.zip/file

安装完成后需要安装Chameleon引导。下载以下文件后打开Apps-PC EFI 10.1,安装目标选择安装Snow Leopard的磁盘。

1
http://www.lookass.ch/?id=4&area=art&art=248

完成后打开安装磁盘,删除boot文件夹,并将下载文件中的boot和Extra复制到磁盘根目录。若无P55M-UD2主板,则需要删除Extra/Extensions目录下的LegacyHDA_ALC888B.kext。若无GA-P55M-UD2主板,则需要删除Extra目录下的Extensions.mkext。若为GA-P55M-UD2主板,则需要放置DSDT.aml。

完成后重启即可。

引导器修改

Clover

设置FakeCPUID

可使用0206A0,以仿冒SandyBridge。

启动参数

由于系统默认启动32位内核,因此需要启动参数arch=x86_64以强制使用64位内核。

设置SMBIOS

SMBIOS应设置为MacBookPro8,1/MacBookPro8,2/MacBookPro8,3。

其它

对于OpenCore,需要在Snow Leopard及更早版本上启用RebuildAppleMemoryMap。

OpenCore

同Lion。

可通过LegacyCommpage这一Quirk解除64位用户空间内核的SSSE3要求。

驱动修补

需要FakeSMC.kext、AppleACPIPS2Nub.kext、ApplePS2Controller.kext、VoodooHDA.kext、LegacyT60p.kext。

对于声卡,可能需要AppleAzaliaAudio.kext或AppleHDA.kext。

显卡

对于使用ATI Radeon X1650的用户,该显卡的DeviceID不太平常,为0x71cd。需要使用ATIRadeonX1000.kext,且添加以下patch。

1
2
3
4
5
6
7
8
<dict>
<key>Name</key>
<string>ATIRadeonX1000</string>
<key>Find</key>
<string>81fa87710000</string>
<key>Replace</key>
<string>81facd710000</string>
</dict>

USB

由于SLE中的IOUSBFamily没有AppleUSBXHCI,只有AppleUSBEHCI,因此仅支持USB2,不支持USB3。

虚拟机安装

VirtualBox

创建新虚拟机,系统类型为BSD-FreeBSD,在System-Motherboard勾选Enable IO APIC,System-Acceleration勾选Enable VT-x/AMD-V,Storage-IDE Controller选择ICH6,CPU选择2核或4核,并挂载下载好的安装ISO镜像。

创建完成后切换到虚拟机所在目录并编辑XML文件,添加以下内容到<ExtraData>部分。

1
2
<ExtraDataItem name="VBoxInternal/Devices/e1000f/0/Trusted" value="integer:1"/>
<ExtraDataItem name="VBoxInternal/PDM/Devices/PcExt/Path" value="VBoxDD3"/>

常见问题

啰嗦模式

卡在panic: “Unable to find driver for this platform: "ACPI"

具体消息如下。

1
panic(cpu caller 0xffffff801ead78f4): "Unable to find driver for this platform: \"ACPI\".\n"@/Library/Caches/com.apple.xbs/Sources/xnu/xnu-3789.51.2/iokit/Kernel/IOPlatformExpert.cpp:1672

com.apple.driver.AppleACPIPlatform引发的内核崩溃代表了DSDT.aml的错误。事实上,Snow Leopard及以前的系统只支持iASL 4.0或5.0编译的DSDT与SSDT,iASL 6.0及更新的版本并不支持。可通过在MaciASL中点击偏好设置,选择编译器为iASL 4.0即可。修改编译器后出现错误的解决方法可看ACPI一章。

卡在panic: AppleIntelCPUManagement

可以尝试使用Nullpowermanagement。若无效,则删除SLE下的AppleIntelCPUManagement。

卡在PCI configuation begin

在启动时可查看打印出的线程数。若与现实不符,如四核八线程的CPU打印出了16个线程,则可能是系统启动时找到了另一个虚构的CPU。此时添加启动参数cpus=1即可。

卡在panic: kernel trap

尝试使用OpenCore引导,注意需要设置EnableWriteUnprotector为True,RebuildAppleMemoryMap为false。

卡在BSD Process name corresponding to current thread: kernel_task/BSD Process name corresponding to current thread: unknown

放入ACPI补丁,可使用IOATAFamily.kext。IOATAFamily.kext包括了以下kexts。

名称 说明
AppleIntelPIIXATA Intel免AHCI补丁
AppleATIATA AMD免AHCI补丁
AppleATIPATA AMD免AHCI补丁
AppleNForceATA NForce免AHCI补丁
AppleVIAATA VIA免AHCI补丁
AppleVIAATA.kext.for.sis.SATA SIS免AHCI补丁
JMicronATA JMicron免AHCI补丁

系统运行

鼠标不起作用

可尝试VBVMMDevice.kext。

1
http://www.mediafire.com/file/c1mzumynm3w/VBVMMDevice.kext.zip/file

Leopard

不支持x86_64内核,需要i386内核扩展和补丁。

prelinkedkernel Kext无法被OpenCore注入。Mkext Kext的注入仍然正常,也不会有明显的性能消耗。

下载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 10.5.7 Acidanthera版(删除了SMBIOS锁)
https://archive.org/details/10.5.7-9-j-3050
https://mega.nz/folder/inRBTarD#zanf7fUbviwz3WHBU5xpCg

# 10.5.6
https://sundryfiles.com/sD
https://www.shortconnect.com/84
http://macintoshgarden.org/sites/macintoshgarden.org/files/apps/Mac_OS_X_Leopard_10.5.6.iso
ftp://macgarden:publicdl@repo1.macintoshgarden.org/Garden/apps/Mac_OS_X_Leopard_10.5.6.iso
http://mirror.macintosharchive.org/macintoshgarden.org/files/apps/Mac_OS_X_Leopard_10.5.6.iso
http://old.macintosh.garden/apps/Mac_OS_X_Leopard_10.5.6.iso

# 10.5.6 iPC版
https://thepiratebay.org/description.php?id=4608978
magnet:?xt=urn:btih:E09F09BE2CF14BC8889DEB22139CA9615D735900
http://ipcosx86.wikidot.com/

# 10.5.4
http://macintoshgarden.org/sites/macintoshgarden.org/files/apps/Leopard_10_5_4.dmg__0.zip
ftp://macgarden:publicdl@repo1.macintoshgarden.org/Garden/apps/Leopard_10_5_4.dmg__0.zip
http://mirror.macintosharchive.org/macintoshgarden.org/files/apps/Leopard_10_5_4.dmg__0.zip
http://old.macintosh.garden/apps/Leopard_10_5_4.dmg__0.zip
https://mega.co.nz/#!DQQynArA!fYuxBw3m3sN082Xpuj6U7y9He-B9YWwQjPy6sZm2k-Y

# 10.5.2 Kalyway版
https://archive.org/details/Kalyway10.5.2DVDIntelAmd
https://macintoshgarden.org/apps/kalyway-1052-intel-and-amd
https://www.insanelymac.com/forum/topic/77069-kalyway-1051-dvd-release-the-official/

# 10.5
https://sundryfiles.com/J2
https://thepiratebay.org/description.php?id=4179024

驱动修补

即使是在64位CPU上,系统内核空间仍然是32位。若使用OpenCore引导,可将FakeSMC-32与VirtualSMC结合使用,且将FakeSMC-32的Archentry设置为i386,VirtualSMC的entry设置为x86_64。

USB

由于SLE中的IOUSBFamily没有AppleUSBXHCI,只有AppleUSBEHCI,因此仅支持USB2,不支持USB3。

专用Kexts

AppleACPIPS2NUB

有可能解决Panic (cpu 0 caller 0x…..) Unable to find driver for this platform :\ACPI".\n”@/SourceCache/xnu/xnu-1456.1.25/iokit /Kernel/IOPlatformExpert.cpp:1389的问题。

1
https://www.insanelymac.com/forum/topic/114578-appleacpips2nub-for-leopard-only/

虚拟机安装

VMware

以Jas 10.5.2发行版为例。

在Vmware新建虚拟机,其中硬盘类型为IDE,硬盘大小为6G或以上,系统类型为其他-FreeBSD/FreeBSD64,内存为512MB或以上。

新建完成后编辑虚拟机设置,在处理器选项卡中勾选虚拟化Intel VT-x/EPT或AMD-V/RVI,在硬盘-高级勾选独立并选择永久,在网络适配器选择仅主机模式以防止在安装过程中无法注册。

启动虚拟机后按F8,选择ISO安装盘并填写启动参数-v -x cpus=1,开始安装。安装前组件选择如下,错误选择将会造成CPU has been disabled,或中途无故卡死。

组件 是否选择
Jas 10.5.2 Intel.sse2 sse3
Leopard Graphics Update
Patched Driver 全选
PlugIns 全选
Device Identification 全选
Kernel
Darwin x/86 Bootloader -
PC EFI GIUD -
PC EFI MBR
Post Install Optimization

安装完成后仍需要从ISO启动,按F8并选择安装好的硬盘以进入系统。

VirtualBox

创建新虚拟机,系统类型为BSD-FreeBSD,在System-Motherboard勾选Enable IO APIC,System-Acceleration勾选Enable VT-x/AMD-V,Storage-IDE Controller选择ICH6,CPU选择2核或4核,并挂载下载好的安装ISO镜像。

创建完成后切换到虚拟机所在目录并编辑XML文件,添加以下内容到<ExtraData>部分。

1
<ExtraDataItem name="VBoxInternal2/SupportExtHwProfile" value="on"/>

常见问题

啰嗦模式

显示OsxAptioFixDrv: requested memory exceeds our allocated relocation block

换用OsxAptioFixDrv2即可。

卡在panic: Unsupported CPU

在Clover的配置文件中勾选IntelCPUPMKernel即可。

重启出现b0 error

将启动硬盘设置为激活分区。通过DOS版的DiskGenius即可。

Tiger

不支持x86_64内核,需要i386内核扩展和补丁。

prelinkedkernel Kext无法被OpenCore注入。Mkext Kext的注入仍然正常,也不会有明显的性能消耗。

这个版本需要两张光盘或两个USB安装介质来访问第二张DVD盘安装介质上的所有可选包。

下载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# 10.4.8 Acidanthera版(删除了SMBIOS锁)
https://archive.org/details/10.4.10-8-r-4088-acdt
https://mega.nz/folder/D3ASzLzA#7sjYXE2X09f6aGjol_C7dg

# 原版
https://sundryfiles.com/2BKz~i
https://sundryfiles.com/4px
http://macbold.com/wp-content/uploads/2018/10/Mac-OS-X-Tiger-Retail-DVD-ISO.torrent.zip
https://macbold.com/mac-os-x-10-4-tiger-retail-dvd-dmg-iso-torrent-download/

# 10.4.8 Jas发行版
https://thepiratebay.org/description.php?id=3924157
https://archive.org/details/mac-os-x-tiger-10-4-8-hackintosh-jas
https://archive.org/details/mac-os-x-10.4.8-ja-s-amd-intel-sse-2-sse-3-with-ppf-1-ppf-2
https://github.com/akineechan/MacOSX-T42

# Tiger_CD1.toast_.zip
http://macintoshgarden.org/sites/macintoshgarden.org/files/apps/Tiger_CD1.toast_.zip
ftp://macgarden:publicdl@repo1.macintoshgarden.org/Garden/apps/Tiger_CD1.toast_.zip
http://mirror.macintosharchive.org/macintoshgarden.org/files/apps/Tiger_CD1.toast_.zip
http://old.macintosh.garden/apps/Tiger_CD1.toast_.zip

# Tiger_CD2.toast_.zip
http://macintoshgarden.org/sites/macintoshgarden.org/files/apps/Tiger_CD2.toast_.zip
ftp://macgarden:publicdl@repo1.macintoshgarden.org/Garden/apps/Tiger_CD2.toast_.zip
http://mirror.macintosharchive.org/macintoshgarden.org/files/apps/Tiger_CD2.toast_.zip
http://old.macintosh.garden/apps/Tiger_CD2.toast_.zip

# Tiger_CD3.toast_.zip
http://macintoshgarden.org/sites/macintoshgarden.org/files/apps/Tiger_CD3.toast_.zip
ftp://macgarden:publicdl@repo1.macintoshgarden.org/Garden/apps/Tiger_CD3.toast_.zip
http://mirror.macintosharchive.org/macintoshgarden.org/files/apps/Tiger_CD3.toast_.zip
http://mirror.macintosharchive.org/macintoshgarden.org/files/apps/Tiger_CD3.toast_.zip

# Tiger_CD4.toast_.zip
http://macintoshgarden.org/sites/macintoshgarden.org/files/apps/Tiger_CD4.toast_.zip
ftp://macgarden:publicdl@repo1.macintoshgarden.org/Garden/apps/Tiger_CD4.toast_.zip
http://mirror.macintosharchive.org/macintoshgarden.org/files/apps/Tiger_CD4.toast_.zip
http://old.macintosh.garden/apps/Tiger_CD4.toast_.zip





# Tiger_4_6.dmg_.zip
http://macintoshgarden.org/sites/macintoshgarden.org/files/apps/Tiger_4_6.dmg__0.zip
ftp://macgarden:publicdl@repo1.macintoshgarden.org/Garden/apps/Tiger_4_6.dmg__0.zip
http://mirror.macintosharchive.org/macintoshgarden.org/files/apps/Tiger_4_6.dmg__0.zip
http://old.macintosh.garden/apps/Tiger_4_6.dmg__0.zip
https://mega.co.nz/#!7BwTwKoZ!B2F-kddHr-HB0kzuwgDt7ui8oIaboMokb0wJdoT1cLs

驱动修补

即使是在64位CPU上,系统内核空间仍然是32位。若使用OpenCore引导,可将FakeSMC-32与VirtualSMC结合使用,且将FakeSMC-32的Archentry设置为i386,VirtualSMC的entry设置为x86_64。

虚拟机安装

以Jas 10.4.8发行版为例。

在Vmware新建虚拟机,配置与Leopard基本一致。完成后定位到虚拟机文件位置,打开配置文件并添加以下内容,保存后启动虚拟机。注意不要在Vmware界面中修改虚拟机配置,否则以下更改会丢失。

1
2
3
4
5
6
7
8
paevm="true"
ethernet0.virtualDev="e1000"

# 仅用于加速,非必须
guestOS="darwin"

# 正常情况无需修改以下行
scsi0.present="FALSE"

常见问题

系统运行

Reset问题

用16进制编辑软件编辑mach_kernel文件,将EBFE9090替换为B0FEE664即可。

SATA硬盘无法装载,提示AppleVIAATA.kext装载失败

打开终端并输入以下命令即可。

1
2
3
4
5
6
sudo -s
cd /System/Library/Extensions
chown -R root:wheel AppleVIAATA.kext
chmod -R 755 AppleVIAATA.kext
kextload -v AppleVIAATA.kext
kextcache -k /System/Library/Extensions

旧版系统

以下旧版系统不支持Intel CPU,需要模拟其它CPU的架构,因此只可在虚拟机中使用。

现成虚拟机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# System 8
https://github.com/felixrieseberg/macintosh.js

# System 7.5.3
https://jamesfriend.com.au/projects/basiliskii/BasiliskII-worker.html

# System 7.0.1
https://yksoft1.github.io/emularity/minivmac/mvmac-os70.html
https://yksoft1.github.io/emularity/minivmac/mvmac2-os70.html
https://yksoft1.github.io/emularity/minivmac/mvmac-os70x.html
https://yksoft1.github.io/emularity/minivmac/mvmac2-os70x.html
http://jamesfriend.com.au/pce-js/
https://jamesfriend.com.au/pce-js/pce-js-apps/

# System 6.0.8
https://jamesfriend.com.au/pce-js/system6/

# System 6.0.7
https://yksoft1.github.io/emularity/minivmac/mvmac-os6.html
https://yksoft1.github.io/emularity/minivmac/mvmac2-os6.html
https://yksoft1.github.io/emularity/minivmac/mvmac-os6x.html
https://yksoft1.github.io/emularity/minivmac/mvmac2-os6x.html

# System 1.1
https://jamesfriend.com.au/pce-js/mobile/

虚拟机安装

安装文件下载

ROM

用于模拟机型。ROM映像通过读取安装在Macintosh中的集成电路的内容来创建,包含了设备的以及来自Apple的版权数据。

打开以下链接下载ROM,选择Old_World_Mac_Roms.zip。

1
2
3
4
5
https://www.macintoshrepository.org/7038-all-macintosh-roms-68k-ppc-

# 或以下链接,为以上内容的克隆
https://github.com/sentient06/MacROMan/tree/master/TestImages
https://archive.org/details/mac_rom_archive_-_as_of_8-19-2011

也可选用以下特定ROM。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Old World 4mb
https://www.redundantrobot.com/sheepshaver_files/roms/mac_oldworld_rom4mb.rom.zip

# New World PPC
# 适用于SheepShaver
https://www.redundantrobot.com/sheepshaver_files/roms/newworld86.rom.zip

# Apple II
https://www.redundantrobot.com/sheepshaver_files/roms/Apple2e.zip

# Performa
# 适用于Basilisk II
https://www.redundantrobot.com/sheepshaver_files/roms/1mbMacrom.zip

# Quadra 650
https://www.redundantrobot.com/sheepshaver_files/roms/Quad650.zip

# Quadra 900
https://www.redundantrobot.com/sheepshaver_files/roms/Quadra.zip

# Mac Classic
https://www.redundantrobot.com/sheepshaver_files/roms/vmac.rom.zip
【进阶】从Basilisk II提取SheepShaver适用的ROM

Basilisk II需要安装Stuffit Expander。下载TomeViewer,链接如下。TomeViewer适用于System 7.1及更高版本。

1
https://www.emaculation.com/sheepshaver/tomeviewer.sit

可从以下两个文件之一提取SheepShaver ROM,适用于在SheepShaver启动MacOS 8.5-9.0.4。

1
2
3
4
5
# Mac OS Rom Update 1.0
https://www.emaculation.com/sheepshaver/Mac_OS_ROM_Update_1.0.smi.bin

# iMac Update 1.1
https://www.emaculation.com/sheepshaver/iMac_Update_1.1.smi.bin

启用文件共享,在MacOS中打开以上两个文件之一,然后打开TomeViewer,点击File-Open,选择刚才挂载的磁盘。软件将提取ROM文件,点击蓝色图标保存即可。

安装盘

用于安装系统。

Panther
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
https://winworldpc.com/product/mac-os-x/103

# Panther_CD1.toast_.zip
http://macintoshgarden.org/sites/macintoshgarden.org/files/apps/Panther_CD1.toast_.zip
ftp://macgarden:publicdl@repo1.macintoshgarden.org/Garden/apps/Panther_CD1.toast_.zip
http://mirror.macintosharchive.org/macintoshgarden.org/files/apps/Panther_CD1.toast_.zip
http://old.macintosh.garden/apps/Panther_CD1.toast_.zip

# Panther_CD2.toast_.zip
http://macintoshgarden.org/sites/macintoshgarden.org/files/apps/Panther_CD2.toast_.zip
ftp://macgarden:publicdl@repo1.macintoshgarden.org/Garden/apps/Panther_CD2.toast_.zip
http://mirror.macintosharchive.org/macintoshgarden.org/files/apps/Panther_CD2.toast_.zip
http://old.macintosh.garden/apps/Panther_CD2.toast_.zip

# Panther_CD3.toast_.zip
http://macintoshgarden.org/sites/macintoshgarden.org/files/apps/Panther_CD3.toast__0.zip
ftp://macgarden:publicdl@repo1.macintoshgarden.org/Garden/apps/Panther_CD3.toast__0.zip
http://mirror.macintosharchive.org/macintoshgarden.org/files/apps/Panther_CD3.toast__0.zip
http://old.macintosh.garden/apps/Panther_CD3.toast__0.zip

# Panther 10.3 - Apple Internal Edition DVD
http://macintoshgarden.org/sites/macintoshgarden.org/files/apps/pantherappleint.cdr_.zip
ftp://macgarden:publicdl@repo1.macintoshgarden.org/Garden/apps/pantherappleint.cdr_.zip
http://mirror.macintosharchive.org/macintoshgarden.org/files/apps/pantherappleint.cdr_.zip
http://old.macintosh.garden/apps/pantherappleint.cdr_.zip

# Panther 10.3.2 - CD 691-4822-A & 691-4823-A
http://macintoshgarden.org/sites/macintoshgarden.org/files/apps/691-4822-A_691-4823-A.zip
ftp://macgarden:publicdl@repo1.macintoshgarden.org/Garden/apps/691-4822-A_691-4823-A.zip
http://mirror.macintosharchive.org/macintoshgarden.org/files/apps/691-4822-A_691-4823-A.zip
http://old.macintosh.garden/apps/691-4822-A_691-4823-A.zip
Jaguar
1
2
3
4
5
6
7
8
9
10
11
12
13
https://winworldpc.com/product/mac-os-x/102

# Jaguar_CD1.toast_.sit
http://macintoshgarden.org/sites/macintoshgarden.org/files/apps/Jaguar_CD1.toast_.sit
ftp://macgarden:publicdl@repo1.macintoshgarden.org/Garden/apps/Jaguar_CD1.toast_.sit
http://mirror.macintosharchive.org/macintoshgarden.org/files/apps/Jaguar_CD1.toast_.sit
http://old.macintosh.garden/apps/Jaguar_CD1.toast_.sit

# Jaguar_CD2.toast_.sit
http://macintoshgarden.org/sites/macintoshgarden.org/files/apps/Jaguar_CD2.toast_.sit
ftp://macgarden:publicdl@repo1.macintoshgarden.org/Garden/apps/Jaguar_CD2.toast_.sit
http://mirror.macintosharchive.org/macintoshgarden.org/files/apps/Jaguar_CD2.toast_.sit
http://old.macintosh.garden/apps/Jaguar_CD2.toast_.sit
Puma
1
2
3
4
5
6
7
8
9
10
11
12
13
https://winworldpc.com/product/mac-os-x/101

# 10.1.3
http://macintoshgarden.org/sites/macintoshgarden.org/files/apps/Mac_OSX_10_1_3.toast_.sit
ftp://macgarden:publicdl@repo1.macintoshgarden.org/Garden/apps/Mac_OSX_10_1_3.toast_.sit
http://mirror.macintosharchive.org/macintoshgarden.org/files/apps/Mac_OSX_10_1_3.toast_.sit
http://old.macintosh.garden/apps/Mac_OSX_10_1_3.toast_.sit

# 10.1
http://macintoshgarden.org/sites/macintoshgarden.org/files/apps/MacOS_10_1.toast__0.sit
ftp://macgarden:publicdl@repo1.macintoshgarden.org/Garden/apps/MacOS_10_1.toast__0.sit
http://mirror.macintosharchive.org/macintoshgarden.org/files/apps/MacOS_10_1.toast__0.sit
http://old.macintosh.garden/apps/MacOS_10_1.toast__0.sit
Cheetah
1
2
3
4
5
6
7
8
9
10
11
12
13
https://winworldpc.com/product/mac-os-x/100

# 10.0.3
http://macintoshgarden.org/sites/macintoshgarden.org/files/apps/MacOS_10_0_3.toast__0.sit
ftp://macgarden:publicdl@repo1.macintoshgarden.org/Garden/apps/MacOS_10_0_3.toast__0.sit
http://mirror.macintosharchive.org/macintoshgarden.org/files/apps/MacOS_10_0_3.toast__0.sit
http://old.macintosh.garden/apps/MacOS_10_0_3.toast__0.sit

# Mac_OS_X_Cheetah_CD.dmg_.zip
http://macintoshgarden.org/sites/macintoshgarden.org/files/apps/Mac_OS_X_Cheetah_CD.dmg_.zip
ftp://macgarden:publicdl@repo1.macintoshgarden.org/Garden/apps/OSX_10.0_Internal.cdr_.sit
http://mirror.macintosharchive.org/macintoshgarden.org/files/apps/Mac_OS_X_Cheetah_CD.dmg_.zip
http://old.macintosh.garden/apps/Mac_OS_X_Cheetah_CD.dmg_.zip
Kodiak
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
https://winworldpc.com/product/mac-os-x/developer-previews

# OSX_10.0_Internal.cdr_.sit
http://macintoshgarden.org/sites/macintoshgarden.org/files/apps/OSX_10.0_Internal.cdr_.sit
ftp://macgarden:publicdl@repo1.macintoshgarden.org/Garden/apps/OSX_10.0_Internal.cdr_.sit
http://mirror.macintosharchive.org/macintoshgarden.org/files/apps/OSX_10.0_Internal.cdr_.sit
http://old.macintosh.garden/apps/OSX_10.0_Internal.cdr_.sit


# Mac OS X Public Beta 1H39 (ZM691-2794-A)
http://macintoshgarden.org/sites/macintoshgarden.org/files/apps/ZM691-2794-A.toast_.sit
ftp://macgarden:publicdl@repo1.macintoshgarden.org/Garden/apps/ZM691-2794-A.toast_.sit
http://mirror.macintosharchive.org/macintoshgarden.org/files/apps/ZM691-2794-A.toast_.sit
http://old.macintosh.garden/apps/ZM691-2794-A.toast_.sit


# Mac OS X Public Beta 2E14 (ZM691-2858-A)
http://macintoshgarden.org/sites/macintoshgarden.org/files/apps/ZM691-2858-A.toast_.sit
ftp://macgarden:publicdl@repo1.macintoshgarden.org/Garden/apps/ZM691-2858-A.toast_.sit
http://mirror.macintosharchive.org/macintoshgarden.org/files/apps/ZM691-2858-A.toast_.sit
http://old.macintosh.garden/apps/ZM691-2858-A.toast_.sit
Rhapsody
1
https://winworldpc.com/product/mac-os-x/rhapsody
Server 1.0
1
https://winworldpc.com/product/mac-os-x/server-10
System 9
1
2
# 根据个人需求选择版本
https://winworldpc.com/product/mac-os-9/90
System 8
1
2
# 根据个人需求选择版本
https://winworldpc.com/product/mac-os-8/80-final
System 7
1
2
3
4
5
# 根据个人需求选择版本
https://winworldpc.com/product/mac-os-7/70

# 7.0.1
https://drive.google.com/drive/folders/1mPoKlNEpizEmGF5h6DC0gtrOnx7jxHAI
System 6
1
https://winworldpc.com/product/mac-os-0-6/system-6x
System 5
1
https://winworldpc.com/product/mac-os-0-6/system-5x
System 4
1
https://winworldpc.com/product/mac-os-0-6/system-4x
System 3
1
https://winworldpc.com/product/mac-os-0-6/system-3x
System 2
1
https://winworldpc.com/product/mac-os-0-6/system-2x
System 1
1
https://winworldpc.com/product/mac-os-0-6/system-1x

空白磁盘映像

用于提供磁盘空间。

打开以下链接下载空白磁盘映像。

1
2
3
4
5
# System 7选择5MB
https://sites.google.com/site/minivmacapplicationsv6/disk-images-and-roms

# 或以下链接
https://www.gryphel.com/c/minivmac/extras/blanks/index.html

Mini vMac

模拟基于Motorola 68K的黑白Mac Plus,支持MacOS 1.1-7.5.5。下载链接如下。

1
https://www.gryphel.com/c/minivmac/download.html

在Mini vMac界面上,按住Control可弹出控制模式界面。Control+M让显示范围变大,Control+F全屏显示。

【特殊】iOS版本

iOS安装包下载链接如下。

1
https://github.com/zydeco/minivmac4ios

模拟为Macintosh II

下载Mini vMac时,版本选择Macintosh II Variations。根据自己的操作系统下载对应安装包。

新建文件夹,将Mini vMac、磁盘映像和ROM包中的1988-09 - 97221136 - Mac II FDHD & IIx & IIcx.ROM放在一起,并将ROM重命名为MacII.ROM。打开Mini vMac,即模拟为Macintosh II,屏幕出现一个带有问号的软盘图标。

以安装System 7.0.1为例,拖动System 7.0.1安装盘中的Install 1.img至窗口,即可看到安装向导。拖动空白磁盘映像至窗口,以提供安装位置,然后点击Install即可,其中需要安装提示拖动不同的System 7安装盘至窗口。

安装完成后点击Quit-Rstart,拖动刚才的磁盘映像到窗口,即可加载系统。

模拟为Macintosh Plus

前面下载时Mini vMac的版本选择Standard Variations,使用ROM包中的1986-03 - 4D1F8172 - MacPlus v3.ROM即可,注意需要重命名为vMac.ROM。打开后即模拟为Macintosh Plus。

SheepShaver

基本使用

模拟基于Power PC的Macintosh,支持MacOS 7.5.2-9.0.4。下载链接如下。

1
https://www.emaculation.com/forum/viewtopic.php?f=20&t=2409&sid=65c645c9dc937e59251f3ff05916b177

下载好ROM后重命名为Mac OS ROM,注意无后缀名,然后与SheepShaver放置在同一目录。打开应用,屏幕出现一个带有问号的软盘图标。点击菜单栏的Preferences,在Volumes手动添加安装盘即可。

接下来的步骤与Mini vMac一致。

常见问题

无法使用音频

若系统为Linux,可在终端输入以下命令。

1
sudo apt-get install osspd

然后使用以下命令打开SheepShaver。

1
padsp /usr/bin/SheepShaver

Basilisk II

基本使用

模仿基于摩托罗拉68k色彩的Mac,支持MacOS 7.x-8.1。最新版本下载链接如下,需要下载Basilisk II和Basilisk II GUI。

1
https://www.emaculation.com/doku.php/basilisk_ii

以Mac为例,需要下载以下两个文件。

1
2
3
4
5
# Basilisk II
https://www.emaculation.com/forum/viewtopic.php?f=6&t=7361

# Basilisk II GUI
https://www.emaculation.com/forum/viewtopic.php?f=6&t=10454

下载好ROM后打开Basilisk II GUI,点击菜单栏的Preferences,在Volumes手动添加安装盘,在System的ROM File选择下载好的ROM文件,点击Start即可。接下来的步骤与Mini vMac一致。

注意,若在Linux下使用Basilisk II,需要将安装盘设置为只读,且不要以root身份运行Basilisk II,否则将无法进行安装。

【进阶】详细配置

以Linux版的Basilisk II为例。该软件可通过系统包管理器获取。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# Volumes
点击create创建磁盘,大小一般小于200MB
Unix Root用于设置共享目录
Boot from设置为Any
disable CD-ROM driver不要勾选

# Graphics/Sound
设置运行时窗口的宽度和高度

# Keyboard/Mouse
使用US英语布局的QWERTY键盘不需要键盘配置文件,否则需要以下配置文件
http://www.xs4all.nl/~ronaldpr/sheepshaverforum/keycodes.zip

# Serial/Network
若需要启用网络,可设置为以下两种模式之一
(1)slirp
在Mac OS内需要按照以下配置连接
Connect via: Ethernet
Configure: DHCP
若没有网络,修改为以下内容
Connect via: Ethernet
Configure: Manually
IP address: 10.0.2.5
Subnet Mask: 255.255.255.0
Router Address: 10.0.2.2
Name server addr: 10.0.2.3
(2)eth0
需要正确安装sheep_net驱动后才会显示
在Mac OS内需要将TCP/IP设置为手动,然后设置IP、子网、路由器和DNS信息

# Memory/Misc
保持默认

# JIT Compiler
保持默认

文件共享

可使用HFVExplorer。

1
https://emaculation.com/quick/hdexp131.zip

也可在设置中勾选Enable 'My Computer' icon,以在MacOS中访问当前文件系统。

QEMU

支持MacOS 9.0.4-10.5。

安装

在终端输入以下命令即可。

1
brew install qemu
【进阶】对于Mac OS X 10.4及以上版本

需要使用以下特殊版本。

1
https://static.imvictor.tech/static-old/201709/qemu-mac99p.zip

需在同目录下新建qemu.command,内容如下。保存后运行即可。

1
2
3
#!/bin/bash
cd "$(dirname "$0")"
./qemu-system-ppc-wip -bios openbios-qemu-wip.elf -L pc-bios -boot c -m 1024 -M mac99p -prom-env "auto-boot?=true" -net nic,model=e1000 -net user -hda osx_tiger.qcow2 -hdb swap.img

使用

生成虚拟硬盘镜像

选择其中一种格式即可。

1
2
3
4
5
# 生成IMG
qemu-img create -f raw disk.img 20G

# 生成QCOW2
qemu-img create -f qcow2 -o preallocation=metadata disk.qcow2 20G
启动

在终端输入以下命令以打开。

1
2
3
4
# 内存256MB
# 磁盘disk.qcow2
# 光盘镜像macos9.iso,从光盘启动(首次安装时需要,启动时不需要)
qemu-system-ppc -M mac99 -m 256 -hda disk.qcow2 [-cdrom macos9.iso -boot d]

该命令格式如下。

1
qemu-system-x86_64 [参数]

其中参数如下。

参数 说明 选项
-hda A.qcow2 第一块内置硬盘的镜像
-hdb B.img 第二块内置硬盘的镜像
-cdrom C.iso 光盘镜像
-m 512 内存(以MB为单位)
-boot c 第一启动项为硬盘 c-硬盘
d-光盘
-net user 网络配置
-M mac99p 机型为mac99p
-prom-env “boot-args=-v” 向NVRAM写入启动参数-v
-vga virtio
-display default,show-cursor=on
-usb
-device usb-tablet
-machine type=q35,accel=hvf
-smp 2
-cpu Nehalem
-drive file=windows.iso,index=1,media=cdrom
-drive file=/Users/slanla/qemu/disk.img,index=0,format=raw,if=virtio

PearPC

仅可用于Windows和Linux,可用于Mac OS 10.3。

下载链接如下,注意需要下载源程序和空白磁盘。空白磁盘解压所得的bz2压缩包,并与ppc程序放置在同一目录。将安装盘也放置在同一目录。

1
http://pearpc.sourceforge.net/downloads.html

复制ppccfg.example并重命名,用文本编辑器打开。主要修改以下内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 磁盘0
## 是否被安装,1为是,0为否
## 磁盘路径,为刚才的空白磁盘
pci_ide0_master_installed = 1
pci_ide0_master_image = "102.img"
#pci_ide0_master_type = "hd"

# 光盘0
## 是否被安装,1为是,0为否
## 光盘路径,为安装盘
## 光盘类型
pci_ide0_slave_installed = 1
#pci_ide0_slave_image = "e:\"
#pci_ide0_slave_image = "2,0,0"
pci_ide0_slave_image = "/dev/cdrom"
pci_ide0_slave_type = "cdrom"

打开命令提示符,切换到ppc程序所在路径后输入以下命令即可。

1
ppc [配置文件名]

现成磁盘映像

以下磁盘映像无需进行安装步骤,直接挂载即可使用。

Jaguar

适用于QEMU,磁盘映像如下。

1
http://macintoshgarden.org/apps/mac-os-x-102-pre-made-qemu-hard-drive

终端切换到磁盘映像所在目录,运行以下命令即可。

1
2
# 10.2.img为磁盘映像
qemu-system-ppc -hda 10.2.img -m 512 -boot c -net nic,model=e1000 -net user

System 9

适用于SheepShaver。设置好ROM后,在Preferences中添加该磁盘镜像即可。

1
2
# 9.0
https://www.redundantrobot.com/sheepshaver_files/disk_images/OS9.img

System 7

适用于Mini vMac。设置好ROM后,将以上镜像直接拖到窗口即可。

1
2
3
4
# 7.5.3
https://archive.org/details/AppleMacintoshSystem753
https://archive.org/details/HyperCardVol1
https://archive.org/details/HyperCardVol2

旧硬件安装

硬件配置如下。

型号 Device ID Vendor ID
CPU Intel Core 2 Duo T5750 2000MHz(x86/x86-64/MMX/SSE/SSE2/SSE3/SSSE3) / /
显卡
声卡
有线网卡 / /
无线网卡
键盘 / /
触摸板 / /
蓝牙

系统选择

如果主板或CPU较旧,则只能安装旧版系统。可先查看CPU支持的指令集,如果CPU不支持SSE4.1指令集,则不能运行10.12及以上的系统。

10.11支持SSE3指令集。各系统情况具体可参看黑苹果发展一章。

引导方式

UEFI

安装引导器

如果主板为BIOS Legacy模式,可以通过模拟UEFI实现运行UEFI的效果,具体做法可参照有关引导的文章。向EFI分区安装好Clover后即可开始。

准备安装介质

U盘安装

在Mac系统下下载好后缀为app的安装包拖到应用程序文件夹。用磁盘工具格式化U盘,选择GUID分区图,格式化为Mac日志式。然后打开终端并输入以下命令,以Sierra安装包为例,其中/Volumes/Sierra为U盘的盘符。

1
sudo /Applications/Install\ macOS\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/Sierra --applicationpath /Applications/Install\ macOS\ Sierra.app --nointeraction

制作完成后,插入到需要安装的电脑即可引导启动。

硬盘安装

用Diskgenius划分一块10G左右的磁盘作为安装盘,注意分配盘符但不要分区。通过硬盘安装助手,可以把镜像写到硬盘中。

如果镜像为cdr格式,则需要以管理员模式打开硬盘安装助手,选择安装镜像和安装磁盘,只勾选写入,点击开始即可。如果不以管理员身份运行,则会出现not a HFS partition的错误提示。

完成写入后需要手动设置安装盘的参数。打开Diskgenius,在安装盘分区上右键选择修改参数,修改系统类型为48465300-0000-11AA-AA11-00306543ECAC即可。

如果是以app为后缀的安装包,则需要从app包制作cdr镜像。打开终端并输入以下命令即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 创建dmg
# -size 8300m是指镜像大小8300MB,这里的8300改为app包大小的基础上增加500MB左右
hdiutil create -o /tmp/Install\ macOS\ Catalina -size 8500m -layout SPUD -fs HFS+J

# 挂载dmg
hdiutil attach /tmp/Install\ macOS\ Catalina.dmg -noverify -mountpoint /Volumes/Install\ macOS\ Catalina

# 将app写入dmg
echo Y | sudo /Applications/Install\ macOS\ Catalina.app/Contents/Resources/createinstallmedia --volume /Volumes/Install\ macOS\ Catalina

# 卸载挂载的dmg
hdiutil detach /Volumes/Install\ macOS\ Catalina

# 将dmg转换为cdr
hdiutil convert /tmp/Install\ macOS\ Catalina.dmg -format UDTO -o ~/Desktop/Install\ macOS\ Catalina

# 删除dmg
rm /tmp/Install\ macOS\ Catalina.dmg

BIOS

如果不希望使用模拟UEFI,也可以通过MBR+BIOS的模式。注意,由于​Mac不支持MBR启动,因此需要通过MBR补丁的方式实现,且应当使用Ecoch即变色龙进行引导,通过Clover引导时可能会出现X64 Exception的错误。

安装引导器

U盘安装

在Mac系统下下载Ecoch的pkg安装包,安装时安装路径选择U盘即可。U盘可为MBR分区表。

硬盘安装

下载Chameleon Install安装器并打开,按照提示完成安装。安装好的镜像文件wowpc.iso位于系统分区根目录,下载最新的wowpc.iso并替换即可。

准备安装介质

下载Catalina MBR HFS Firmware Check Patch。

1
2
https://www.insanelymac.com/forum/files/file/985-catalina-mbr-hfs-firmware-check-patch/
https://github.com/crazybirdy/MBR-Manual-Method

打开dmg文件,进入Old-macOS-10+11+12,运行想安装的系统的脚本。注意需要使用一个U盘作为写入盘,并按照提示格式化。

安装盘完成后,需要将Enoch-r2922里的文件拷贝到引导器。对于U盘安装的变色龙而言,直接替换文件即可。而对于硬盘安装,需要编辑iso文件。

常见问题

引导启动

启动界面中键盘无法使用

有可能由不兼容的键盘驱动程序引起。对于OpenCore,可以在配置文件中取消勾选PollAppleHotKeys并勾选KeySupport,然后在Drivers文件夹中删除OpenUsbKbDxe。

若无效,则进行相反的操作,即取消勾选KeySupport,然后在Drivers文件夹中添加OpenUsbKbDxe。

也有可能由缺失PS2键盘驱动引起。在Drivers文件夹中添加Ps2KeyboardDxe即可。

也可尝试在Drivers文件夹中添加AptioInputFix。若仍无效,可通过设置倒计时的方式暂时在启动时能够引导到系统。

啰嗦模式

用Clover引导选择完启动项后即黑屏

更换旧版Clover,如r3333。注意,旧版Clover需要在启动项上空格,并选择Boot with injected kexts才能载入kexts。

卡AppleEHCI/AppleUHCI

Clover配置文件中勾选FixHPET和FixIPIC。若无效则改用硬盘模式安装。

显示panic(CPU 1 caller 0xffffff800e7ce6fa):Kernel trap at 0xffffff7f9294d4c6

Clover配置文件中勾选FixHPET和FixIPIC。

卡Missing bluetooth controller transport!后禁行

Clover配置文件中勾选FixHPEC、FixIPIC、FixFirewire、FixUSB、DropOEM,并关闭所有USB注入。也可尝试在启动参数添加dart=0

出现满屏FireWire错误

可能为在BIOS中关闭了CSM导致,关闭CSM会确保是纯UEFI启动。

可在Clover的配置文件中勾选Fix Firewire解决。也可尝试使用FireWireDriver.efi,放置于Clover的driver64UEFI文件夹即可。

1
https://www.insanelymac.com/applications/core/interface/file/attachment.php?id=124931

注意,该错误理论上不造成系统启动时卡住,若卡住,应该为其它原因导致。

AMD CPU

内核处理

需要对系统内核进行处理后,才可在AMD CPU上正常运行。

内核修补补丁

适用的CPU如下,可用于10.13及以上系统。

家族 代号 示例
15h Bulldozer FX Series
16h Jaguar A Series(包括AM4 A-Series)
17h和19h Zen Ryzen, 1st, 2nd + 3rd Gen Threadripper, Athlon 2xxGE

在OpenCore配置文件中合并以下补丁即可。

1
2
3
4
5
# 15h/16h
https://github.com/AMD-OSX/AMD_Vanilla/blob/opencore/15h_16h/patches.plist

# 17h/19h
https://github.com/AMD-OSX/AMD_Vanilla/blob/opencore/17h_19h/patches.plist

内核替换

对于32位系统,需要进行内核替换,下载链接如下。注意替换内核后将失去iMessage支持。

1
https://wiki.osx86project.org/wiki/index.php/Patched_Kernels

驱动修补

对于10.13,可能需要以下kext。

1
https://github.com/amd-osx-kb/HighSierraLegacy/tree/master/files

列表如下。

1
2
3
4
5
6
7
AppleActuatorDriver.kext
AppleSMCRTC.kext
AppleUSBCommon.kext
IOSlaveProcessor.kext
KernelRelayHost.kext
IONetworkingFamily.kext(在10.13.3+上应使用10.13.3版)
IOUSBFamily.kext

kexts作用如下。

名称 作用
AMDRyzenCPUPowerManagement AMD CPU电源管理
SMCAMDProcessor AMD CPU监测
SMCBatteryManager AMD CPU电池修复

USB

FX

需要使用DummyUSBEHCIPCI和DummyUSBXHCIPCI,下载链接如下。

1
https://github.com/amd-osx-kb/HighSierraLegacy/blob/master/files/DummyUSB.zip

Ryzen

仅适用于10.13。打开DSDT并添加以下源。

1
2
# Ryzen USB
https://raw.githubusercontent.com/AlGreyy/Ryzen-USB-fix-/master

点击Patch,使用USB Ryzen补丁。保存后将DSDT.aml放到Clover的ACPI部分,然后需要在配置文件中添加以下kext补丁。

对于10.13.1-10.13.3,内容如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Name: AppleUSBXHCI
Find: 21F281FA 000002
Replace: 21F281FA 000011
Comment: ydeng USB patch

Name: AppleUSBXHCI
Find: D1000000 83F901
Replace: D1000000 83F910
Comment: ydeng USB patch

Name: AppleUSBXHCI
Find: 83BD7CFF FFFF0F
Replace: 83BD7CFF FFFF1F
Comment: ydeng USB patch

对于10.13.4-10.13.6,内容如下。

1
2
3
4
Name: AppleUSBXHCI
Find: C8000000 83FB02
Replace: C8000000 83FB11
Comment: algrey USB patch for ryzen

SSE4.2仿真

对于AMD CPU,可用MouSSE.kext在SSE4.1 CPU下运行要求为SSE 4.2的系统,下载链接如下。

1
https://forums.macrumors.com/threads/mp3-1-others-sse-4-2-emulation-to-enable-amd-metal-driver.2206682/

支持性

USB

原生USB受到支持。

音频与麦克风

原生音频受到支持。

G系列APU上音频问题无法修复,必须使用外部DAC。

麦克风支持仅限于Ryzen上的VoodooHDA,不支持15/16H CPU的麦克风。

IOMMU

IOMMU不工作。

三码

iCloud、iMessage、FaceTime、Siri可用。

显卡

内置显卡(Ax CPU/G Ryzen)无法工作。

Adobe

Adobe从2019年开始大部分应用都高度依赖基于Intel的特殊数学函数库Intel Math Kernel Library(Intel-mkl),以及其它一些Intel特殊指令集用于硬件加速,涉及到的有MXMCore、FastCore、CameraRAW等。因此在AMD处理器上安装黑苹果,使用Photoshop的某些功能会导致闪退甚至Kernel Panic。

可通过禁用诸如RAW支持之类的功能以避免崩溃。打开终端并输入以下代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
for file in MMXCore FastCore TextModel libiomp5.dylib; do
find /Applications/Adobe* -type f -name $file | while read -r FILE; do
sudo -v
echo "found $FILE"
[[ ! -f ${FILE}.back ]] && sudo cp -f $FILE ${FILE}.back || sudo cp -f ${FILE}.back $FILE
echo $FILE | grep libiomp5 >/dev/null
if [[ $? == 0 ]]; then
dir=$(dirname "$FILE")
[[ ! -f ${HOME}/libiomp5.dylib ]] && cd $HOME && curl -sO https://excellmedia.dl.sourceforge.net/project/badgui2/libs/mac64/libiomp5.dylib
echo -n "replacing " && sudo cp -vf ${HOME}/libiomp5.dylib $dir && echo
rm -f ${HOME}/libiomp5.dylib
continue
fi
echo $FILE | grep TextModel >/dev/null
[[ $? == 0 ]] && echo "emptying $FILE" && sudo echo -n >$FILE && continue
echo "patching $FILE \n"
sudo perl -i -pe 's|\x90\x90\x90\x90\x56\xE8\x6A\x00|\x90\x90\x90\x90\x56\xE8\x3A\x00|sg' $FILE
sudo perl -i -pe 's|\x90\x90\x90\x90\x56\xE8\x4A\x00|\x90\x90\x90\x90\x56\xE8\x1A\x00|sg' $FILE
done
done

然后输入以下代码,重启即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[ ! -d $HOME/Library/LaunchAgents ] && mkdir $HOME/Library/LaunchAgents
AGENT=$HOME/Library/LaunchAgents/environment.plist
sysctl -n machdep.cpu.brand_string | grep FX >/dev/null 2>&1
x=$(echo $(($? != 0 ? 5 : 4)))
cat >$AGENT <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>mkl-debug</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>launchctl setenv MKL_DEBUG_CPU_TYPE $x;</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
EOF
launchctl load ${AGENT} >/dev/null 2>&1
launchctl start ${AGENT} >/dev/null 2>&1

若希望撤销操作,则输入以下代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
for file in MMXCore FastCore TextModel libiomp5.dylib; do
find /Applications/Adobe* -type f -name $file | while read -r FILE; do
sudo -v
[[ -f ${FILE}.back ]] && echo "found backup $FILE" && sudo mv -f ${FILE}.back $FILE
done
done

AGENT=$HOME/Library/LaunchAgents/environment.plist
if [[ -f $AGENT ]]; then
launchctl unload ${AGENT} >/dev/null 2>&1
launchctl stop ${AGENT} >/dev/null 2>&1
rm -rf $AGENT
fi

Matlab

AMD黑苹果无法运行MatLab。即使能够运行,运算速度也非常缓慢,原因是缺乏Intel-mkl。

音频软件

Cubase、REAPER、Waves插件等在启动时崩溃。使用Clang构建的REAPER可以工作。

32/64位

不支持32位指令。

CPU电源管理

不可设置CPU电源管理。

虚拟机

由于使用AMD CPU需要注释XNU内核对Intel特有指令集的调用,因此VMX不受支持,AppleHV框架不可用,VMWare、Parallels、Docker、Android Studios等虚拟机软件均无法使用,只能使用VirtualBox,或某些虚拟机的特定版本,如VMware 10、Parallels 13.1.0。

XCode

XCode的Apple Watch在Catalina中损坏,在Mojave中正常。

常见问题

啰嗦模式

出现AppleIntelMCEReporter报错

双插槽支持被打破,受影响的SMBIOS包括MacPro6,1、MacPro7,1、iMacPro1,1。在引导器放置AppleMCEReporterDisabler.kext即可,需要10.15及更高版本。

1
2
https://github.com/acidanthera/bugtracker/files/3703498/AppleMCEReporterDisabler.kext.zip
https://github.com/AMD-OSX/AMD_Vanilla/blob/opencore/Extra/AppleMCEReporterDisabler.kext.zip

出现Still Waiting for Root Device

先按照普通情况处理,若无效则可能需要添加XLNCUSBFix.kext,以修复AMD FX系统的USB控制器。需要10.13及更高版本,下载链接如下。

1
https://cdn.discordapp.com/attachments/566705665616117760/566728101292408877/XLNCUSBFix.kext.zip

若无效,则尝试AMD StopSign-fixv5。

系统启动

在Data&Privacy页重启

进入单用户模式并输入以下命令。以上命令将跳过设置屏幕,并新建一个用户名为Temp User,密码为password的账户。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/sbin/fsck -fy
/sbin/mount -uw /
touch /var/db/.AppleSetupDone

launchctl load /System/Library/LaunchDaemons/com.apple.opendirectoryd.plist

dscl . -create /Users/temp
dscl . -create /Users/temp UserShell /bin/bash
dscl . -create /Users/temp RealName "Temp User"
dscl . -create /Users/temp UniqueID "510"
dscl . -create /Users/temp PrimaryGroupID 20
dscl . -create /Users/temp NFSHomeDirectory /Users/temp
dscl . -passwd /Users/temp password
dscl . -append /Groups/admin GroupMembership temp
dseditgroup -o edit -a temp -t user admin

shutdown -r +0

Safari一直重新加载YouTube等网站

打开系统偏好设置-通用,将高亮显示颜色设置为最后一个颜色。

系统优化

问题修复

华硕笔记本键盘修复

按键驱动

利用AsusSMC.kext,可修复华硕笔记本键盘与Fn有关的快捷键不工作的问题。需要Lilu和VirtualSMC,下载链接如下。

1
https://github.com/hieplpvip/AsusSMC

将下载好的kext放到Clover的kexts文件夹中,若键盘有睡眠和飞行模式按键则还需运行install_daemon.sh,然后重启。逐个测试按键是否工作,若不工作,可通过SSDT或DSDT进行修补。

按键修复

通过DSDT

用MaciASL打开DSDT。添加以下源,然后点击Patch打相应补丁即可。

1
http://raw.github.com/hieplpvip/AsusSMC/master
通过SSDT

选取以下所需代码复制到MaciASL中,创建一个SSDT并保存为SSDT-ASUS.aml,放入引导器的ACPI部分,并按照注释在config.plist中添加更名补丁即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
DefinitionBlock ("", "SSDT", 2, "hack", "EC", 0x00000000)
{
External (_SB.ATKD.IANE, MethodObj)
External (_SB.ATKP, IntObj)
External (_SB.PCI0.LPCB.EC, DeviceObj)

Scope (_SB.PCI0.LPCB.EC)
{
// F1
// change _Q0A to XQ0A
// Find: 5F513041
// Replace: 58513041
Method (_Q0A, 0, NotSerialized)
{
If (^^^^ATKP)
{
^^^^ATKD.IANE (0x5E)
}
}

// F2
// change _Q0B to XQ0B
// Find: 5F513042
// Replace: 58513042
Method (_Q0B, 0, NotSerialized)
{
If (^^^^ATKP)
{
^^^^ATKD.IANE (0x7D)
}
}

// F3
// change _Q0C to XQ0C
// Find: 5F513043
// Replace: 58513043
Method (_Q0C, 0, NotSerialized)
{
If (^^^^ATKP)
{
^^^^ATKD.IANE (0xC5)
}
}

// F4
// change _Q0D to XQ0D
// Find: 5F513044
// Replace: 58513044
Method (_Q0D, 0, NotSerialized)
{
If (^^^^ATKP)
{
^^^^ATKD.IANE (0xC4)
}
}

// F5
// change _Q0E to XQ0E
// Find: 5F513045
// Replace: 58513045
Method (_Q0E, 0, NotSerialized)
{
If (^^^^ATKP)
{
^^^^ATKD.IANE (0x20)
}
}

// F6
// change _Q0F to XQ0F
// Find: 5F513046
// Replace: 58513046
Method (_Q0F, 0, NotSerialized)
{
If (^^^^ATKP)
{
^^^^ATKD.IANE (0x10)
}
}

// F7
// change _Q10 to XQ10
// Find: 5F513130
// Replace: 58513130
Method (_Q10, 0, NotSerialized)
{
If (^^^^ATKP)
{
^^^^ATKD.IANE (0x35)
}
}

// F8
// change _Q10 to XQ10
// Find: 5F513131
// Replace: 58513131
Method (_Q11, 0, NotSerialized)
{
If (^^^^ATKP)
{
^^^^ATKD.IANE (0x61)
}
}

// F9
// change _Q12 to XQ12
// Find: 5F513132
// Replace: 58513132
Method (_Q12, 0, NotSerialized)
{
If (^^^^ATKP)
{
^^^^ATKD.IANE (0x6B)
}
}

// F10
// change _Q13 to XQ13
// Find: 5F513133
// Replace: 58513133
Method (_Q13, 0, NotSerialized)
{
If (^^^^ATKP)
{
^^^^ATKD.IANE (0x32)
}
}

// F11
// change _Q14 to XQ14
// Find: 5F513134
// Replace: 58513134
Method (_Q14, 0, NotSerialized)
{
If (^^^^ATKP)
{
^^^^ATKD.IANE (0x31)
}
}

// F12
// change _Q15 to XQ15
// Find: 5F513135
// Replace: 58513135
Method (_Q15, 0, NotSerialized)
{
If (^^^^ATKP)
{
^^^^ATKD.IANE (0x30)
}
}

// media left arrow key
// change _Q6C to XQ6C
// Find: 5F513643
// Replace: 58513643
Method (_Q6C, 0, NotSerialized)
{
If (^^^^ATKP)
{
^^^^ATKD.IANE (0x40)
}
}

// media right arrow key
// change _Q6D to XQ6D
// Find: 5F513644
// Replace: 58513644
Method (_Q6D, 0, NotSerialized)
{
If (^^^^ATKP)
{
^^^^ATKD.IANE (0x41)
}
}

// media up arrow key
// change _Q6E to XQ6E
// Find: 5F513645
// Replace: 58513645
Method (_Q6E, 0, NotSerialized)
{
If (^^^^ATKP)
{
^^^^ATKD.IANE (0x43)
}
}

// media down arrow key
// change _Q6F to XQ6F
// Find: 5F513646
// Replace: 58513646
Method (_Q6F, 0, NotSerialized)
{
If (^^^^ATKP)
{
^^^^ATKD.IANE (0x45)
}
}

// space key
// change _Q71 to XQ71
// Find: 5F513731
// Replace: 58513731
Method (_Q71, 0, NotSerialized)
{
If (^^^^ATKP)
{
^^^^ATKD.IANE (0x5C)
}
}

// V key
// change _Q72 to XQ72
// Find: 5F513732
// Replace: 58513732
Method (_Q72, 0, NotSerialized)
{
If (^^^^ATKP)
{
^^^^ATKD.IANE (0x8A)
}
}


// C key
// change _Q73 to XQ73
// Find: 5F513733
// Replace: 58513733
Method (_Q73, 0, NotSerialized)
{
If (^^^^ATKP)
{
^^^^ATKD.IANE (0x82)
}
}

// ALS toggle A key
// change _Q6F to XQ6F
// Find: 5F513646
// Replace: 58513646
Method (_Q6F, 0, NotSerialized)
{
If (^^^^ATKP)
{
^^^^ATKD.IANE (0x7A)
}
}
}
}

亮度快捷键调整

通过BrightnessKeys.kext即可,链接如下。

1
https://github.com/acidanthera/BrightnessKeys

CPU显示未知修复

打开终端并输入以下命令。

1
2
cd /System/Library/PrivateFrameworks/AppleSystemInfo.framework/Versions/A/Resources/zh_CN.lproj/
cp AppleSystemInfo.strings ~/Desktop

打开AppleSystemInfo.strings,将UnknownCPUKind下的内容修改为需要显示的内容,如下。

1
2
<key>UnknownCPUKind</key>
<string>Intel Core i7-8700K</string>

保存后在终端输入以下命令即可。

1
sudo cp ~/Desktop/AppleSystemInfo.strings /System/Library/PrivateFrameworks/AppleSystemInfo.framework/Versions/A/Resources/zh_CN.lproj/

ACPI修补

应当实现以下SSDT修补。以下修补文件在OpenCore的AcpiSamples文件夹。

列表

平台 CPU EC AWAC/RTC NVRAM USB PCI Backlight I2C触控板 IRQ IMEI
Penryn / SSDT-EC / / / /
Lynnfield and Clarkdale / SSDT-EC / / / /
Clarksfield and Arrandale / SSDT-EC / / SSDT-PNLF IRQ SSDT /
Sandy Bridge CPU-PM(系统安装后使用) SSDT-EC / / / / SSDT-PNLF IRQ SSDT SSDT-IMEI(用于7代主板)
Ivy Bridge CPU-PM(系统安装后使用) SSDT-EC / / / / SSDT-PNLF IRQ SSDT SSDT-IMEI(用于6代主板)
Haswell SSDT-PLUG SSDT-EC / / / / SSDT-PNLF SSDT-GPI0 IRQ SSDT /
Broadwell SSDT-PLUG SSDT-EC / / / / SSDT-PNLF SSDT-GPI0 IRQ SSDT /
Skylake SSDT-PLUG SSDT-EC-USBX / / / / SSDT-PNLF SSDT-GPI0 / /
Kaby Lake SSDT-PLUG SSDT-EC-USBX / / / / SSDT-PNLF SSDT-GPI0 / /
Coffee Lake (8th Gen) and Whiskey Lake SSDT-PLUG SSDT-EC-USBX SSDT-AWAC SSDT-PMC / / SSDT-PNLF-CFL SSDT-GPI0 / /
Coffee Lake (9th Gen) SSDT-PLUG SSDT-EC-USBX SSDT-AWAC SSDT-PMC / / SSDT-PNLF-CFL SSDT-GPI0 /
Comet Lake SSDT-PLUG SSDT-EC-USBX SSDT-AWAC / SSDT-RHUB / SSDT-PNLF-CFL SSDT-GPI0 / /
Ice Lake SSDT-PLUG SSDT-EC-USBX SSDT-AWAC / SSDT-RHUB / SSDT-PNLF-CFL SSDT-GPI0 / /
AMD (15/16h, Bulldozer/Jaguar) / SSDT-EC-USBX / / / /
AMD (17/19h, Zen) SSDT-CPUR for B550 and A520 SSDT-EC-USBX / / / /
Nehalem and Westmere / SSDT-EC / / / /
Sandy Bridge-E / SSDT-EC / / / SSDT-UNC
Ivy Bridge-E / SSDT-EC / / / SSDT-UNC
Haswell-E SSDT-PLUG SSDT-EC-USBX SSDT-RTC0-RANGE / / SSDT-UNC
Broadwell-E SSDT-PLUG SSDT-EC-USBX SSDT-RTC0-RANGE / / SSDT-UNC
Skylake-X SSDT-PLUG SSDT-EC-USBX SSDT-RTC0-RANGE / / /
【旧版】SSDT列表
名称 解释
SSDT-Config SSDT控制入口文件
SSDT-LPC 正确识别LPC总线到系统
SSDT-SMBUS 正确识别SMBus到系统
SSDT-DMAC 将DMA控制器公开给系统
SSDT-MCHC 将内存控制器暴露在系统中
SSDT-IGPU 将属性添加到集成显卡设备,可以实现HDMI音频以及正确显示
SSDT-Disable_DGPU 在启动时关闭独立显卡,因为Mac OS无法使用它
SSDT-ALS0 添加假环境光传感器以在重新启动之间保存背光信息
SSDT-BRT6 将键盘的ACPI管理亮度键映射到VoodooPS2Controller.kext的PS2代码
SSDT-Dell_FN 将键盘的ACPI管理亮度键映射到VoodooPS2Controller.kext的PS2代码 (部分DELL机型)
SSDT-PNLF 显示器亮度控制,为IntelBacklight.kext或AppleBacklight.kext + AppleBacklightInjector.kext添加PNLF设备
SSDT-HDAU 自动注入HDAU属性(适用于Haswell和Broadwell平台)
SSDT-HDEF 自动注入HDEF属性(声卡layoutid注入点)
SSDT-GPRW 通过挂接GPRW或UPRW来解决即时唤醒
SSDT-LANC_PRW 通过挂接GPRW来解决即时唤醒
SSDT-UPRW 通过挂接GPRW或UPRW来解决即时唤醒
SSDT-IMEI 添加IMEI(6系列HD4000,7系HD3000)
SSDT-PTSWAK 在睡眠之前对离散GPU进行驱动,并在唤醒后将其关闭,以确保系统能够跟踪它
SSDT-Debug 用于ACPIDebug,该文件是通过将「添加DSDT调试方法」应用于空SSDT创建的,使用「添加SSDT调试外部声明」从其他方式访问这些方法hotpatch SSDT甚至打补丁的OEM ACPI文件
SSDT-ESEL 关闭ESEL,在DSDT里原生ESEL被重命名为ESEX
SSDT-XWAK 关闭XWAK,在DSDT里原生的XWAK被重命名为ZWAK
SSDT-PluginType1 在_PR.CPU0上插入plugin-type=1,可能是所有支持XCPM的SMBIOS只需要这种插件类型的注入
SSDT-SATA 修复某些不支持的SATA设备
SSDT-XHC 自动注入XHC属性
SSDT-XOSI 操作系统补丁
SSDT-AWAC 修复300系列主板(B360/B365/H310/H370/Z390等)系列主板的RTC设备问题,部分微星的主板/清华同方九代模具需要应用这个补丁,否则会卡住而无法进入系统,建议八代 CoffeeLake以上的用户都添加
SSDT-EC-USBX 添加了一个仿冒的EC设备并完善了USB的供电,若主板的EmbeddedController原生ACPI命名就是EC则不需要该补丁
SSDT-PMC 与NVRAM相关
SSDT-PLUG 启用原生电源管理,Skylake六代以上的机型在Clover中可以直接勾选注入插件类型,自动注入plugin-type=1参数实现同等效果

SSDT示例

SSDT-EC

禁用原有EC设备,并新建一个新的EC设备。

1
2
3
4
5
# Desktop
https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/compiled/SSDT-EC-DESKTOP.aml

# Laptop
https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/compiled/SSDT-EC-LAPTOP.aml
【进阶】手动编写

在DSDT中搜索PNP0C09,即可定位到EC设备。也可在Windows下的设备管理器下查找Embedded Controller,右键选择属性,在详细页面选择BIOS名称查看设备路径。

根据需求下载以下示例并打开。

1
2
3
4
5
# SSDT-EC-USBX
https://github.com/acidanthera/OpenCorePkg/blob/master/Docs/AcpiSamples/Source/SSDT-EC-USBX.dsl

# SSDT-EC
https://github.com/acidanthera/OpenCorePkg/blob/master/Docs/AcpiSamples/Source/SSDT-EC.dsl

若为笔记本,则不要修改注释掉的代码,否则取消对代码的注释。这段代码的主要用途为禁用EC设备。

重命名以下地方为获得的EC设备路径。

1
2
External (_SB_.PCI0.LPCB, DeviceObj)
Scope (_SB.PCI0.LPCB)

若出现多个PNP0C09,则检查是否存在_HID_CRS_GPE方法,若均存在,则该设备为所求的EC设备。但若有_STA方法,说明该EC设备是无用设备。

若无PNP0C09,则只需虚拟一个EC。尝试搜索LPCB、LPC0、LPC、SBRG、PX40,若其一存在,则使用其LPC路径取代SSDT中的EC设备路径。

若PNP0C09已被重命名为EC,则无需使用以上SSDT。但若为Skylake及更新版本,则仍需要SSDT-USBX。

SSDT-EC-USBX

用于禁用真正的嵌入式控制器并为Mac创建一个假的控制器。USBX部分用于注入Skylake和更新版本上缺少的USB电源属性。

1
2
3
4
5
# Desktop
https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/compiled/SSDT-EC-USBX-DESKTOP.aml

# Laptop
https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/compiled/SSDT-EC-USBX-LAPTOP.aml

在Catalina及更新版本中,AppleACPIEC.kext及其插件和USB电源管理依赖于名为EC的ACPI设备。同时,AppleBusPowerController也会查找名为EC的设备,还需要一个USBX设备来为Skylake和更新版本提供USB电源属性,因此SSDT-EC-USBX将SSDT-EC和SSDT-USBX进行了结合。

EC设备在笔记本上主要用于电池管理和热键处理,在台式机上与AppleACPIEC冲突。因此在笔记本上可以通过创建一个假EC设备实现启动,而在台式机中直接禁用该设备。

【备注】SSDT-USBX

SSDT-USBX不可使用于Broadwell及更早版本。

1
https://github.com/dortania/OpenCore-Post-Install/blob/master/extra-files/SSDT-USBX.aml

SSDT-IMEI

在ACPI中不存在IMEI设备时创建IMEI设备。

使用Sandy Bridge CPU的7系列主板(B75、Q75、Z75、H77、Q77、Z77)和Ivy Bridge CPU的6系列主板(H61、B65、Q65、P67、H67、Q67、Z68)需要。

在DSDT中搜索IMEI/HECI/MEI,若出现其一,则不需要SSDT-IMEI。若未出现则需要使用。

1
https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/compiled/SSDT-IMEI.aml

SSDT-PLUG

启用Apple的XCPM,从而实现更好的CPU电源管理。

1
https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/compiled/SSDT-PLUG-DRTNIA.aml

SSDT-AWAC/SSDT-RTC0-RANGE-HEDT

在Mac中启用旧版RTC时钟,因为不支持较新的AWAC时钟。适用于以下主板。

1
2
3
4
5
6
7
8
9
10
11
12
B360
B365
H310
H370
Z370 (Gigabyte and AsRock boards with newer BIOS versions)
Z390
B460
Z490
400 series (Comet Lake, including Z490)
495 series (Icelake)
X99
X299

SSDT-RTC0-RANGE-HEDT还解决了由于ACPI实施不佳而导致的Big Sur启动的提前停止。

1
2
3
4
5
6
7
# SSDT-AWAC
# 适用于大多数主板
https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/compiled/SSDT-AWAC.aml

# SSDT-RTC0-RANGE-HEDT
# 适用于Intel的X99和X299平台
https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/compiled/SSDT-RTC0-RANGE-HEDT.aml
【进阶】手动编写

在DSDT中搜索ACPI000E,用于搜索AWAC设备。若无该设备则无需进行以下操作。

继续搜索PNP0B00,用于搜索RTC设备。若有该设备,则证明可以禁用AWAC并启用RTC,使用上面的SSDT-AWAC即可。

若无RTC设备,则需要使用SSDT-RTC0,如下。

1
https://github.com/acidanthera/OpenCorePkg/blob/master/Docs/AcpiSamples/Source/SSDT-RTC0.dsl

需要改动的设备路径如下,其中LPCB路径可通过搜索Name (_ADR, 0x001F0000)查看。注意应当保证PCI设备存在,可通过搜索PNP0A08确定。

1
2
External (_SB_.PCI0.LPCB, DeviceObj)
Scope (_SB.PCI0.LPCB)

SSDT-PMC

在300系列主板上启用本机NVRAM,如B360、B365、H310、H370、Z390。Z370、HM370不需要。仅适用于第九代笔记本电脑,第十代不需要。

1
https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/compiled/SSDT-PMC.aml
【进阶】手动编写

需要使用的SSDT如下。

1
https://github.com/acidanthera/OpenCorePkg/tree/master/Docs/AcpiSamples/Source/SSDT-PMC.dsl

需要改动的设备路径如下,其中LPCB路径可通过搜索Name (_ADR, 0x001F0000)查看。注意应当保证PCI设备存在,可通过搜索PNP0A08确定。

1
2
External (_SB_.PCI0.LPCB, DeviceObj)
Scope (_SB.PCI0.LPCB)

SSDT-RHUB

重置Asus 400系列主板上的USB控制器。Gigabyte、MSI、AsRock等不需要。主要用于使用Ice Lake的Dell笔记本。

1
https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/compiled/SSDT-RHUB.aml
【进阶】手动编写

需要使用的SSDT如下。

1
https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/decompiled/SSDT-RHUB.dsl

需要改动的设备路径如下,其中RHUB路径可通过搜索Device (RHUB)查看。也可搜索XHC/XHCI/XHC1。注意应当保证PCI设备存在,可通过搜索PNP0A08确定。

1
2
External (_SB_.PCI0.XHC1.RHUB, DeviceObj)
Scope (_SB.PCI0.XHC1.RHUB)

SSDT-PNLF

控制内部显示器背光。在极少数情况下,可能需要修改GFX0为显卡设备名称。

1
2
3
4
5
# Kaby Lake及更低
https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/compiled/SSDT-PNLF.aml

# Coffee Lake及更高
https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/compiled/SSDT-PNLF-CFL.aml

SSDT-XOSI

在macOS中启用许多仅限Windows的功能。

1
https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/compiled/SSDT-XOSI.aml

SSDT-UNC

确保正确禁用未使用或丢失的非核心桥接器,否则会在Big Sur中出现IOPCIFamily的panic。

1
https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/compiled/SSDT-UNC.aml

SSDT-CPUR

用于修复ACPI中的CPU定义,因为Mac不能正确支持B550和更新的主板中使用的ACPI。仅无threadripper的机器以及B550、A520和更新版本需要,X570和更旧版本并不需要。

1
https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/compiled/SSDT-CPUR.aml

SSDT-SBUS-MCHC

修复AppleSMBus。非必需,安装时无需此SSDT。

打开Hackintool并点击PCI选项卡,在SubClass下查找SMBus设备,即可找到其ACPI路径。也可在Windows下通过设备管理器,查找SMBus设备并查看其BIOS名称。

获取以下示例。

1
https://github.com/acidanthera/OpenCorePkg/blob/master/Docs/AcpiSamples/Source/SSDT-SBUS-MCHC.dsl

需要修改的设备路径如下,修改为上面找到的SMBus设备路径即可。

1
2
3
4
5
6
7
External (_SB_.PCI0, DeviceObj)
External (_SB_.PCI0.SBUS.BUS0, DeviceObj)
Scope (_SB.PCI0)
{
...
}
Device (_SB.PCI0.SBUS.BUS0

编译并放置后,可在终端输入以下命令以查看是否工作。

1
kextstat | grep -E "AppleSMBusController|AppleSMBusPCI"

IRQ SSDT

使用SSDTTime即可。

【进阶】对于HP Compaq DC7900

需要以下SSDT。

1
https://github.com/khronokernel/trashOS/blob/master/HP-Compaq-DC7900/0.6.1%20HP%20EFI/EFI/OC/ACPI/SSDT-CSR-HPET.aml

在OpenCore配置文件的ACPI-Patch添加以下内容。

1
2
3
Comment: change CRES to XCRES
Find: 48504554085F4849440C41D00103085F5549440A010843524553
Replace: 48504554085F4849440C41D00103085F5549440A010858524553

FixShutdown-USB-SSDT

用于替代FixShutdown。

1
2
3
4
https://github.com/dortania/OpenCore-Post-Install/blob/master/extra-files/FixShutdown-USB-SSDT.dsl

# 搭配以下更名补丁
https://github.com/dortania/OpenCore-Post-Install/blob/master/extra-files/FixShutdown-Patch.plist

SSDT生成

可使用SSDTTime生成部分SSDT,具体如下。

1
2
3
4
5
6
IRQ patch
SSDT-EC(注意没有SSDT-EC-USBX,可手动添加SSDT-USBX)
SSDT-PLUG
SSDT-PMC
SSDT-AWAC/RTC0
SSDT-RHUB

注意,若进行FixHPET,还需要将oc_patches.plist合并到原来的配置文件中,具体为添加ACPI-Patch部分。

SSDT制作

基础知识

外部引用

由于SSDT仅为DSDT的一部分,在该SSDT中的变量可能并不在这段代码中定义,在编译时则会出现对象不存在错误。因此需要添加外部引用,声明该变量在DSDT中已被定义过。

外部引用通过以下语句完成,它应当填到DefinitionBlock的下面。

1
External ([字段名(包含路径)], [字段对象])

在DSDT中搜索需要添加的外部字段,一般所得到的第一个结果即为其字段定义,字段定义与字段对象的对应关系如下表。编译不报错时,添加外部引用完成。

添加外部引用的示例可参照电池修补过程。

字段定义 字段对象 含义 示例
Name (GZXB, 0) IntObj 整数 External (GZXB, IntObj)
Field (…){…, OSYS,16, …} FieldUnitObj 字段单元 External (OSYS, FieldUnitObj)
Mutex (BATM, 0x07) MutexObj 互斥体 External (_SB.PCI0.LPCB.H_EC.BATM, MutexObj)
Name (BPKH, Package (0x07){……}) PkgObj External (_SB.PCI0.LPCB.H_EC.BAT1.BPKH, PkgObj)
Device (TPD0) DeviceObj 设备 External (_SB.PCI0.I2C1.TPD0, DeviceObj)
Method (_STA, 0, NotSerialized) MethodObj 函数 External (_SB.PCI0.I2C1.TPD0._STA, MethodObj)
OperationRegion (GNVS, SystemMemory, 0x7A4E7000, 0x0866) OpRegionObj 操作区 External (GNVS, OpRegionObj)
Event (XXXX) EventObj 事件 External (XXXX, EventObj)
ThermalZone (THRM) ThermalZoneObj 温控区 External (THRM, ThermalZoneObj)
CreateField (AAAA, Zero, BBBB) BuffFieldObj 缓冲区 External (_SB.PCI0._CRS.BBBB, BuffFieldObj)
Name (BPKH, Buffer (0x07){……}) BuffObj 缓冲 External (BPKH, BuffObj)
/ UnknownObj 未知 External (_SB.EROR, UnknownObj)
Name (MSTR,"ASL") StrObj 字符串 External (_PR.MSTR, StrObj)
PowerResource (USBC, 0, 0) PowerResObj 电源资源 External (_SB.PCI0.XDCI, PowerResObj
Processor (PR00, 0x01, 0x00001810, 0x06) ProcessorObj 处理器 External (_SB.PR00, ProcessorObj)
/ DDBHandleObj
偏移量

以下代码中GNVS可以替换为任意名称,因为0x100, Zero指向该地址的范围,偏移量地址已经被确定。而OOXX可以用0x1E代替,因为首先要保证的是字段的偏移量正确,故OOXX与OOX1互换,其数据也会跟着变化。

偏移量以字节为单位,一字节等于8位,故OOX1的偏移量为0x1E+1=0x20。

1
2
3
4
5
6
7
8
9
Name (OOXX, Zero)
OperationRegion (GNVS, SystemMemory, 0x100, Zero)
Field (GNVS,AnyAcc, Lock, Preserve)
{
Offset(0x1E),
OOXX, 16, // 0x1E
OOX1, 8, // 0x20
......
}
预置变量法开关设备

每个设备的_STA方法用于控制设备开关,返回非零为开,返回零为关。因此通过修改_STA的返回值,可以禁用或启用该设备。

预置变量法即在SSDT中对某些变量预先赋值,使某个设备的_STA按照需求返回零或非零。

一般情况

被修正的变量可能存在于多个地方,对它修正后,在达到预期效果的同时,有可能影响到到其它部件。因此应当尽量修正该设备独有的变量。

预置变量法的示例可参照I2C触控板修补过程。

特殊情况

被修正的变量可能来自硬件信息,只能读取不能写入。这种情况下需要二进制更名和SSDT补丁共同完成。示例原文如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// IM01为只读
// 实际情况IM01不等于0x02,If内的代码无法被执行
OperationRegion (PNVA, SystemMemory, PNVB, PNVL)
Field (PNVA, AnyAcc, Lock, Preserve)
{
...
IM01, 8,
...
}
...
If ((IM01 == 0x02))
{
...
}

为修改IM01,需要将IM01重命名,然后直接通过操作系统而非IM01作为判断条件。假设重命名为XM01,则重命名如下。

1
2
3
Comment: change IM01 to IM01
Find: 49 4D 30 31 08
Replace: 58 4D 30 31 08

补丁如下。该补丁表示如果操作系统不是Mac,则将IM01恢复为原值。

1
2
3
4
5
6
7
8
9
Name (IM01, 0x02)
If (_OSI ("Darwin"))
{
...
}
Else
{
IM01 = XM01 /* 同原始ACPI变量的路径 */
}

对于仅包含返回设备状态的使能位和根据条件判断返回的使能位的_STA方法,可以直接将该方法引用为IntObj并赋值。示例如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 示例一
Method (_STA, 0, NotSerialized)
{
If ((XXXX == Zero))
{
Return (Zero)
}
Return (0x0F)
}

// 示例二
Method (_STA, 0, NotSerialized)
{
Return (0x0F)
}

// 示例三
Name (_STA, 0x0F)

补丁如下。该方法有效的原因是_STA方法在操作系统OSPM模块对设备状态评估和初始化的优先级高于_INI_ADR_HID,且_STA的返回值本身也是整数Integer。

1
2
3
External (_SB_.PCI0.XXXX._STA, IntObj)

\_SB.PCI0.XXXX._STA = Zero

不可使用该方法的示例如下。原因是_STA方法中还有其它操作,直接让_STA返回会使这些操作失效。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 示例一
Method (_STA, 0, NotSerialized)
{
ECTP (Zero)
If (XXXX == One)
{
Return (0x0F)
{

Return (Zero)
}

// 示例二
Method (_STA, 0, NotSerialized)
{
^^^GFX0.CLKF = 0x03
Return (Zero)
}
基本框架

打开MaciASL,新建文件并将本机DSDT中的DefinitionBlock头复制到文件中。然后将里面的DSDT改为SSDT,即可得到适用于本机的SSDT框架。保存时文件名应当以SSDT-开头。

所有SSDT补丁均需满足该基本框架的需求。以下示例的DefinitionBlock头应当根据本机的具体内容替换。

1
2
3
4
DefinitionBlock ("", "SSDT", 2, "_ASUS_", "Notebook", 0x01072009)
{

}

电池修补

请基于在修改DSDT后设备能够正常显示电量的前提下制作此热补丁。

电池热补丁的基本原理是,新建一个OperationRegion块,在这个新块里动态注入所有的拆分字节数据,同时对原有的未拆分字节保留空位,从而在保证位移量正确的情况下正确注入并引用新的数据。

确认修改位置

打开IORegistryExplorer,查找BAT,记录电池设备名称,本机为SB.PCI0.LPCB.EC0.BAT0。对修补DSDT的补丁进行分析,内容如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 字段拆分
into device label EC0 code_regex B0C3,\s+16, replace_matched begin C3HG,8,C3HF,8, end;
into device label EC0 code_regex B0SN,\s+16, replace_matched begin BSVN,8,BSVM,8, end;
into device label EC0 code_regex B1SN,\s+16 replace_matched begin SBUY,8,SBUP,8 end;

// 替换调用方法
into method label _BIX code_regex \(B0C3, replaceall_matched begin (B1B2(C3HG,C3HF), end;
into method label BIFA code_regex \(B0SN, replaceall_matched begin (B1B2(BSVN,BSVM), end;
into method label BIFA code_regex \(B1SN, replaceall_matched begin (B1B2(SBUY,SBUP), end;

// 数据处理方法
into method label B1B2 remove_entry;
into definitionblock code_regex . insert
begin
Method (B1B2, 2, NotSerialized)\n
{\n
Return(Or(Arg0, ShiftLeft(Arg1, 8)))\n
}\n
end;

可以得出,实际修改的字节数据如下。

1
2
3
B0C3->B1B2(C3HG,C3HF)
B0SN->B1B2(BSVN,BSVM)
B1SN->B1B2(SBUY,SBUP)

故需要拆解的字节有B0C3、B0SN、B1SN,需要添加的额外方法(Method)为B1B2。比对原DSDT和已修改好的DSDT,查找调用到这些变化过的字段的Method位置,以及需要添加的Method出现位置。本机调用到B0C3、B0SN、B1SN的Method为BIFA和_BIX,需添加的额外方法B1B2在原DSDT中不存在,在修改过的DSDT中位于根目录。至此所有需要修改的地方已完全确定。

数据插入

打开MaciASL,新建一个SSDT框架,如下。

1
2
3
4
5
// xxxx用说找到的电池设备名(此处为BAT0)替换
DefinitionBlock ("", "SSDT", 2, "hack", "xxxx", 0x00000000)
{

}

打开原DSDT并搜索EmbeddedControl,复制整个OperationRegion到这个热补丁内。注意要把整个OperationRegion复制过来,即从OperationRegion行始,到第一个}止。

然后把调用到变化字段的Method和所有额外添加的Method复制到OperationRegion后。对于本机而言,需复制OperationRegion段、Method (BIFA)、Method (_BIX)、Method (B1B2),故完成后代码结构应如下所示。注意,在同一个设备下的Method需放到一起。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
OperationRegion (ECOR, EmbeddedControl, Zero, 0xFF)
Field (ECOR, ByteAcc, Lock, Preserve)
{
Offset (0x04),
......
}

Method (BIFA, 0, NotSerialized)
{
......
}

Method (_BIX, 0, NotSerialized)
{
......
}

Method (B1B2, 2, NotSerialized)
{
Return (Or (Arg0, ShiftLeft (Arg1, 0x08)))
}
添加位置代码

在代码块前需添加它们的位置代码,以使BIOS修补时有迹可循。在代码块的前后分别用以下代码框住即可,注意xxxx为位置,需要用绝对路径。

1
2
3
4
Scope (xxxxx)
{

}

以本机为例,本机的OperationRegion和BIFA方法均在_SB.PCI0.LPCB.EC0下,而_BIX方法位于_SB.PCI0.LPCB.EC0的BAT0设备下。因此将OperationRegion和BIFA用Scope (_SB.PCI0.LPCB.EC0)框住,而_BIX方法则用Scope (_SB.PCI0.LPCB.EC0.BAT0)框住,如下。注意,B1B2和B1B4方法放置于根目录,故无需位置代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
DefinitionBlock ("", "SSDT", 2, "hack", "BAT0", 0x00000000)
{

// OperationRegion和BIFA
Scope (_SB.PCI0.LPCB.EC0)
{
OperationRegion (ECOR, EmbeddedControl, Zero, 0xFF)
Field (ECOR, ByteAcc, Lock, Preserve)
{
......
}

Method (BIFA, 0, NotSerialized)
{
......
}
}

// _BIX
Scope (_SB.PCI0.LPCB.EC0.BAT0)
{
Method (_BIX, 0, NotSerialized)
{
......
}
}

// B1B2
Method (B1B2, 2, NotSerialized)
{
Return (Or (Arg0, ShiftLeft (Arg1, 0x08)))
}
}
添加外部引用

完成以上步骤后进行编译,并根据相应错误添加外部引用。

首先添加设备引用。以上面代码为例,设备_SB.PCI0.LPCB.EC0_SB.PCI0.LPCB.EC0.BAT0被引用,故需用以下语句进行声明。

1
2
// xxxx是设备地址
External (xxxx, DeviceObj)

该部分语句需添加到DefinitionBlock的下面,故代码如下,其中DeviceObj表示这是一个ACPI设备。再次编译,有关设备的报错均已消失。

1
2
3
4
5
6
7
DefinitionBlock ("", "SSDT", 2, "hack", "BAT0", 0x00000000)
{
External (_SB.PCI0.LPCB.EC0, DeviceObj)
External (_SB.PCI0.LPCB.EC0.BAT0, DeviceObj) // 可以不写这行
Scope (_SB.PCI0.LPCB.EC0)
{
......

然后根据报错,继续在DSDT里搜索其他的报错代码。如对于BIXT,它是BAT0设备下的一个字段,在DSDT查询到的第一个结果是Name (BIXT,因此用以下代码进行外部引用。

1
External (_SB.PCI0.LPCB.EC0.BAT0.BIXT, IntObj)

对于其余变量方法同理,字段定义与字段对象的对应关系见前面所列出的表格。

字节处理

首先需要把OperationRegion和Field里的字段重命名。以本机为例,由ECOR重命名为ECAG,如下。

1
2
OperationRegion (ECAG, EmbeddedControl, Zero, 0xFF)
Field (ECAG, ByteAcc, Lock, Preserve)

然后要使字段有正确的偏移量,可把Field里所有不拆分的字节数据段名字去掉,只保留空位,如ACST, 1,清空变量名后变为, 1,。示例如下。

1
2
3
4
5
6
7
8
9
10
11
Offset (0x93),
TH00, 8,
TH01, 8,
TH10, 8,
TH11, 8,
Offset (0xBE),
, 16,
, 16,
, 16,
XC30, 8,
XC31, 8,

或可采用以下注释的形式。

1
2
3
4
5
6
7
8
9
10
11
Offset (0x93),
TH00, 8,
TH01, 8,
TH10, 8,
TH11, 8,
Offset (0xBE),
/*B0TM*/, 16,
/*B0C1*/, 16,
/*B0C2*/, 16,
XC30, 8,
XC31, 8,

或可手动计算偏移量,如下。

1
2
3
4
5
6
7
8
Offset (0x93),
TH00, 8,
TH01, 8,
TH10, 8,
TH11, 8,
Offset (0xC4), // 原本为0xBE,加上三个16字节的偏移量后变为0xC4
XC30, 8,
XC31, 8,

修改完成后,将之前的电量补丁Patch使其生效,然后编译并保存。

添加更名补丁

将热补丁中从原始DSDT复制过来的Method名全部进行修改,如热补丁中有从DSDT复制过来的代码Method (BIFA, 1, NotSerialized),则BIFA需要更名。此处以更名为BIGA为例,打开config.plist,添加以下更名规则即可。

1
2
3
Comment: change BIFA(1, N) to BIGA(1, N)
Find: 42494641 01
Replace: 42494741 01

若所需要更改的方法名位于电池设备(即BAT0)内,则在Tgtbridge栏还应加入该电池设备名的16进制数,如下。

1
2
3
4
Comment: change _BIX(1, N) to XBIX(1, N) in BAT0
Find: 5F424958 01
Replace: 58424958 01
Tgtbridge: 42415430

但如果添加Tgtbridge后电池补丁反而失效,则将Tgtbridge值删除。

添加_OSI判断

在已经完成的补丁文件中,在每一个Method的开始部分加上_OSI系统判断并在结尾处回调原始方法,示例如下。

1
2
3
4
5
6
7
8
9
10
11
Method (_BIF, 0, NotSerialized)
{
If (_OSI ("Darwin"))
{
// 修改过的方法内容
}
Else
{
Return (XBIF ()) // XBIF为修改后的方法名,即此处为change _BIF to XBIF
}
}

Else后面的代码为回调原始方法,如果原始方法没有出现Return语句,则可直接以XBIF()的方式回调。如果原始方法的代码中出现了Return语句,则在回调时也需要以Return形式回调原方法,示例如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Method (SMTF, 1, NotSerialized)
{
If (_OSI ("Darwin"))
{
If ((Arg0 == Zero))
{
Return (B1B2 (B0ET, B1ET))
}

If ((Arg0 == One))
{
Return (Zero)
}

Return (Zero)
}
Else
{
Return (XMTF (Arg0))
}
}
完成修补

将上述SSDT保存为aml文件,放到引导器的ACPI部分即可。

特殊处理
惠普笔记本ACEL设备禁止

部分惠普笔记本配备机械硬盘防护传感器。该设备实际为一个加速度传感器,即便没有驱动也能保持运行,持续向EC中读写数据,会导致电池状态刷新异常。

在Windows下确认该设备ACPI名称为ACEL后,可通过ACPI更名其_STA,并在热补丁中要求macOS下禁止该设备即可。

ECRD和ECWT读写控制

部分机器的ACPI对于EC作用域下的寄存器读写有严格控制,有时需要修改其中的代码以解除限制。暂时无相关解决方案。

双电池系统

对于单块物理电池,禁用另一个电池设备即可,一般为BAT1。SSDT示例如下,其中BAT1路径根据实际替换。

在OpenCore中,加载顺序为主补丁-禁用BAT1补丁。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// battery for WTX30,WTX40,X260,X1C2014,X1C2016
//
// In config ACPI, _STA to XSTA
// Count: 1
// Find: 5F 53 54 41
// Replace: 58 53 54 41
// Skip: 12
// TableSignature: 44 53 44 54
//
// battery for WTX50,WTX60,X1C2015
//
// In config ACPI, _STA to XSTA
// Count: 1
// Find: 5F 53 54 41
// Replace: 58 53 54 41
// Skip: 11
// TableSignature: 44 53 44 54
//
DefinitionBlock ("", "SSDT", 2, "OCLT", "BAT1-off", 0)
{
External(_SB.PCI0.LPC.EC.BAT1, DeviceObj)
External(_SB.PCI0.LPC.EC.BAT1.XSTA, MethodObj)

Scope(\_SB.PCI0.LPC.EC.BAT1)
{
Method(_STA)
{
If (_OSI ("Darwin"))
{
Return (0)
}
Else
{
Return (\_SB.PCI0.LPC.EC.BAT1.XSTA ())
}
}
}
}
// EOF

对于两块物理电池,更改两块电池设备的ACPI _HID名称使其保持运行的情况下不被电池驱动识别,同时新建一个BATC设备用于合并计算两块电池的信息和状态,代替原来两块电池设备的代码为驱动提供信息。

分别使用SSDT-Notify-LPC和SSDT-OCBATC-TP-LPC进行实现,链接如下。注意根据DSDT的相关内容修改补丁,如3代机器的_Q4C的内容和样本内容不同,4/5/6/7代机器无_Q4C,7代+机器有BFCC等。

在OpenCore中,加载顺序为主补丁-BATC设备补丁-Notify补丁。

1
2
3
4
5
# SSDT-Notify-LPC
https://github.com/daliansky/OC-little/blob/master/08-%E7%94%B5%E6%B1%A0%E8%A1%A5%E4%B8%81/08-1-Thinkpad/%E5%90%84%E6%9C%BA%E5%9E%8B%E7%94%B5%E6%B1%A0%E8%A1%A5%E4%B8%81/SSDT-Notify-LPC.dsl

# SSDT-OCBATC-TP-LPC
https://github.com/daliansky/OC-little/blob/master/08-%E7%94%B5%E6%B1%A0%E8%A1%A5%E4%B8%81/08-1-Thinkpad/%E5%90%84%E6%9C%BA%E5%9E%8B%E7%94%B5%E6%B1%A0%E8%A1%A5%E4%B8%81/SSDT-OCBATC-TP-LPC.dsl

I2C触控板修补

该SSDT不涉及任何的ACPI更名。

修补准备

按照与修改DSDT时相同的方法,确定设备路径和APIC Pin,并放置VoodooI2C驱动。

禁用原设备
通过预置变量法

本方法在本机上通过Clover引导时可行,通过OpenCore引导时不起作用。

用Macisal打开本机DSDT,查找触控板设备名称,此处为ETPD。观察其_STA方法,该方法用于控制设备的开启与关闭,返回0x0F时为开启,返回Zero时为关闭。示例如下。

1
2
3
4
5
6
7
8
9
Method (_STA, 0, NotSerialized)  // _STA: Status
{
If (((TPIF != One) || (DSYN && One)))
{
Return (Zero)
}

Return (0x0F)
}

通过简单的代码知识,可知若TPIF不等于1或DSYN不等于0,则会返回Zero,从而禁用该设备。

在DSDT中搜索TPIF,发现该变量仅在此处被引用。同理搜索DSYN,发现该变量有在其它地方被引用。因此选择改变TPIF而非DSYN的值,以避免对其它设备的影响。此处将TPIF设为0即可。

在DSDT中搜索TPIF,其定义示例如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
Scope (_SB)
{
OperationRegion (ASIO, SystemMemory, ASIB, 0x09)
Field (ASIO, AnyAcc, NoLock, Preserve)
{
ASIS, 32,
TPIF, 8,
TPDI, 8,
TPLP, 8,
TPLI, 8,
TPHI, 8
}
}

可见TPIF是一个FieldUnitObj,因此可得如下补丁示例。由于TPIF在Scope (_SB)内,而_SB即为根目录,因此补丁中可用\表示。

注意,上述过程仅为示例,用于阐述预置变量法的基本流程。具体的变量类型和数值设置需要根据不同的DSDT做出相应的调整。

1
2
3
4
5
6
7
8
9
10
11
12
DefinitionBlock ("", "SSDT", 2, "_ASUS_", "Notebook", 0x01072009)
{
External (TPIF, FieldUnitObj)

Scope (\)
{
If (_OSI ("Darwin"))
{
TPIF = Zero
}
}
}
通过_STA修改法

新建一个SSDT框架,如下。

1
2
3
4
DefinitionBlock ("", "SSDT", 2, "_ASUS_", "Notebook", 0x01072009)
{

}

在其中添加Scope作用域,路径为原触控板设备的路径,此处为ETPD。

1
2
3
4
5
6
7
DefinitionBlock ("", "SSDT", 2, "_ASUS_", "Notebook", 0x01072009)
{
Scope (_SB.PCI0.I2C1.ETPD)
{

}
}

把以下_STA方法复制到Scope作用域中。

1
2
3
4
5
6
7
8
9
10
11
Method (_STA, 0, NotSerialized)
{
If (_OSI ("Darwin"))
{
Return (Zero)
}
Else
{
Return (XSTA())
}
}

根据添加外部引用的相关办法,添加对ETPD和XSTA的相关引用。其中XSTA为ETPD的原_STA方法,后面会通过更名的方式将其改为XSTA,因此上述注入的新_STA方法意为在系统不为Mac时,调用XSTA即原_STA方法。

完整补丁如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
DefinitionBlock ("", "SSDT", 2, "DELL", "CBX3", 0x01072009)
{
External (_SB.PCI0.I2C0.ETPD,DeviceObj)
External (_SB.PCI0.I2C0.ETPD.XSTA,MethodObj)

Scope (_SB.PCI0.I2C0.TPD0)
{
Method (_STA, 0, NotSerialized) // _STA: Status
{
If (_OSI ("Darwin"))
{
Return (Zero)
}
Else
{
Return (XSTA())
}
}
}
}

在config.plist中添加以下重命名补丁,示例如下。

1
2
3
Comment:change _STA(0,N) to XSTA(0,N)
Find:5F535441 00A01390 929354
Replace:58535441 00A01390 929354
启用GPIO

DSDT搜索Device (GPI0,观察其_STA方法,示例如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Method (_STA, 0, NotSerialized)
{
If ((SBRG == Zero))
{
Return (Zero)
}

If ((GPEN == Zero))
{
Return (Zero)
}

Return (0x0F)
}

同样使用预置变量法。观察以上代码,可知启用GPI0需要SBRG和GPEN都不等于0。搜索SBRG,发现该变量被多处引用。同理搜索GPEN,发现该变量仅本处被引用。考虑到SBRG可能本来就不为0,因此尝试只设定GPEN。

在DSDT中搜索SBRG和GPEN,其定义示例如下。

1
2
3
4
5
6
7
8
9
10
11
// 这里就是根目录,没有Scope()

OperationRegion (PNVA, SystemMemory, PNVB, PNVL)
Field (PNVA, AnyAcc, Lock, Preserve)
{
...
SBRG, 32,
...
GPEN, 8,
...
}

可见GPEN是一个FieldUnitObj,因此可得如下补丁示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// GPI0 enable
DefinitionBlock("", "SSDT", 2, "OCLT", "GPI0", 0)
{
External(GPEN, FieldUnitObj)

Scope (\)
{
If (_OSI ("Darwin"))
{
GPEN = 1
}
}
}
//EOF
新建热补丁

新建一个SSDT框架,如下。

1
2
3
4
DefinitionBlock ("", "SSDT", 2, "_ASUS_", "Notebook", 0x01072009)
{

}

用MaciASL打开系统的DSDT,搜索触控板名称,本机为ETPD,路径为_SB.PCI0.I2C1.ETPD。在新建的SSDT中,首先添加Scope域,注意小括号内为除触控板名称外的路径。然后将触控板名称对应的整个Device复制进去,此处为Device (ETPD)。完成后形式如下。

1
2
3
4
5
6
7
8
9
10
DefinitionBlock ("", "SSDT", 2, "_ASUS_", "Notebook", 0x01072009)
{
Scope (_SB.PCI0.I2C1)
{
Device (ETPD)
{
...
}
}
}

此处也可以写成如下形式。

1
2
3
4
5
6
7
DefinitionBlock ("", "SSDT", 2, "_ASUS_", "Notebook", 0x01072009)
{
Device (_SB.PCI0.I2C1.ETPD)
{
...
}
}

将该SSDT中的ETPD进行改名,此处改为TPXX,该名称应当在DSDT中未出现过。然后替换_STA部分为以下代码。

1
2
3
4
5
6
7
8
9
10
11
Method (_STA, 0, NotSerialized)
{
If (_OSI ("Darwin"))
{
Return (0x0F)
}
Else
{
Return (Zero)
}
}

在禁用原设备中,若使用的是预置变量法,则在该SSDT中搜索上述用到的变量,此处为TPIF。若有类似If(TPIF...)的语句,则修改为If(one)

在该SSDT中搜索OSYS。若有,则注释以下内容。

1
2
3
4
If (LLess (OSYS, 0x07DC))
{
SRXO (GPDI, One)
}
移除APIC中断控制器

在该SSDT中搜索_CRS方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Method (_CRS, 0, Serialized)
{
Name (SBFI, ResourceTemplate ()
{
I2cSerialBusV2 (0x0015, ControllerInitiated, 0x00061A80,
AddressingMode7Bit, "\\_SB.PCI0.I2C1",
0x00, ResourceConsumer, , Exclusive,
)
Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, ,, )
{
0x0000006D,
}
})
Return (SBFI)
}

若代码类似如上,则将Name (SBFI改为Name (SBFB,并删除整个Interrupt()函数,修改后变为如下。

1
2
3
4
5
6
7
8
9
10
11
Method (_CRS, 0, Serialized)
{
Name (SBFB, ResourceTemplate ()
{
I2cSerialBusV2 (0x0015, ControllerInitiated, 0x00061A80,
AddressingMode7Bit, "\\_SB.PCI0.I2C1",
0x00, ResourceConsumer, , Exclusive,
)
})
Return (SBFI)
}

在该SSDT中定位到_CRS方法,确保所有返回语句都改成以下内容。

1
2
3
4
5
// 若该SSDT中没有I2CM,选择该语句
Return (ConcatenateResTemplate (SBFB, SBFG))

// 若该SSDT中有I2CM,选择该语句
Return (ConcatenateResTemplate (I2CM (I2CX, BADR, SPED), SBFG))

示例如下。

1
2
3
4
5
6
7
8
9
10
11
Method (_CRS, 0, Serialized)
{
Name (SBFB, ResourceTemplate ()
{
I2cSerialBusV2 (0x0015, ControllerInitiated, 0x00061A80,
AddressingMode7Bit, "\\_SB.PCI0.I2C1",
0x00, ResourceConsumer, , Exclusive,
)
})
Return (ConcatenateResTemplate (SBFB, SBFG))
}
GPIO固定
代码修补

在该SSDT中寻找类似如下的代码。

1
2
3
4
5
6
7
8
9
Name (SBFG, ResourceTemplate ()
{
GpioInt (Level, ActiveLow, ExclusiveAndWake, PullDefault, 0x0000,
"\\_SB.PCI0.GPI0", 0x00, ResourceConsumer, ,
)
{ // Pin list
0x0000
}
})

若有该代码,则系统会自动注入GPIO Pin,可跳过GPIO Pin的计算与填入。若没有,则需要将该段代码复制到TPXX的根目录,示例如下。

1
2
3
4
5
6
7
8
9
10
11
Device (TPXX){
Name (SBFG, ResourceTemplate ()
{
GpioInt (Level, ActiveLow, ExclusiveAndWake, PullDefault, 0x0000,
"\\_SB.PCI0.GPI0", 0x00, ResourceConsumer, ,
)
{ // Pin list
0x0000
}
})
}
计算GPIO Pin

将上面得到的APIC Pin化为十进制,此处为6D,化成十进制为109。带入以下公式计算,计算完成后将答案重新化为十六进制,所得即为GPIO Pin的值。

对于Skylake平台,本机适用,所得为85=0x55。

1
2
3
4
5
6
If APICPIN > 47 And APICPIN <= 79 Then     
GPIOPIN = APICPIN - 24
GPIOPIN2 = APICPIN + 72
ElseIf APICPIN > 79 And APICPIN <= 119 Then
GPIOPIN = APICPIN - 24
End If

对于CoffeeLake-H平台如下。

1
2
3
4
5
6
7
8
9
10
11
12
If APICPIN > 47 And APICPIN <= 71 Then   
GPIOPIN = APICPIN - 16
GPIOPIN2 = APICPIN + 240
If APICPIN > 47 And APICPIN <= 59 Then GPIOPIN3 = APICPIN + 304
ElseIf APICPIN > 71 And APICPIN <= 95 Then
GPIOPIN = APICPIN - 8
GPIOPIN3 = APICPIN + 152
GPIOPIN2 = APICPIN + 120
ElseIf APICPIN > 95 And APICPIN <= 119 Then
GPIOPIN = APICPIN
If APICPIN > 108 And APICPIN <= 115 Then GPIOPIN2 = APICPIN + 20
End If

对于CoffeeLake-LF/Whiskylake平台如下。

1
2
3
4
5
6
7
8
9
10
If APICPIN > 47 And APICPIN <= 71 Then      
GPIOPIN = APICPIN - 16
GPIOPIN2 = APICPIN + 80
ElseIf APICPIN > 71 And APICPIN <= 95 Then
GPIOPIN2 = APICPIN + 184
GPIOPIN = APICPIN + 88
ElseIf APICPIN > 95 And APICPIN <= 119 Then
GPIOPIN = APICPIN
If APICPIN > 108 And APICPIN <= 115 Then GPIOPIN2 = APICPIN - 44
End If
【进阶】其它方法

打开Hackintool,在PCI选项卡下可以查看触控板类型,包括SunrisePoint、CannonPoint(Lake)[Coffee Lake(-R)]和CannonPoint(Lake)[Whiskylake]。

打开下面相应平台的第一个链接,查找设备的十六进制APIC Pin值,并记录左侧标签值(只需记录GPP_XYY_IRQ中的XYY部分),若有多个标签值,需全部记录。再打开第二个链接,搜索上面所记录的XYY,记下右侧的数值(十进制),此即为触控板的硬件引脚号。

1
2
3
4
5
6
7
8
9
10
11
// SunrisePoint[Kaby Lake(-R)]
https://github.com/coreboot/coreboot/blob/master/src/soc/intel/skylake/include/soc/gpio_defs.h#L43
https://github.com/coreboot/coreboot/blob/master/src/soc/intel/skylake/include/soc/gpio_soc_defs.h#L37

// CannonPoint(Lake)[Coffee Lake-R]
https://github.com/coreboot/coreboot/blob/master/src/soc/intel/cannonlake/include/soc/gpio_defs_cnp_h.h#L42
https://github.com/coreboot/coreboot/blob/master/src/soc/intel/cannonlake/include/soc/gpio_soc_defs_cnp_h.h#L40

// CannonPoint(Lake)[Whiskylake]
https://github.com/coreboot/coreboot/blob/master/src/soc/intel/cannonlake/include/soc/gpio_defs.h#L42
https://github.com/coreboot/coreboot/blob/master/src/soc/intel/cannonlake/include/soc/gpio_soc_defs.h#L45

对于SunrisePoint,硬件引脚号即为GPIO引脚号。

对于CannonPoint(Lake)[Coffee Lake(-R)]或CannonPoint(Lake)[Whiskylake],前面步骤与上面相同,但得到的硬件引脚号并不是GPIO引脚号,因此还需要进行转换。打开下面转换公式链接,搜索前面记录的GPP_X,得到格式如CHIPSET_GPP(数字, 基数, 终止, GPIO基数)的内容。用所记下的十进制硬件引脚号减去基数,再加上GPIO基数,就是最后的十进制的GPIO引脚号。注意,X_NO_GPIO表示此引脚号无效。

1
2
3
4
5
// CannonPoint(Lake)[Coffee Lake-R]
https://github.com/coolstar/VoodooGPIO/blob/master/VoodooGPIO/CannonLake-LP/VoodooGPIOCannonLakeLP.hpp#L366

// CannonPoint(Lake)[Whiskylake]
https://github.com/coolstar/VoodooGPIO/blob/master/VoodooGPIO/CannonLake-H/VoodooGPIOCannonLakeH.hpp#L414

得到十进制的GPIO引脚后,需将数字转换为十六进制。

填入GPIO Pin

在某些极端状况下,只能尝试比较常见的GPIO Pin。如SunrisePoint平台可尝试0x17、0x1b、0x34和0x55。

计算完成后把GPIO Pin填入到SBFG的Pin list,示例如下。

1
2
3
4
5
6
7
8
9
Name (SBFG, ResourceTemplate ()
{
GpioInt (Level, ActiveLow, ExclusiveAndWake, PullDefault, 0x0000,
"\\_SB.PCI0.GPI0", 0x00, ResourceConsumer, ,
)
{ // Pin list
0x55
}
})
添加外部引用

点击编译并根据报错添加外部引用,过程可参照电池修补部分。

完成修补

至此触控板热补丁已完成,将上述生成的所有SSDT都另存为aml,放到引导器的ACPI部分。重启后打开IORegistryExplorer,查找触控板名称(ETPD),若无此设备则禁用成功。查找新建的触控板设备(TPXX),若有此设备则触控板已处于中断模式。

系统安装与维护

修改InstallESD.dmg

InstallESD.dmg位于macOS系统的安装包内,修改其内容(如删除部分kexts)可能会使安装过程更加顺利。

打开磁盘工具,点击菜单栏上的映像-转换,选择要转换的镜像,映像格式选择读/写。打开转换好的dmg,修改完成后再次转换,映像格式选择压缩即可。

去除机型检查

可用Flat Package Editor或其它工具编辑OSInstall.mpkg,让Distribution脚本在hwbeModelCheck函数中总是返回true。编辑完成后在终端输入建议以下命令以重建映像。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Original.dmg为原始镜像
# OSInstall.mpkg为修改过的镜像
mkdir RO
hdiutil mount Original.dmg -noverify -noautoopen -noautoopenrw -noautofsck -mountpoint RO cp RO/.DS_Store DS_STORE
hdiutil detach RO -force
rm -rf RO
hdiutil convert Original.dmg -format UDRW -o ReadWrite.dmg
mkdir RW
xattr -c OSInstall.mpkg
hdiutil mount ReadWrite.dmg -noverify -noautoopen -noautoopenrw -noautofsck -mountpoint RW cp OSInstall.mpkg RW/System/Installation/Packages/OSInstall.mpkg
killall Finder fseventsd
rm -rf RW/.fseventsd
cp DS_STORE RW/.DS_Store
hdiutil detach RW -force
rm -rf DS_STORE RW

恢复盘

FireWolf OS X PE

类似Windows PE,FireWolf OS X PE可视作macPE,可为Mac提供恢复环境。下载链接如下。

1
https://pe.firewolf.app/manual/downloads/thankyou.html

安装

在Windows下用Etcher刻录到U盘即可。

引导启动

在启动之前需先确保系统完整性保护(SIP)中已允许加载任意Recovery系统,即启用CSR标志位CSR_ALLOW_ANY_RECOVERY_OS,修改Clover配置文件中的Rt Variables-CsrActiveConfig为0x3E7即可。

使用引导High Sierra的Clover文件,可以顺利启动该恢复盘。

系统调试与日志

日志内容

previous shutdown cause:5

Mac用于说明先前关机原因的代码。可在终端通过以下命令显示。

1
log show --predicate 'eventMessage contains "Previous shutdown cause"' --last 24h

数字具体含义如下。

代码 含义 备注
5 正确关机 通过关机菜单或其他关机命令关机
7 CPU线程错误 尝试安全模式
3 硬关机 按电源按钮强制关机
0 电源断开 对笔记本而言,若电源仍有电,则代表电池或电池控制器出现问题,可尝试重置SMC
-3 温度传感器超出阈值
-14 电流突峰 电问题或电池问题
-20 T2芯片导致的关机
-60 错误的主目录块(badMDBEr) 尝试重装系统
-61 应用程序无响应导致的关机
-62 应用程序无响应导致的重启
-71 SO-DIMM内存温度超出阈值 尝试清除风扇灰尘
-74 电池温度超出阈值 尝试重置SMC
-75 充电器通信问题
-78 充电器电流不正确
-79 电池电流不正确
-86 接近温度超出阈值
-95 CPU温度超出预知阈值 尝试重置SMC
-100 电源温度超出阈值
-102 过压保护导致的关机
-103 电池电压不足
-104 可能与电池有关
-108 可能与内存有关
-112 可能与内存有关
-127 PMU强制关闭
-128 可能与内存有关

内核Panic

可在/Library/Logs/DiagnosticReports目录下找到Panic日志。

错误数字含义

向量偏移值 描述 说明
0 Devide Error 当进行除以零的操作时产生
1 Debug Exceptions 当进行程序单步跟踪调试时,设置了标志寄存器eflags的T标志时产生这个中断
2 NMI Interrupt 由不可屏蔽产生
3 Breakpoint 由断点指令INT3产生,与Debug处理相同
4 INTO Detected Overflow eflags的溢出标志0F引起
5 BOUND Range Exceeded 寻址到有效地址以外引起
6 Invalid Opcode CPU执行发现一个无效的指令操作码
7 Coprocessor Not Available 设备不存在,指协处理器。在两种情况下会产生该中断:CPU遇到一个转意指令并且EM置位;MP和TS都在置位状态,CPU遇到wait或一个转意指令。在这种情况下,处理程序在必要应该更新协处理器的状态
8 Double Exception 双故障出错
9 Coprocessor Segment Overrun 协处理器段超出
10 Invalid Task State Segment CPU切换时发现TSS无效
11 Segment Not Present 描述符所指的段不存在
12 Stack Fault 堆栈溢出或者不存在
13 General Protection 没有符合80386保护机制的(特权机制)操作引起
14 Page Fault 页溢出或不存在
16 Coprocessor Error 协处理器检测到非法操作

错误分析

在Finder切换到/Library/Logs/DiagnosticReports,打开后缀名为panic的文档以获取内核错误报告,示例如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
*** Panic Report ***
panic(cpu 6 caller 0xffffff8008b6f2e9): Kernel trap at 0xffffff7f8c7ba8b1, type 14=page fault

registers:
CR0: 0x000000008001003b, CR2: 0xffffff80639b8000, CR3: 0x0000000022202000, CR4: 0x00000000003627e0
RAX: 0x0000000000000564, RBX: 0x0000000000000564, RCX: 0x0000000000000020, RDX: 0x000000000000002a
RSP: 0xffffff92354ebc80, RBP: 0xffffff92354ebce0, RSI: 0x00000000000fbeab, RDI: 0xffffff92487b9154
R8: 0x0000000000000000, R9: 0x0000000000000010, R10: 0x0000000000000010, R11: 0x0000000000000000
R12: 0xffffff80639b6a70, R13: 0xffffff92354ebdc0, R14: 0xffffff92354ebdd4, R15: 0x0000000000000000
RFL: 0x0000000000010297, RIP: 0xffffff7f8c7ba8b1, CS: 0x0000000000000008, SS: 0x0000000000000010
Fault CR2: 0xffffff80639b8000, Error code: 0x0000000000000000, Fault CPU: 0x6, PL: 0, VF: 1

Backtrace (CPU 6), Frame : Return Address
0xffffff92354eb730 : 0xffffff8008a505f6
0xffffff92354eb780 : 0xffffff8008b7d604
0xffffff92354eb7c0 : 0xffffff8008b6f0f9
0xffffff92354eb840 : 0xffffff8008a02120
0xffffff92354eb860 : 0xffffff8008a5002c
0xffffff92354eb990 : 0xffffff8008a4fdac
0xffffff92354eb9f0 : 0xffffff8008b6f2e9
0xffffff92354ebb70 : 0xffffff8008a02120
0xffffff92354ebb90 : 0xffffff7f8c7ba8b1
0xffffff92354ebce0 : 0xffffff7f8c7ba40f
0xffffff92354ebd60 : 0xffffff7f8c7b85e8
0xffffff92354ebda0 : 0xffffff7f8c7b9db2
0xffffff92354ebe00 : 0xffffff7f8b2b3873
0xffffff92354ebe50 : 0xffffff7f8b2bd473
0xffffff92354ebe90 : 0xffffff7f8b2bcc7d
0xffffff92354ebed0 : 0xffffff8009091395
0xffffff92354ebf30 : 0xffffff800908fba2
0xffffff92354ebf70 : 0xffffff800908f1dc
0xffffff92354ebfa0 : 0xffffff8008a014f7

Kernel Extensions in backtrace:
com.apple.iokit.IOAcceleratorFamily2(376.6) @0xffffff7f8b2b0000->0xffffff7f8b345fff
com.apple.kext.AMDRadeonX4150(1.6) @0xffffff7f8c7b4000->0xffffff7f8cf20fff

BSD process name corresponding to current thread: kernel_task

Mac OS version:
17C88

Kernel version:
Darwin Kernel Version 17.3.0: Thu Nov 9 18:09:22 PST 2017; root:xnu-4570.31.3~1/RELEASE_X86_64
Kernel slide: 0x0000000008600000

从以上内容可知,该错误由14=page fault即页面错误引起,RIP寄存器即程序计数器的值为0xffffff7f8c7ba8b1,CR2寄存器即触发页面错误的内存地址为0xffffff80639b8000,Kernel slide为0x0000000008600000。在kext回溯中,可以看到以下两个kext可能触发该页面错误,从而引起恐慌。

1
2
3
4
5
kext / com.apple.iokit.IOAcceleratorFamily2
加载于 / 0xffffff7f8b2b0000

kext / com.apple.kext.AMDRadeonX4150
加载于 / 0xffffff7f8c7b4000

下载Hopper,链接如下。

1
https://www.hopperapp.com/

打开Hoppeer并在软件中加载/System/Library/Kernels/kernel,单击Modify-Change File Base Address,在Base Address输入Kernel slide加上0x100000的值,即0xffffff8008700000。

重定位后点击G,输入Backtrace中的最后一个地址,即0xffffff8008a014f7。汇编代码片段如下。

1
2
3
4
5
6
7
8
                    _call_continuation:
ffffff8008a014e0 mov rcx, rdi
ffffff8008a014e3 mov rdi, rsi
ffffff8008a014e6 mov rsi, rdx
ffffff8008a014e9 mov rsp, qword [gs:0x30]
ffffff8008a014f2 xor rbp, rbp
ffffff8008a014f5 call rcx
ffffff8008a014f7 mov rdi, qword [gs:0x8]

由堆栈相关知识可知,在调用ffffff8008a014f5处的call时会压入返回地址,此处为0xffffff8008a014f7。同理搜索Backtrace中的倒数第二个地址0xffffff800908f1dc,可得到另一个调用语句的地址。重复以上过程,结果如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
kernel.call_continuation()
0xffffff8008a014f5 call rcx

kernel.IOWorkLoop::threadMain()
0xffffff800908f1d6 call qword [rax+0x1a8]

kernel.IOWorkLoop::runEventSources()
0xffffff800908fb9c call qword [rax+0x120]

kernel.IOInterruptEventSource::checkForWork()
0xffffff8009091392 call r11

com.apple.iokit.IOAcceleratorFamily2.IOAccelEventMachine2::hardwareErrorEvent()
0xffffff7f8b2bcc78 call IOAccelEventMachine2::restart_channel()

com.apple.iokit.IOAcceleratorFamily2.IOAccelEventMachine2::restart_channel()
0xffffff7f8b2bd46d call qword [rax+0x160]

com.apple.iokit.IOAcceleratorFamily2.IOAccelFIFOChannel2::restart()
0xffffff7f8b2b386d call qword [rax+0x208]

com.apple.kext.AMDRadeonX4150.AMDRadeonX4150_AMDAccelChannel::getHardwareDiagnosisReport()
0xffffff7f8c7b9dac call qword [rax+0xb00]

com.apple.kext.AMDRadeonX4150.AMDRadeonX4150_AMDGraphicsAccelerator::writeDiagnosisReport()
0xffffff7f8c7b85e2 call qword [rax+0x258]

com.apple.kext.AMDRadeonX4150.AMDRadeonX4150_AMDAccelChannel::writeDiagnosisReport()
0xffffff7f8c7ba40a call AMDRadeonX4150_AMDAccelChannel::writePendingCommandInfo

com.apple.kext.AMDRadeonX4150.AMDRadeonX4150_AMDAccelChannel::writePendingCommandInfoDiagnosisReport()
0xffffff7f8c7ba8b1 mov r8d, dword [r12+rax*4]

kernel.hndl_alltraps()
0xffffff8008a0211b call _kernel_trap

根据以下内容,可知内核在找到要执行的任务后,首先调用com.apple.iokit.IOAcceleratorFamily2的内核线程,其中调用了restart_channel方法。然后切换到特定的kext即com.apple.kext.AMDRadeonX4150,调用writeDiagnosisReport方法。

在0xffffff7f8c7ba8b1处不是一个call指令,而是mov r8d, dword [r12+rax*4]。该地址即为RIP寄存器的内容,因此可以确定出现panic的指令位置。

根据内核报告,R12=0xffffff80639b6a70,RAX=0x0000000000000564,计算可得传送的地址为0xffffff80639b8000。该地址为fault CR2寄存器的内容。

因此可以猜测,0xffffff80639b8000指向一个未映射的页面,当com.apple.kext.AMDRadeonX4150中的mov指令尝试从该未映射地址读取时,会发生未处理的页面错误,从而导致panic。

Data Hub日志

Data Hub日志中不包括Kernel和Kext的日志。可在终端通过以下命令获取Data Hub日志。

1
ioreg -lw0 -p IODeviceTree | grep boot-log | sort | sed 's/.*<\(.*\)>.*/\1/' | xxd -r -p

UEFI变量日志

可在终端通过以下命令获取UEFI变量日志。

1
nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:boot-log | awk '{gsub(/%0d%0a%00/,"");gsub(/%0d%0a/,"\n")}1'

内核调试套件

内核调试工具包(Kernel Debug Kits,KDK)可从内核和核心kext获取日志信息。

安装

在终端输入以下命令以确定需要下载的KDK版本。

1
sw_vers | grep BuildVersion

打开以下链接,搜索Kernel Debug Kit并下载相应的版本。

1
https://developer.apple.com/download/all/

下载后运行安装包进行安装。禁用系统SIP后,在终端输入以下命令以挂载根目录为可写。

1
2
3
4
5
6
7
8
# Big Sur+
mkdir ~/livemount
diskutil list
# 挂载上面看到的系统盘(不包含 - Data 的盘),此处为/dev/disk5s5
sudo mount -o nobrowse -t apfs /dev/disk5s5 ~/livemount

# Catalina
sudo mount -uw /

然后输入以下命令安装。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Install KDK to System Volume
# Ensure to replace <KDK Version>
# For 10.15 and older, swap livemount with /Volumes/<Target Volume>
sudo ditto /Library/Developer/KDKs/<KDK Version>/System ~/livemount/System

# Rebuild the kernel cache(Big Sur and newer)
sudo kmutil install --volume-root ~/livemount --update-all

# Rebuild the kernel cache(Catalina and older)
sudo kextcache -invalidate /Volumes/<Target Volume>

# Finally, once done editing the system volume
# we'll want to create a new snapshot (Big Sur and newer)
sudo bless --folder ~/livemount/System/Library/CoreServices --bootefi --create-snapshot

完成安装后,需要添加以下启动参数之一。

1
2
3
4
# kasan是一个包含AddressSanitizer的日志密集型内核
kcsuffix=debug(Big Sur已移除)
kcsuffix=development
kcsuffix=kasan

重新启动并在终端输入以下命令以查看当前内核是否已被改变。

1
sysctl kern.osbuildconfig

卸载

禁用系统SIP后,在终端输入以下命令以挂载根目录为可写。

1
2
3
4
5
6
7
8
# Big Sur+
mkdir ~/livemount
diskutil list
# 挂载上面看到的系统盘(不包含 - Data 的盘),此处为/dev/disk5s5
sudo mount -o nobrowse -t apfs /dev/disk5s5 ~/livemount

# Catalina
sudo mount -uw /

然后输入以下命令删除调试内核和kexts。

1
2
3
4
5
6
7
# Revert to old snapshot (Big Sur+)
sudo bless --mount ~/livemount --bootefi --last-sealed-snapshot

# Reset kernel cache (Catalina and older)
sudo rm /System/Library/Caches/com.apple.kext.caches/Startup/kernelcache.de*
sudo rm /System/Library/PrelinkedKernels/prelinkedkernel.de*
sudo kextcache -invalidate /

删除启动参数kcsuffix=后重新启动,然后在终端输入以下命令以查看当前内核是否已被改变。

1
sysctl kern.osbuildconfig

本机文件内容

DSDT

电池

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
Scope (_SB.PCI0.LPCB.EC0)
{
Device (BAT0)
{
Name (_HID, EisaId ("PNP0C0A")) // _HID: Hardware ID
Name (_UID, Zero) // _UID: Unique ID
Name (_PCL, Package (0x01) // _PCL: Power Consumer List
{
PCI0
})
Method (_STA, 0, NotSerialized) // _STA: Status
{
If (BATP (Zero))
{
Return (0x1F)
}
Else
{
Return (0x0F)
}
}

Name (LOW2, 0x012C)
Name (PUNT, One)
Name (LFCC, 0x1770)
Name (NBIF, Package (0x0D)
{
Zero,
0xFFFFFFFF,
0xFFFFFFFF,
One,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
"",
"",
"",
""
})
Name (PBIF, Package (0x0D)
{
One,
0x1770,
0x1770,
One,
0x39D0,
0x0258,
0x012C,
0x3C,
0x3C,
"M3N",
" ",
"LIon",
"ASUSTeK"
})
Name (PBST, Package (0x04)
{
Zero,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF
})
Name (BIXT, Package (0x14)
{
Zero,
Zero,
0x1770,
0x1770,
One,
0x39D0,
0x0258,
0x012C,
Zero,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0x3C,
0x3C,
"M3N",
" ",
"LIon",
"ASUSTeK"
})
Name (NBIX, Package (0x14)
{
Zero,
Zero,
0xFFFFFFFF,
0xFFFFFFFF,
One,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
Zero,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
0xFFFFFFFF,
"",
"",
"",
""
})
Method (FBIF, 5, NotSerialized)
{
Store (Arg0, PUNT)
Store (Arg1, Local1)
Store (Arg2, Local2)
If (LEqual (PUNT, Zero))
{
Multiply (Local1, 0x0A, Local1)
Multiply (Local2, 0x0A, Local2)
}

Store (Arg0, Index (PBIF, Zero))
Store (Local1, Index (PBIF, One))
Store (Local2, Index (PBIF, 0x02))
Store (Local2, LFCC)
Store (Arg3, Index (PBIF, 0x03))
Store (Arg4, Index (PBIF, 0x04))
Divide (Local1, 0x0A, , Local5)
Store (Local5, Index (PBIF, 0x05))
Divide (Local1, 0x64, , Local6)
Store (Local6, Index (PBIF, 0x06))
Store (Local6, LOW2)
Divide (Local1, 0x64, , Local7)
Store (Local7, Index (PBIF, 0x07))
Store (Local7, Index (PBIF, 0x08))
}

Method (CBIF, 0, NotSerialized)
{
If (PUNT)
{
Store (DerefOf (Index (PBIF, 0x04)), Local0)
Store (Zero, Index (PBIF, Zero))
Multiply (DerefOf (Index (PBIF, One)), Local0, Index (PBIF, One))
Multiply (DerefOf (Index (PBIF, 0x02)), Local0, Index (PBIF, 0x02))
Multiply (DerefOf (Index (PBIF, 0x05)), Local0, Index (PBIF, 0x05))
Multiply (DerefOf (Index (PBIF, 0x06)), Local0, Index (PBIF, 0x06))
Multiply (DerefOf (Index (PBIF, 0x07)), Local0, Index (PBIF, 0x07))
Multiply (DerefOf (Index (PBIF, 0x08)), Local0, Index (PBIF, 0x08))
Divide (DerefOf (Index (PBIF, One)), 0x03E8, , Index (PBIF, One))
Divide (DerefOf (Index (PBIF, 0x02)), 0x03E8, , Index (PBIF, 0x02))
Divide (DerefOf (Index (PBIF, 0x05)), 0x03E8, , Index (PBIF, 0x05))
Divide (DerefOf (Index (PBIF, 0x06)), 0x03E8, , Index (PBIF, 0x06))
Divide (DerefOf (Index (PBIF, 0x07)), 0x03E8, , Index (PBIF, 0x07))
Divide (DerefOf (Index (PBIF, 0x08)), 0x03E8, , Index (PBIF, 0x08))
}
}

Method (_BIF, 0, NotSerialized) // _BIF: Battery Information
{
If (LNot (BATP (Zero)))
{
Return (NBIF)
}

If (LEqual (GBTT (Zero), 0xFF))
{
Return (NBIF)
}

BATO ()
BATS (Zero)
Store (BIF9 (), Index (PBIF, 0x09))
Store (BIF0 (), Local0)
Store (BIF1 (), Local1)
Store (BIF2 (), Local2)
Store (BIF3 (), Local3)
Store (BIF4 (), Local4)
If (LNotEqual (Local0, Ones))
{
If (LNotEqual (Local1, Ones))
{
If (LNotEqual (Local2, Ones))
{
If (LNotEqual (Local3, Ones))
{
If (LNotEqual (Local4, Ones))
{
FBIF (Local0, Local1, Local2, Local3, Local4)
CBIF ()
}
}
}
}
}

If (LEqual (PUNT, Zero))
{
Multiply (Local2, 0x0A, Local2)
}

Store (Local2, LFCC)
BATR ()
Return (PBIF)
}

Method (FBST, 4, NotSerialized)
{
And (Arg1, 0xFFFF, Local1)
Store (Zero, Local0)
If (ACAP ())
{
Store (One, Local0)
}

If (Local0)
{
If (CHGS (Zero))
{
Store (0x02, Local0)
}
Else
{
Store (One, Local0)
}
}
Else
{
Store (One, Local0)
}

If (BLLO)
{
Store (0x04, Local2)
Or (Local0, Local2, Local0)
}

Store (0x09, BRAH)
If (And (EB0S, 0x08))
{
Store (0x04, Local2)
Or (Local0, Local2, Local0)
}

If (LGreaterEqual (Local1, 0x8000))
{
Subtract (0xFFFF, Local1, Local1)
}

Store (Arg2, Local2)
If (LEqual (PUNT, Zero))
{
Store (0x09, BRAH)
Multiply (Local1, B0DV, Local1)
Multiply (Local2, 0x0A, Local2)
}

And (Local0, 0x02, Local3)
If (LNot (Local3))
{
Subtract (LFCC, Local2, Local3)
Divide (LFCC, 0xC8, Local4, Local5)
If (LLess (Local3, Local5))
{
Store (LFCC, Local2)
}
}
Else
{
Divide (LFCC, 0xC8, Local4, Local5)
Subtract (LFCC, Local5, Local4)
If (LGreater (Local2, Local4))
{
Store (Local4, Local2)
}
}

If (LNot (ACAP ()))
{
Divide (Local2, MBLF, Local3, Local4)
If (LLess (Local1, Local4))
{
Store (Local4, Local1)
}
}

Store (Local0, Index (PBST, Zero))
Store (Local1, Index (PBST, One))
Store (Local2, Index (PBST, 0x02))
Store (Arg3, Index (PBST, 0x03))
}

Method (CBST, 0, NotSerialized)
{
If (PUNT)
{
Store (0x09, BRAH)
Store (B0DV, Index (PBST, 0x03))
Store (DerefOf (Index (PBST, 0x03)), Local0)
Multiply (DerefOf (Index (PBST, One)), Local0, Index (PBST, One))
Divide (DerefOf (Index (PBST, One)), 0x03E8, , Index (PBST, One))
Multiply (DerefOf (Index (PBST, 0x02)), Local0, Index (PBST, 0x02))
Divide (DerefOf (Index (PBST, 0x02)), 0x03E8, , Index (PBST, 0x02))
}
}

Method (_BST, 0, NotSerialized) // _BST: Battery Status
{
Store (Zero, Index (PBST, Zero))
Store (Ones, Index (PBST, One))
Store (Ones, Index (PBST, 0x02))
Store (Ones, Index (PBST, 0x03))
If (LNot (BATP (Zero)))
{
Store (One, Index (PBST, Zero))
Return (PBST)
}

If (LEqual (GBTT (Zero), 0xFF))
{
Return (PBST)
}

BATO ()
BATS (Zero)
Store (BSTS (), Local0)
Store (BCRT (), Local1)
Store (BRCP (), Local2)
Store (BVOT (), Local3)
If (LNotEqual (Local0, Ones))
{
If (LNotEqual (Local1, Ones))
{
If (LNotEqual (Local2, Ones))
{
If (LNotEqual (Local3, Ones))
{
FBST (Local0, Local1, Local2, Local3)
CBST ()
}
}
}
}

BATR ()
Return (PBST)
}

Method (_BIX, 0, NotSerialized) // _BIX: Battery Information Extended
{
If (LNot (BATP (Zero)))
{
Return (NBIX)
}

If (LEqual (GBTT (Zero), 0xFF))
{
Return (NBIX)
}

_BIF ()
Store (DerefOf (Index (PBIF, Zero)), Index (BIXT, One))
Store (DerefOf (Index (PBIF, One)), Index (BIXT, 0x02))
Store (DerefOf (Index (PBIF, 0x02)), Index (BIXT, 0x03))
Store (DerefOf (Index (PBIF, 0x03)), Index (BIXT, 0x04))
Store (DerefOf (Index (PBIF, 0x04)), Index (BIXT, 0x05))
Store (DerefOf (Index (PBIF, 0x05)), Index (BIXT, 0x06))
Store (DerefOf (Index (PBIF, 0x06)), Index (BIXT, 0x07))
Store (DerefOf (Index (PBIF, 0x07)), Index (BIXT, 0x0E))
Store (DerefOf (Index (PBIF, 0x08)), Index (BIXT, 0x0F))
Store (DerefOf (Index (PBIF, 0x09)), Index (BIXT, 0x10))
Store (DerefOf (Index (PBIF, 0x0A)), Index (BIXT, 0x11))
Store (DerefOf (Index (PBIF, 0x0B)), Index (BIXT, 0x12))
Store (DerefOf (Index (PBIF, 0x0C)), Index (BIXT, 0x13))
If (LEqual (DerefOf (Index (BIXT, One)), One))
{
Store (Zero, Index (BIXT, One))
Store (DerefOf (Index (BIXT, 0x05)), Local0)
Multiply (DerefOf (Index (BIXT, 0x02)), Local0, Index (BIXT, 0x02))
Multiply (DerefOf (Index (BIXT, 0x03)), Local0, Index (BIXT, 0x03))
Multiply (DerefOf (Index (BIXT, 0x06)), Local0, Index (BIXT, 0x06))
Multiply (DerefOf (Index (BIXT, 0x07)), Local0, Index (BIXT, 0x07))
Multiply (DerefOf (Index (BIXT, 0x0E)), Local0, Index (BIXT, 0x0E))
Multiply (DerefOf (Index (BIXT, 0x0F)), Local0, Index (BIXT, 0x0F))
Divide (DerefOf (Index (BIXT, 0x02)), 0x03E8, Local0, Index (BIXT, 0x02))
Divide (DerefOf (Index (BIXT, 0x03)), 0x03E8, Local0, Index (BIXT, 0x03))
Divide (DerefOf (Index (BIXT, 0x06)), 0x03E8, Local0, Index (BIXT, 0x06))
Divide (DerefOf (Index (BIXT, 0x07)), 0x03E8, Local0, Index (BIXT, 0x07))
Divide (DerefOf (Index (BIXT, 0x0E)), 0x03E8, Local0, Index (BIXT, 0x0E))
Divide (DerefOf (Index (BIXT, 0x0F)), 0x03E8, Local0, Index (BIXT, 0x0F))
}

Store (B0C3, Index (BIXT, 0x08))
Store (0x0001869F, Index (BIXT, 0x09))
Return (BIXT)
}

Method (_BTP, 1, NotSerialized) // _BTP: Battery Trip Point
{
ST8E (0x29, 0xFF)
ST8E (0x2A, 0xFF)
ST8E (0x28, 0x0F)
If (LNotEqual (Arg0, Zero))
{
Store (DerefOf (Index (PBIF, 0x04)), Local0)
Multiply (Arg0, 0x03E8, Local1)
Divide (Local1, Local0, Local2, Local3)
If (CHGS (Zero))
{
If (LNotEqual (Local2, Zero))
{
Add (Local3, One, Local3)
}
}

ST9E (0x29, 0xFF, And (Local3, 0xFF))
ShiftRight (Local3, 0x08, Local2)
And (Local2, 0xFF, Local2)
ST9E (0x2A, 0xFF, Local2)
}
}
}
}

SSDT

电池

更名如下。

1
2
3
4
5
6
7
Comment: change BIFA to BIGA
Find: 42494641
Replace: 42494741

Comment: change _BIX to XBIX
Find: 5F424958
Replace: 58424958

SSDT如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
// 使用Catalina用户则需将EC0更改为EC
DefinitionBlock ("", "SSDT", 2, "hack", "BAT0", 0x00000000)
{
External (_SB.PCI0.LPCB.EC0, DeviceObj)
External (_SB.PCI0.LPCB.EC0.BAT0, DeviceObj)
External (_SB.PCI0.LPCB.EC0.BAT0._BIF, MethodObj)
External (_SB.PCI0.LPCB.EC0.BAT0.BIXT, IntObj)
External (_SB.PCI0.LPCB.EC0.BAT0.NBIX, IntObj)
External (_SB.PCI0.LPCB.EC0.BAT0.PBIF, IntObj)
External (_SB.PCI0.LPCB.EC0.BATP, MethodObj)
External (_SB.PCI0.LPCB.EC0.BSLF, IntObj)
External (_SB.PCI0.LPCB.EC0.ECAV, MethodObj)
External (_SB.PCI0.LPCB.EC0.GBTT, MethodObj)

Scope (_SB.PCI0.LPCB.EC0)
{
OperationRegion (ECAG, EmbeddedControl, Zero, 0xFF)
Field (ECAG, ByteAcc, Lock, Preserve)
{
Offset (0x04),
Offset (0x05),
Offset (0x06),
Offset (0x07),
Offset (0x08),
Offset (0x80),
Offset (0x81),
Offset (0x82),
Offset (0x83),
Offset (0x84),
Offset (0x85),
Offset (0x86),
Offset (0x87),
Offset (0x88),
Offset (0x89),
Offset (0x93),
Offset (0x95),
Offset (0x97),
Offset (0x98),
Offset (0x9C),
Offset (0x9D),
Offset (0x9E),
Offset (0xA0),
Offset (0xA1),
Offset (0xA2),
Offset (0xA3),
Offset (0xA4),
Offset (0xA5),
Offset (0xA6),
Offset (0xA7),
Offset (0xA8),
Offset (0xB0),
Offset (0xB2),
Offset (0xB4),
Offset (0xB6),
Offset (0xB8),
Offset (0xBA),
Offset (0xBC),
Offset (0xBE),
Offset (0xC0),
Offset (0xC2),
Offset (0xC4),
C3HG, 8,
C3HF, 8,
Offset (0xC8),
Offset (0xD0),
Offset (0xD2),
Offset (0xD4),
Offset (0xD6),
Offset (0xD8),
Offset (0xDA),
Offset (0xDC),
Offset (0xDE),
Offset (0xE0),
Offset (0xE2),
Offset (0xE4),
Offset (0xE6),
Offset (0xE8),
Offset (0xF0),
Offset (0xF2),
Offset (0xF4),
BSVN, 8,
BSVM, 8,
Offset (0xF8),
Offset (0xFA),
Offset (0xFC),
SBUY, 8,
SBUP, 8
}

Method (BIFA, 0, NotSerialized)
{
If (ECAV ())
{
If (BSLF)
{
Store (B1B2 (SBUY, SBUP), Local0)
}
Else
{
Store (B1B2 (BSVN, BSVM), Local0)
}
}
Else
{
Store (Ones, Local0)
}

Return (Local0)
}
}

Scope (_SB.PCI0.LPCB.EC0.BAT0)
{
Method (_BIX, 0, NotSerialized) // _BIX: Battery Information Extended
{
If (LNot (BATP (Zero)))
{
Return (NBIX)
}

If (LEqual (GBTT (Zero), 0xFF))
{
Return (NBIX)
}

_BIF ()
Store (DerefOf (Index (PBIF, Zero)), Index (BIXT, One))
Store (DerefOf (Index (PBIF, One)), Index (BIXT, 0x02))
Store (DerefOf (Index (PBIF, 0x02)), Index (BIXT, 0x03))
Store (DerefOf (Index (PBIF, 0x03)), Index (BIXT, 0x04))
Store (DerefOf (Index (PBIF, 0x04)), Index (BIXT, 0x05))
Store (DerefOf (Index (PBIF, 0x05)), Index (BIXT, 0x06))
Store (DerefOf (Index (PBIF, 0x06)), Index (BIXT, 0x07))
Store (DerefOf (Index (PBIF, 0x07)), Index (BIXT, 0x0E))
Store (DerefOf (Index (PBIF, 0x08)), Index (BIXT, 0x0F))
Store (DerefOf (Index (PBIF, 0x09)), Index (BIXT, 0x10))
Store (DerefOf (Index (PBIF, 0x0A)), Index (BIXT, 0x11))
Store (DerefOf (Index (PBIF, 0x0B)), Index (BIXT, 0x12))
Store (DerefOf (Index (PBIF, 0x0C)), Index (BIXT, 0x13))
If (LEqual (DerefOf (Index (BIXT, One)), One))
{
Store (Zero, Index (BIXT, One))
Store (DerefOf (Index (BIXT, 0x05)), Local0)
Multiply (DerefOf (Index (BIXT, 0x02)), Local0, Index (BIXT, 0x02))
Multiply (DerefOf (Index (BIXT, 0x03)), Local0, Index (BIXT, 0x03))
Multiply (DerefOf (Index (BIXT, 0x06)), Local0, Index (BIXT, 0x06))
Multiply (DerefOf (Index (BIXT, 0x07)), Local0, Index (BIXT, 0x07))
Multiply (DerefOf (Index (BIXT, 0x0E)), Local0, Index (BIXT, 0x0E))
Multiply (DerefOf (Index (BIXT, 0x0F)), Local0, Index (BIXT, 0x0F))
Divide (DerefOf (Index (BIXT, 0x02)), 0x03E8, Local0, Index (BIXT, 0x02))
Divide (DerefOf (Index (BIXT, 0x03)), 0x03E8, Local0, Index (BIXT, 0x03))
Divide (DerefOf (Index (BIXT, 0x06)), 0x03E8, Local0, Index (BIXT, 0x06))
Divide (DerefOf (Index (BIXT, 0x07)), 0x03E8, Local0, Index (BIXT, 0x07))
Divide (DerefOf (Index (BIXT, 0x0E)), 0x03E8, Local0, Index (BIXT, 0x0E))
Divide (DerefOf (Index (BIXT, 0x0F)), 0x03E8, Local0, Index (BIXT, 0x0F))
}

Store (B1B2 (C3HG, C3HF), Index (BIXT, 0x08))
Store (0x0001869F, Index (BIXT, 0x09))
Return (BIXT)
}
}

Method (B1B2, 2, NotSerialized)
{
Return (Or (Arg0, ShiftLeft (Arg1, 0x08)))
}
}

I2C触控板

SSDT如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
DefinitionBlock ("", "SSDT", 2, "_ASUS_", "Notebook", 0x01072009)
{
External(TPDI, FieldUnitObj)
External(TPHI, FieldUnitObj)
External (_SB.PCI0.I2C1,DeviceObj)


Scope (_SB.PCI0.I2C1)
{
Device (TPXX)
{
Name (SBFG, ResourceTemplate ()
{
GpioInt (Level, ActiveLow, Exclusive, PullUp, 0x0000,
"\\_SB.PCI0.GPI0", 0x00, ResourceConsumer, ,
)
{ // Pin list
0x55
}
})

Name (_ADR, One) // _ADR: Address
Name (ETPH, Package (0x16)
{
"ELAN1200",
"ELAN1201",
"ELAN1203",
"ELAN1200",
"ELAN1201",
"ELAN1300",
"ELAN1301",
"ELAN1300",
"ELAN1301",
"ELAN1000",
"ELAN1200",
"ELAN1200",
"ELAN1200",
"ELAN1200",
"ELAN1200",
"ELAN1203",
"ELAN1203",
"ELAN1201",
"ELAN1300",
"ELAN1300",
"ELAN1200",
"ELAN1300"
})
Name (FTPH, Package (0x05)
{
"FTE1001",
"FTE1200",
"FTE1200",
"FTE1300",
"FTE1300"
})
Method (_HID, 0, NotSerialized) // _HID: Hardware ID
{
If ((TPDI & 0x04))
{
Return (DerefOf (ETPH [TPHI]))
}

If ((TPDI & 0x10))
{
Return (DerefOf (FTPH [TPHI]))
}

Return ("ELAN1010")
}

Name (_CID, "PNP0C50" /* HID Protocol Device (I2C bus) */) // _CID: Compatible ID
Name (_UID, One) // _UID: Unique ID
Name (_S0W, 0x03) // _S0W: S0 Device Wake State
Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method
{
If ((Arg0 == ToUUID ("3cdff6f7-4267-4555-ad05-b30a3d8938de") /* HID I2C Device */))
{
If ((Arg2 == Zero))
{
If ((Arg1 == One))
{
Return (Buffer (One)
{
0x03 // .
})
}
Else
{
Return (Buffer (One)
{
0x00 // .
})
}
}

If ((Arg2 == One))
{
Return (One)
}
}
Else
{
Return (Buffer (One)
{
0x00 // .
})
}
}

Method (_STA, 0, NotSerialized) // _STA: Status
{
If (_OSI ("Darwin"))
{
Return (0x0F)
}
Else
{
Return (Zero)
}
}

Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings
{
Name (SBFB, ResourceTemplate ()
{
I2cSerialBusV2 (0x0015, ControllerInitiated, 0x00061A80,
AddressingMode7Bit, "\\_SB.PCI0.I2C1",
0x00, ResourceConsumer, , Exclusive,
)
})
Return (ConcatenateResTemplate (SBFB, SBFG))
}
}
}
}

Clover结构

Mojave/Catalina

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
├── ACPI
│ └── patched
│ ├── SSDT-ALS0.aml
│ ├── SSDT-ARTC.aml
│ ├── SSDT-ASUS.aml
│ ├── SSDT-BAT0.aml
│ ├── SSDT-Config.aml
│ ├── SSDT-DGPU.aml
│ ├── SSDT-DMAC.aml
│ ├── SSDT-GPRW.aml
│ ├── SSDT-MCHC.aml
│ ├── SSDT-MEM2.aml
│ ├── SSDT-PNLF.aml
│ ├── SSDT-UIAC.aml
│ └── SSDT-XCPM.aml
├── CLOVERX64.efi
├── config.plist
├── drivers
│ └── UEFI
│ ├── ApfsDriverLoader.efi
│ ├── AudioDxe.efi
│ ├── DataHubDxe.efi
│ ├── FSInject.efi
│ ├── HFSPlus.efi
│ ├── OpenRuntime.efi
│ └── VirtualSmc.efi
└── kexts
└── Other
├── AppleALC.kext
├── AsusSMC.kext
├── CPUFriend.kext
├── CPUFriendDataProvider.kext
├── CodecCommander.kext
├── Lilu.kext
├── LiluFriend.kext
├── NoTouchID.kext
├── RealtekRTL8111.kext
├── SMCBatteryManager.kext
├── SMCLightSensor.kext
├── SMCProcessor.kext
├── SMCSuperIO.kext
├── USBInjectAll.kext
├── VirtualSMC.kext
├── VoodooI2C.kext
├── VoodooI2CHID.kext
├── VoodooPS2Controller.kext
└── WhateverGreen.kext

Big Sur

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
├── ACPI
│ └── patched
│ ├── SSDT-GPRW.aml
│ └── SSDT-PLUG.aml
├── CLOVERX64.efi
├── config.plist
├── drivers
│ └── UEFI
│ ├── ApfsDriverLoader.efi
│ ├── AudioDxe.efi
│ ├── DataHubDxe.efi
│ ├── FSInject.efi
│ ├── HFSPlus.efi
│ ├── OpenRuntime.efi
│ └── VirtualSmc.efi
└── kexts
└── Other
├── Lilu.kext
├── SMCBatteryManager.kext
├── SMCLightSensor.kext
├── SMCProcessor.kext
├── SMCSuperIO.kext
├── USBInjectAll.kext
├── VirtualSMC.kext
├── VoodooI2C.kext
├── VoodooI2CHID.kext
├── VoodooPS2Controller.kext
└── WhateverGreen.kext

OpenCore结构

Catalina

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
├── ACPI
│ ├── SSDT-ALSD.aml
│ ├── SSDT-ARTC.aml
│ ├── SSDT-ASUS.aml
│ ├── SSDT-BAT0.aml
│ ├── SSDT-Config.aml
│ ├── SSDT-DGPU.aml
│ ├── SSDT-DMAC.aml
│ ├── SSDT-EC.aml
│ ├── SSDT-GPRW.aml
│ ├── SSDT-MCHC.aml
│ ├── SSDT-MEM2.aml
│ ├── SSDT-PLUG.aml
│ ├── SSDT-PMCR.aml
│ ├── SSDT-PNLF.aml
│ ├── SSDT-SBUS.aml
│ ├── SSDT-UIAC.aml
│ └── SSDT-XCPM.aml
├── Drivers
│ ├── ApfsDriverLoader.efi
│ ├── AudioDxe.efi
│ ├── HfsPlus.efi
│ ├── OpenCanopy.efi
│ ├── OpenRuntime.efi
│ └── OpenUsbKbDxe.efi
├── Kexts
│ ├── AppleALC.kext
│ ├── AsusSMC.kext
│ ├── CodecCommander.kext
│ ├── Lilu.kext
│ ├── LiluFriend.kext
│ ├── NoTouchID.kext
│ ├── RealtekRTL8111.kext
│ ├── SMCBatteryManager.kext
│ ├── SMCLightSensor.kext
│ ├── SMCProcessor.kext
│ ├── SMCSuperIO.kext
│ ├── USBInjectAll.kext
│ ├── VirtualSMC.kext
│ ├── VoodooPS2Controller.kext
│ └── WhateverGreen.kext
├── OpenCore.efi
└── config.plist

Big Sur

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
├── ACPI
│ ├── SSDT-GPRW.aml
│ └── SSDT-PLUG.aml
├── Drivers
│ ├── ApfsDriverLoader.efi
│ ├── AudioDxe.efi
│ ├── HfsPlus.efi
│ ├── OpenCanopy.efi
│ ├── OpenRuntime.efi
│ └── OpenUsbKbDxe.efi
├── Kexts
│ ├── Lilu.kext
│ ├── SMCBatteryManager.kext
│ ├── SMCLightSensor.kext
│ ├── SMCProcessor.kext
│ ├── SMCSuperIO.kext
│ ├── USBMap.kext
│ ├── CtlnaAHCIPort.kext
│ ├── VirtualSMC.kext
│ ├── VoodooI2C.kext
│ ├── VoodooI2CHID.kext
│ ├── VoodooPS2Controller.kext
│ └── WhateverGreen.kext
├── OpenCore.efi
└── config.plist

附录

Kexts

WebCamera

相机驱动。

1
https://i.applelife.ru/2019/03/448848_WebCamera.kext.zip

AnyiSightCam

在系统报告中添加相机信息。

1
https://github.com/tuiuVN/EFI_Clover/tree/13a94765f8c3f4a5c7138b2fcc1b9e8d091c65e8/K46CA/EFI/CLOVER/kexts/Other

AnyCardReader

在系统报告中添加读卡器信息(需更改为自己的ID)。

1
https://github.com/holoto/ec-471g/tree/master/EFI/EFI/CLOVER/kexts/10.11

AnyiSightCam

在系统报告中添加相机信息。

1
https://github.com/tuiuVN/EFI_Clover/tree/13a94765f8c3f4a5c7138b2fcc1b9e8d091c65e8/K46CA/EFI/CLOVER/kexts/Other

DebugEnhancer

啰嗦模式下可输出更多内容。

1
https://github.com/acidanthera/DebugEnhancer

IOElectrify

为Intel Thunderbolt硬件提供始终开启的电源。

1
https://github.com/the-darkvoid/macOS-IOElectrify/releases

VoodooInput

提供Magic Trackpad 2仿真。

1
https://github.com/acidanthera/VoodooInput/releases

LiluFriend

确保Lilu及其插件被加载。

1
https://github.com/PMheart/LiluFriend

VoodooSDHCMod

读卡器驱动。

1
https://github.com/lvs1974/VoodooSDHCMod/releases

SASMegaRAID

1
https://github.com/dukzcry/osx-goodies

Legacy_USB3&Legacy_InternalHub-EHCx

1
https://applelife.ru/posts/537459

Sinetek-rtsx

读卡器驱动。

1
https://github.com/tsingui/Sinetek-rtsx-1

SerialMouse

串行鼠标驱动,在系统启动前需先将鼠标接入电脑。

1
https://github.com/Goldfish64/SerialMouse/releases

RTCMemoryFixup

解决部分Z370 B360新BIOS的RTC中STA函数导致卡Apfs NVME的问题。

1
https://github.com/acidanthera/RTCMemoryFixup

SidecarEnabler

删除Sidecar使用的所有SMBIOS检查。

1
https://github.com/hieplpvip/SidecarEnabler

ThunderboltReset

禁用Alpine Ridge中的ICM,以便OSX接管LC。

1
https://github.com/osy/ThunderboltReset

SystemProfilerMemoryFixup

在MacBookAir和MacBookPro10,x平台上显示内存选项卡。

1
https://github.com/Goldfish64/SystemProfilerMemoryFixup

DiskArbitrationFixup

禁用此计算机无法读取您插入的磁盘消息。

1
https://github.com/Goldfish64/DiskArbitrationFixup

AHCI_3rdParty_eSATA/SATA

第三方eSATA/SATA驱动,连接到这些接口的设备将会识别为内置磁盘。

1
2
3
4
5
// AHCI_3rdParty_eSATA
https://github.com/NTT123/Hackintosh-HP-Z420-MacOS-High-Sierra-10.13-10.14/tree/master/CLOVER/kexts/10.12

// AHCI_3rdParty_SATA
https://github.com/forumi0721/osx_clover/tree/master/OEM/Z77%20Extreme4/kexts/10.11

AHCI_Intel_Generic_SATA

英特尔SATA驱动。

1
https://github.com/NTT123/Hackintosh-HP-Z420-MacOS-High-Sierra-10.13-10.14/tree/master/CLOVER/kexts/10.12

FakePCIID

仿冒PCI设备核心驱动。与IOPCIDevice设备建立连接,以便当另一个驱动程序连接到同一设备时提供备用的PCI ID。

必须放置FakePCIID,然后根据需求放置以下kexts中的一个或多个。

名称 作用
FakePCIID_AR9280_as_AR946x 将PCI ID重新映射回AR9280(168c:002a),即使该设备本身报告的是168c:0034
FakePCIID_Broadcom_WiFi 模拟真正的Apple Airport(苹果无线网卡)
FakePCIID_Intel_GbX 与一些Intel以太网设备建立连接,以使基于Intel芯片组的驱动程序工作。不做单独使用,通常与SmallTreelntel8254x.kext、Applelntel8254XEthernet.kext、SmallTreelntel82576.kext、SmallTreelntel8259x.kext一起使用
FakePCIID_Intel_HD_Graphics 用于核显HD4200/HD4400/HD4600/P4600,Iris 540/550 Iris Pro 580、HD510 HD515 HD520 HD530 P530(多数530不需要这个)、P4000、P6300 – 162a、UHD620 KabyLake-R、UHD630 CoffeeLake
FakePCIID_Intel_HDMI_Audio 在Haswell以上的系统中提供HDMI-audio的设备,为不支持的HDAU提供支持(通常称为B0D3,但需要将其重命名为HDAU)
FakePCIID_XHCIMux 把USB3.0主控器XHC下的USB2.0 port转移(bypass)到USB2.0主控器EHC1/EHC2下
FakePCIID_BCM57XX_as_BCM57765 用于Broadcom无线网卡BCM5700/BCM5701/BCM5702/BCM5703/BCM5717/BCM5718/BCM5719/BCM5725/BCM5727/BCM5761/BCM5762/BCM57760/BCM57764/BCM57767/BCM57781/BCM57782/BCM57785/BCM57786/BCM57787/BCM57788/BCM57790/BCM57791/BCM57795/BCM5785/BCM5787M

AMFIExemption

将允许的entitlements添加到非Apple签名的应用程序。

1
https://github.com/osy/AMFIExemption

Innie

使PCIe驱动器显示为内部驱动器。

NightShiftEnabler

NightShiftUnlocker已被整合到NightShiftEnabler。

开启Night Shift功能。

1
https://github.com/cdf/NightShiftEnabler

ECEnabler

允许读取长度超过1个字节的EC字段,大大减少工作电池状态所需的ACPI修改量。

1
https://github.com/1Revenger1/ECEnabler

RestrictEvents

MacProMemoryNotificationDisabler已被整合到RestrictEvents。

阻止不需要的进程,避免在不同的硬件上引起兼容性问题,并解锁对仅限于其他硬件的某些功能的支持。

1
https://github.com/acidanthera/RestrictEvents

TSCAdjustReset

修复了在x299主板和Skylake-X平台的cpu启动Mac时同步TSC的衰退的问题。

TOSMotionSensor

东芝hackintosh设备的加速度计驱动程序。

1
https://github.com/jslegendre/TOSMotionSensor

AAAMouSSE

1
https://forums.macrumors.com/threads/mp3-1-others-sse-4-2-emulation-to-enable-amd-metal-driver.2206682/

Polaris22Fixup

修复Polaris22/VegaM的已知图形问题,支持10.14+。

1
https://github.com/osy/Polaris22Fixup

HWPEnable

1
https://cgithub.com/headkaze/HWPEnable

旧版Kexts

名称 作用 下载 备注
OpenHaltRestart/EvOreboot 解决重启/关机时遇到无法断电问题 不可同时使用
ElliottForceLegacyRTC/LegacyAppleRTC 防止主板BIOS的CMOS重置错误 不可同时使用
PlatformUUID 解决Unable to determine UUID for host. Error:35的问题
IOAHCIBlockStorageInjector 修复将内置硬盘识别为外置硬盘的问题
ApplePS2SmartTouchPad 键盘鼠标触摸板万能驱动
SATA-100-series-unsupported Intel 100系列主板SATA磁盘识别驱动
SATA-200-series-unsupported Intel 200系列主板SATA磁盘识别驱动
SATA-RAID-unsupported SATA磁盘阵列驱动
XHCI-200-series-injector 200系列主板驱动
XHCI-300-series-injector 300系列主板驱动
XHCI-unsupported Intel X99系列主板驱动,可用于H370、B360、H310、Z390(Mojave及更新版本不需要)、X79、X99、AsRock(除B460/Z490+)
XHCI-x99-injector Intel X99系列主板驱动
BT4LEContiunityFixup 开启BT4LE蓝牙上的hotspot以及handoff
NVEnabler NVidia GeForce 9500GT驱动
AppleAC97Audio AC97音频驱动 适用于10.4-10.5
BCM5906MEthernet NetLink BCM5906M有线网卡驱动 https://github.com/vmatyushin/osx-bcm5906m/ 适用于10.6-10.7
ACPICPUThrottle 根据负载自动调整CPU时钟和电压 适用于10.4
MMInputFamily 多媒体输入设备驱动 http://defyne.org/dvb/driver.html 适用于10.2-10.4
Macam USB摄像头驱动 https://sourceforge.net/projects/webcam-osx/ 适用于10.4

Kext禁用器

下载以下kext并右键显示包内容,打开Contents/Info.plist,将AppleUserUpstreamClient替换为需要禁用的kext名称,然后放到引导器的Kexts部分即可。

1
https://www.tonymacx86.com/attachments/disabler-kext-zip.18081/

旧版资源

1
2
3
4
5
6
7
8
9
https://github.com/OSXLatitude/EDP
https://support.apple.com/downloads
http://www.powerpcsoftware.com/
http://www.macos9lives.com/
http://macintoshgarden.org/
http://www.umich.edu/~archive/
https://www.macintoshrepository.org/
http://vintagemacmuseum.com/resources/mac-software/
https://pikeralpha.wordpress.com/2017/06/06/catalogurl-for-macos-10-13-high-sierra/

工具

SSDTTime

下载

1
https://github.com/corpnewt/SSDTTime

常见问题

提示Could not locate or download iasl!

Python版本过时。可更新Python,或下载iasl并放置到SSDTTime的脚本文件夹中。

ProperTree

1
2
https://github.com/corpnewt/ProperTree
https://codeload.github.com/corpnewt/ProperTree/zip/master

OpenCore Configurator

1
https://mackie100projects.altervista.org/download-opencore-configurator/

旧版工具

DSDT editor

1
2
https://www.insanelymac.com/forum/topic/223205-dsdt-editor-and-patcher/
http://www.macbreaker.com/2012/03/make-dsdt-with-dsdt-editor.html

DSDT库

1
2
3
4
5
# Intel NUC5/NUC6/NUC7/NUC8 DSDT patches
https://github.com/RehabMan/Intel-NUC-DSDT-Patch

# DSDT Database
https://www.tonymacx86.com/dsdt-database

存档

AMD内核补丁

15h/16h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Kernel</key>
<dict>
<key>Patch</key>
<array>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - commpage_populate -remove rdmsr</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
uaABAAAPMg==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
Dx+AAAAAAA==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string>_cpu_topology_sort</string>
<key>Comment</key>
<string>algrey - cpu_topology_sort -disable _x86_validate_topology</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
6AAA//8=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
/wAA//8=
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
Dx9EAAA=
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - cpuid_set_cache_info - cpuid 0x8000001D instead 0 - 10.15/10.16</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
McAx2zHJMdIPokGJxgAAAAAAAAB0
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
/////////////////wAAAAAA////
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>19.0.0</string>
<key>Replace</key>
<data>
uB0AAIAx2zHJMdIPokGJxg8fQADr
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - cpuid_set_cache_info - cpuid 0x8000001D instead 0</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
McAx2zHJMdIPokGJxkGJ0QAAAAAAAAA=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
/////////////////////wAAAAAA//8=
</data>
<key>MaxKernel</key>
<string>18.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
uB0AAIAx2zHJMdIPokGJxkGJ0escZpA=
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>Shaneee - cpuid_set_cache_info - cpuid 0x8000001D instead 0 10.16</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
McAx2zHJMdIPokGJxoM9RD2oAAB0G0E=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>20.0.0</string>
<key>Replace</key>
<data>
uB0AAIAx2zHJMdIPokGJxkGJ0escZpA=
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - cpuid_set_cache_info - cpuid 0x8000001D instead 4</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
uAQAAABEifFEiQ==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
uB0AAIBEifFEiQ==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - cpuid_set_cache_info - don't set cpuid_cores_per_package</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
weAa/8A=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
//D///A=
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
Dx8A6wY=
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>NoOne - skip cpuid_cores_per_package test - 10.15/10.16</string>
<key>Count</key>
<integer>0</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
gz0AAAAAAA8AAAAAAIsAvA==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
//8AAAD///8AAAAA//8A/w==
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>19.0.0</string>
<key>Replace</key>
<data>
AAAAAAAAAQAAAAAAAAAAAA==
</data>
<key>ReplaceMask</key>
<data>
AAAAAAAADwAAAAAAAAAAAA==
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - - skip cpuid_cores_per_package test</string>
<key>Count</key>
<integer>0</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
gz0AAAAAAHQAi128
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
//8AAAD///8A////
</data>
<key>MaxKernel</key>
<string>18.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
AAAAAAAAAQAAAAAA
</data>
<key>ReplaceMask</key>
<data>
AAAAAAAADwAAAAAA
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - cpuid_set_generic_info - remove wrmsr</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
uYsAAAAxwDHSDzA=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
Zg8fhAAAAAAAZpA=
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - cpuid_set_generic_info - set microcode=186</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
uYsAAAAPMg==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
uroAAABmkA==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - cpuid_set_generic_info - set flag=1</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
uRcAAAAPMsHqEoDiBw==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
sgFmDx+EAAAAAABmkA==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - cpuid_set_generic_info - disable check to allow leaf7</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
ADoPgg==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
AAAPgg==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - cpuid_set_info - GenuineIntel to AuthenticAMD </string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
R2VudWluZUludGVsAA==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
QXV0aGVudGljQU1EAA==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - cpuid_set_cpufamily - force CPUFAMILY_INTEL_PENRYN</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
MduAPQAAAAAGdQA=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
/////wAAAP///wA=
</data>
<key>MaxKernel</key>
<string>20.3.0</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
u7xP6njpXQAAAJA=
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>DhinakG - cpuid_set_cpufamily - force CPUFAMILY_INTEL_PENRYN - 11.3b1</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
MdIAAIA9AAAAAAZ1AA==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
//8AAP//AAAA////AA==
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>20.4.0</string>
<key>Replace</key>
<data>
swG6vE/qeOldAAAAkA==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string>_cpuid_set_info</string>
<key>Comment</key>
<string>algrey - cpuid_set_info - jmp to calculations and set cpuid_cores_per_package - 10.15/10.16</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
dXHoAAAAAEiLBQAAAABIiQUAAAAA
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
////AAAAAP///wAAAAD///8AAAAA
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>19.0.0</string>
<key>Replace</key>
<data>
dE4AAAAAAJCJDQAAAADpfgAAAGaQ
</data>
<key>ReplaceMask</key>
<data>
//8AAAAAAP///wAAAAD/////////
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string>_cpuid_set_info</string>
<key>Comment</key>
<string>algrey - cpuid_set_info - cores and threads calculations - 10.15/10.16</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
uTUAAAAPMkjB4iCJwUgJ0bkBAAEAD0XID7fBwekQg+EP
6x65NQAAAA8ySMHiIInBSAnRuQEAAQAPRcgPt8HB6RA=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>19.0.0</string>
<key>Replace</key>
<data>
uAgAAIAx2zHJMdIPokGJzkUPtvZB/8ZEifFEifBmDx+E
AAAAAABmDx+EAAAAAAAPH4QAAAAAAOl8////Dx9EAAA=
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - cpuid_set_info - cores and logicals count - part 1 - 10.13</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
6xa5NQAAAA==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>17.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
6yK5NQAAAA==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - cpuid_set_info - cores and logicals count - part 1 - 10.14</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
6zi5NQAAAA==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>18.99.99</string>
<key>MinKernel</key>
<string>18.0.0</string>
<key>Replace</key>
<data>
6xK5NQAAAA==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string>_cpuid_set_info</string>
<key>Comment</key>
<string>algrey - cpuid_set_info - cores and logicals count - part 2</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
uTUAAAAPMkjB4iAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
//////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAA=
</data>
<key>MaxKernel</key>
<string>18.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
ichmDx+EAAAAAABmDx+EAAAAAABmDx+EAAAAAAAPHwA=
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string>_cpuid_set_info</string>
<key>Comment</key>
<string>algrey - cpuid_set_info - cores and logicals count - part 3 - 10.13</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
iQUAAAAAiRUAAAAAhcB1GA==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
//8AAAD///8AAAD//////w==
</data>
<key>MaxKernel</key>
<string>17.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
Dx+EAAAAAAAPH4QAAAAAAA==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string>_cpuid_set_info</string>
<key>Comment</key>
<string>algrey - cpuid_set_info - cores and logicals count - part 3 - 10.14</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
hcB0
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>18.99.99</string>
<key>MinKernel</key>
<string>18.0.0</string>
<key>Replace</key>
<data>
ZpDr
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>1</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string>_cpuid_set_info</string>
<key>Comment</key>
<string>algrey - cpuid_set_info - cores and logicals count - part 4 - 10.13</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
iwUAAAAAiQAAAAAAiwU=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
//8AAAD//wAAAAD///8=
</data>
<key>MaxKernel</key>
<string>17.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
iQAAAAAAAAAAAAAAAAA=
</data>
<key>ReplaceMask</key>
<data>
/wAAAAAAAAAAAAAAAAA=
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string>_cpuid_set_info</string>
<key>Comment</key>
<string>algrey - cpuid_set_info - cores and logicals count - part 4 - 10.14</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
SIsFAAAAAEiJBQAAAAA=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
////AAAA/////wAAAP8=
</data>
<key>MaxKernel</key>
<string>18.99.99</string>
<key>MinKernel</key>
<string>18.0.0</string>
<key>Replace</key>
<data>
kIkAAAAAAJAAAAAAAAA=
</data>
<key>ReplaceMask</key>
<data>
//8AAAAAAP8AAAAAAAA=
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - i386_init - remove rdmsr (x3)</string>
<key>Count</key>
<integer>0</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
uZkBAAAPMkjB4iCJxkgJ1rmYAQAADzJIweIgicBICcK/
WAIxBTHJRTHA
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
Zg8fhAAAAAAAZg8fhAAAAAAAZg8fhAAAAAAAZg8fhAAA
AAAAZg8fRAAA
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - tsc_init - remove Penryn check to execute default case 10.14.1-.3</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
gfm8T+p4D4TFAQAA
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>18.99.99</string>
<key>MinKernel</key>
<string>18.0.0</string>
<key>Replace</key>
<data>
ZmZmDx+EAAAAAACQ
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - tsc_init - remove Penryn check to execute default case</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
PbxP6ngPhAABAAA=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
/////////wD///8=
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
ZmZmDx+EAAAAAAA=
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - tsc_init - grab DID and FID from MSR</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
uZQBAAAPMonDuc4AAAAPMg+2zokNAAAAAA+2xIkFAAAA
AA==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
////////////////////////////AAAA////////AAAA
/w==
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
uXEAAcAPMonASInBSMHpBoPgP0iDwBCA4QdI0+gPH0QA
AA==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string>_tsc_init</string>
<key>Comment</key>
<string>algrey - tsc_init - skip msr_flex_ratio test and go grab FSBFrequency from EFI</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
98MAAAEAdA==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
Zg8fRAAA6w==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - lapic_init - remove version check and panic - 10.15</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
g/gTdl4=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>19.99.99</string>
<key>MinKernel</key>
<string>19.0.0</string>
<key>Replace</key>
<data>
Dx9EAAA=
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>NoOne - lapic_init - remove version check and panic - 10.16</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
g/gTD4aBAAAA
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>20.0.0</string>
<key>Replace</key>
<data>
kJCQkJCQkJCQ
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - lapic_init - remove version check and panic - 10.13/10.14</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
JfwAAACD+BM=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>18.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
JfAAAADrI5A=
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - lapic_interrupt - skip checks and prevent panic - 10.15/10.16</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
gz0AAAAAAHQO
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
//8AAAD/////
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>19.0.0</string>
<key>Replace</key>
<data>
6zkPH4AAAAAA
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string>_lapic_interrupt</string>
<key>Comment</key>
<string>algrey - lapic_interrupt - skip checks and prevent panic - 10.13/10.14</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
gz0AAAAAAHQK
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>250</integer>
<key>Mask</key>
<data>
//8AAAD/////
</data>
<key>MaxKernel</key>
<string>18.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
60gPH4AAAAAA
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - mtrr_update_action - fix PAT</string>
<key>Count</key>
<integer>0</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
icCB4v//AP+BygAAAQC5dwIAAA==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
////////D////////////////w==
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
uXcCAAC4BgEHALoGAQcADx9AAA==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>Any</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>Shaneee - mtrr_update_action - fix PAT</string>
<key>Count</key>
<integer>0</integer>
<key>Enabled</key>
<false/>
<key>Find</key>
<data>
icCB4v//AP+BygAAAQC5dwIAAA==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
////////D////////////////w==
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
uXcCAAC4BgYGBroGBgYGDzAPCQ==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
</array>
</dict>
</dict>
</plist>

17h/19h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Kernel</key>
<dict>
<key>Patch</key>
<array>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>_i386_switch_lbrs</string>
<key>Comment</key>
<string>algrey - Disable _i386_switch_lbrs</string>
<key>Count</key>
<integer>0</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>20.1.0</string>
<key>Replace</key>
<data>
ww==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>_i386_lbr_init</string>
<key>Comment</key>
<string>algrey - Disable _i386_lbr_init</string>
<key>Count</key>
<integer>0</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>20.1.0</string>
<key>Replace</key>
<data>
ww==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - _i386_init_slave - Remove wrmsr 0x1c8</string>
<key>Count</key>
<integer>0</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
uAEAAAC5yAEAADHSDzA=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>20.1.0</string>
<key>Replace</key>
<data>
Zg8fhAAAAAAADx9EAAA=
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>_i386_lbr_native_state_to_mach_thread_state</string>
<key>Comment</key>
<string>algrey - Disable _i386_lbr_native_state_to_mach_thread_state</string>
<key>Count</key>
<integer>0</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>20.1.0</string>
<key>Replace</key>
<data>
ww==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - commpage_populate -remove rdmsr</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
uaABAAAPMg==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
Dx+AAAAAAA==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>_cpu_topology_sort</string>
<key>Comment</key>
<string>algrey - cpu_topology_sort -disable _x86_validate_topology</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
6AAA//8=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
/wAA//8=
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
Dx9EAAA=
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - cpuid_set_cache_info - cpuid 0x8000001D instead 0 - 10.15/10.16</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
McAx2zHJMdIPokGJxgAAAAAAAAB0
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
/////////////////wAAAAAA////
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>19.0.0</string>
<key>Replace</key>
<data>
uB0AAIAx2zHJMdIPokGJxg8fQADr
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - cpuid_set_cache_info - cpuid 0x8000001D instead 0 - 10.13/10.14</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
McAx2zHJMdIPokGJxkGJ0QAAAAAAAAA=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
/////////////////////wAAAAAA//8=
</data>
<key>MaxKernel</key>
<string>18.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
uB0AAIAx2zHJMdIPokGJxkGJ0escZpA=
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - cpuid_set_cache_info - cpuid 0x8000001D instead 4</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
uAQAAABEifFEiQ==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
uB0AAIBEifFEiQ==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - cpuid_set_cache_info - don't set cpuid_cores_per_package</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
weAa/8A=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
//D///A=
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
Dx8A6wY=
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>NoOne - skip cpuid_cores_per_package test - 10.15/10.16</string>
<key>Count</key>
<integer>0</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
gz0AAAAAAA8AAAAAAIsAvA==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
//8AAAD///8AAAAA//8A/w==
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>19.0.0</string>
<key>Replace</key>
<data>
AAAAAAAAAQAAAAAAAAAAAA==
</data>
<key>ReplaceMask</key>
<data>
AAAAAAAADwAAAAAAAAAAAA==
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - skip cpuid_cores_per_package test - 10.13/10.14</string>
<key>Count</key>
<integer>0</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
gz0AAAAAAHQAi128
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
//8AAAD///8A////
</data>
<key>MaxKernel</key>
<string>18.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
AAAAAAAAAQAAAAAA
</data>
<key>ReplaceMask</key>
<data>
AAAAAAAADwAAAAAA
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - cpuid_set_generic_info - remove wrmsr</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
uYsAAAAxwDHSDzA=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
Zg8fhAAAAAAAZpA=
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - cpuid_set_generic_info - set microcode=186</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
uYsAAAAPMg==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
uroAAABmkA==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - cpuid_set_generic_info - set flag=1</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
uRcAAAAPMsHqEoDiBw==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
sgFmDx+EAAAAAABmkA==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - cpuid_set_generic_info - disable check to allow leaf7</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
ADoPgg==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
AAAPgg==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - cpuid_set_info - GenuineIntel to AuthenticAMD</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
R2VudWluZUludGVsAA==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
QXV0aGVudGljQU1EAA==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - cpuid_set_cpufamily - force CPUFAMILY_INTEL_PENRYN</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
MduAPQAAAAAGdQA=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
/////wAAAP///wA=
</data>
<key>MaxKernel</key>
<string>20.3.0</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
u7xP6njpXQAAAJA=
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>DhinakG - cpuid_set_cpufamily - force CPUFAMILY_INTEL_PENRYN - 11.3b1</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
MdIAAIA9AAAAAAZ1AA==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
//8AAP//AAAA////AA==
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>20.4.0</string>
<key>Replace</key>
<data>
swG6vE/qeOldAAAAkA==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>_cpuid_set_info</string>
<key>Comment</key>
<string>algrey - cpuid_set_info - jmp to calculations and set cpuid_cores_per_package - 10.15/10.16</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
dXHoAAAAAEiLBQAAAABIiQUAAAAA
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
////AAAAAP///wAAAAD///8AAAAA
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>19.0.0</string>
<key>Replace</key>
<data>
dE4AAAAAAJCJDQAAAADpfgAAAGaQ
</data>
<key>ReplaceMask</key>
<data>
//8AAAAAAP///wAAAAD/////////
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>_cpuid_set_info</string>
<key>Comment</key>
<string>algrey - cpuid_set_info - cores and threads calculations - 10.15/10.16</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
uTUAAAAPMkjB4iCJwUgJ0bkBAAEAD0XID7fBwekQg+EP
6x65NQAAAA8ySMHiIInBSAnRuQEAAQAPRcgPt8HB6RA=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>19.0.0</string>
<key>Replace</key>
<data>
uAgAAIAx2zHJMdIPokGJzkUPtvZB/8a4HgAAgDHbMckx
0g+iD7b3/8ZEifEx0onI9/aJwUSJ8Ol8////Dx9EAAA=
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - cpuid_set_info - ryzen cores and logicals count - part 1 - 10.13</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
6xa5NQAAAA==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>17.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
6yK5NQAAAA==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - cpuid_set_info - ryzen cores and logicals count - part 1 - 10.14</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
6zi5NQAAAA==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>18.99.99</string>
<key>MinKernel</key>
<string>18.0.0</string>
<key>Replace</key>
<data>
6xK5NQAAAA==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>_cpuid_set_info</string>
<key>Comment</key>
<string>algrey - cpuid_set_info - ryzen cores and logicals count - part 2 - 10.13/10.14</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
uTUAAAAPMkjB4iAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
//////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAA=
</data>
<key>MaxKernel</key>
<string>18.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
QYnOuB4AAIAx2zHJMdIPog+29//GRInxMdKJyPf2ZpA=
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>_cpuid_set_info</string>
<key>Comment</key>
<string>algrey - cpuid_set_info - ryzen cores and logicals count - part 3 - 10.13</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
iQUAAAAAiRUAAAAAhcB1GA==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
//8AAAD///8AAAD//////w==
</data>
<key>MaxKernel</key>
<string>17.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
Dx+EAAAAAAAPH4QAAAAAAA==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>_cpuid_set_info</string>
<key>Comment</key>
<string>algrey - cpuid_set_info - ryzen cores and logicals count - part 3 - 10.14</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
hcB0
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>18.99.99</string>
<key>MinKernel</key>
<string>18.0.0</string>
<key>Replace</key>
<data>
ZpDr
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>1</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>_cpuid_set_info</string>
<key>Comment</key>
<string>algrey - cpuid_set_info - ryzen cores and logicals count - part 4 - 10.13</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
iwUAAAAAiQAAAAAAiwU=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
//8AAAD//wAAAAD///8=
</data>
<key>MaxKernel</key>
<string>17.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
iQAAAAAAAAAAAAAAAAA=
</data>
<key>ReplaceMask</key>
<data>
/wAAAAAAAAAAAAAAAAA=
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>_cpuid_set_info</string>
<key>Comment</key>
<string>algrey - cpuid_set_info - ryzen cores and logicals count - part 4 - 10.14</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
SIsFAAAAAEiJBQAAAAA=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
////AAAA/////wAAAP8=
</data>
<key>MaxKernel</key>
<string>18.99.99</string>
<key>MinKernel</key>
<string>18.0.0</string>
<key>Replace</key>
<data>
kIkAAAAAAJAAAAAAAAA=
</data>
<key>ReplaceMask</key>
<data>
//8AAAAAAP8AAAAAAAA=
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - i386_init - remove rdmsr (x3)</string>
<key>Count</key>
<integer>0</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
uZkBAAAPMkjB4iCJxkgJ1rmYAQAADzJIweIgicBICcK/
WAIxBTHJRTHA
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
Zg8fhAAAAAAAZg8fhAAAAAAAZg8fhAAAAAAAZg8fhAAA
AAAAZg8fRAAA
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - tsc_init - remove Penryn check to execute default case 10.14</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
gfm8T+p4D4TFAQAA
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>18.99.99</string>
<key>MinKernel</key>
<string>18.0.0</string>
<key>Replace</key>
<data>
ZmZmDx+EAAAAAACQ
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - tsc_init - remove Penryn check to execute default case</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
PbxP6ngPhAABAAA=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
/////////wD///8=
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
ZmZmDx+EAAAAAAA=
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - tsc_init - grab DID and VID from MSR</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
uZQBAAAPMonDuc4AAAAPMg+2zokNAAAAAA+2xIkFAAAA
AA==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
////////////////////////////AAAA////////AAAA
/w==
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
uWQAAcAPMg+2yInGwe4Ig+Y/RTH/MdJIichI9/ZIAcBm
kA==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>_tsc_init</string>
<key>Comment</key>
<string>algrey - tsc_init - skip msr_flex_ratio test and go grab FSBFrequency from EFI</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
98MAAAEAdA==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
Zg8fRAAA6w==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - lapic_init - remove version check and panic - 10.15</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
g/gTdl4=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>19.99.99</string>
<key>MinKernel</key>
<string>19.0.0</string>
<key>Replace</key>
<data>
Dx9EAAA=
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>NoOne - lapic_init - remove version check and panic - 10.16</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
g/gTD4aBAAAA
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>20.0.0</string>
<key>Replace</key>
<data>
kJCQkJCQkJCQ
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - lapic_init - remove version check and panic - 10.13/10.14</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
JfwAAACD+BM=
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
</data>
<key>MaxKernel</key>
<string>18.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
JfAAAADrI5A=
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - lapic_interrupt - skip checks and prevent panic - 10.15/10.16</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
gz0AAAAAAHQO
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
//8AAAD/////
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>19.0.0</string>
<key>Replace</key>
<data>
6zkPH4AAAAAA
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string>_lapic_interrupt</string>
<key>Comment</key>
<string>algrey - lapic_interrupt - skip checks and prevent panic - 10.13/10.14</string>
<key>Count</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
gz0AAAAAAHQK
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>250</integer>
<key>Mask</key>
<data>
//8AAAD/////
</data>
<key>MaxKernel</key>
<string>18.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
60gPH4AAAAAA
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>algrey - mtrr_update_action - fix PAT</string>
<key>Count</key>
<integer>0</integer>
<key>Enabled</key>
<true/>
<key>Find</key>
<data>
icCB4v//AP+BygAAAQC5dwIAAA==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
////////D////////////////w==
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
uXcCAAC4BgEHALoGAQcADx9AAA==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
<dict>
<key>Arch</key>
<string>x86_64</string>
<key>Base</key>
<string></string>
<key>Comment</key>
<string>Shaneee - mtrr_update_action - fix PAT</string>
<key>Count</key>
<integer>0</integer>
<key>Enabled</key>
<false/>
<key>Find</key>
<data>
icCB4v//AP+BygAAAQC5dwIAAA==
</data>
<key>Identifier</key>
<string>kernel</string>
<key>Limit</key>
<integer>0</integer>
<key>Mask</key>
<data>
////////D////////////////w==
</data>
<key>MaxKernel</key>
<string>20.99.99</string>
<key>MinKernel</key>
<string>17.0.0</string>
<key>Replace</key>
<data>
uXcCAAC4BgYGBroGBgYGDzAPCQ==
</data>
<key>ReplaceMask</key>
<data>
</data>
<key>Skip</key>
<integer>0</integer>
</dict>
</array>
</dict>
</dict>
</plist>

参考教程

黑苹果制作虚拟机CDR镜像

1
https://blog.csdn.net/qq_41855420/article/details/102750055

OpenCore引导教程

1
2
3
4
5
6
7
https://blog.daliansky.net/OpenCore-BootLoader.html
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

【持续更新】OpenCore引导-v各种卡及OC引导常见问题解决方案速查表合集

1
https://imacos.top/2020/03/28/0154/

macOS 10.13安装中常见的问题及解决方法

1
https://blog.daliansky.net/macOS-10.13-installation-of-common-problems-and-solutions.html

OpenCore 引导迁移折腾记录

1
https://kirainmoe.com/blog/post/opencore-migration-experience/

热补丁制作教程

1
2
3
https://www.penghubingzhou.cn/2019/05/02/Battery%20Hotpatch%20Make/
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/

Acidanthera故障排除

1
https://github.com/acidanthera/bugtracker

AsusSMC使用教程

1
https://github.com/hieplpvip/AsusSMC/wiki/Installation-Instruction

macOS Catalina 10.15安装中常见的问题及解决方法

1
https://blog.daliansky.net/Common-problems-and-solutions-in-macOS-Catalina-10.15-installation.html

FIREWOLF OS X PE 9 使用手册

1
https://pe.firewolf.app/manual/chapter3/launcherfirstview.html

Clover的用法

1
https://www.misonsky.cn/28.html

Booting the OS X installer on LAPTOPS with Clover

1
https://www.tonymacx86.com/threads/guide-booting-the-os-x-installer-on-laptops-with-clover.148093/

MaciASL / Wiki / Patching Syntax Grammar

1
https://sourceforge.net/p/maciasl/wiki/Patching%20Syntax%20Grammar/

Patching LAPTOP DSDT/SSDTs

1
https://www.tonymacx86.com/threads/guide-patching-laptop-dsdt-ssdts.152573/

Using Clover to hotpatch ACPI

1
https://www.tonymacx86.com/threads/guide-using-clover-to-hotpatch-acpi.200137/

Clover EFI Bootloader v5.1 r5127 四叶草黑苹果引导程序

1
https://heipg.cn/clover/clover-efi-bootloader-v5-1-r5127.html

-V进mac不滚代码直接卡++加号或者加号下几行代码Error allocating 0x11c8d pages at……卡住解决方案

1
https://imacos.top/2019/08/12/1033/

CatalinaAutoMountWritable.plist

1
https://forums.macrumors.com/attachments/catalinaautomountwritable-plist-zip.847064/

用热补丁修理你的触摸板

1
2
https://blog.gzxiaobai.cn/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/
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/

Hotpatch热补丁之路2:常见的种类与外部引用

1
http://bbs.pcbeta.com/viewthread-1866928-1-1.html

Fix for El Capitan stuck at login

1
https://discussions.apple.com/thread/7376445?tstart=0

Macbook Pro stuck after I enter my password

1
https://apple.stackexchange.com/questions/305097/macbook-pro-stuck-after-i-enter-my-password

AptioMemoryFix

1
https://www.insanelymac.com/forum/topic/331381-aptiomemoryfix/?tab=comments#comment-2564269

Turn on performance mode for macOS Server

1
https://support.apple.com/en-gb/HT202528

macOS启动参数列表

1
https://blog.skk.moe/post/macos-boot-args/

Dortania’s OpenCore Install Guide

1
2
https://dortania.github.io/OpenCore-Install-Guide/
https://thrrip.github.io/OpenCore-Install-Guide/

MP3,1 (& others?) SSE 4.2 emulation (to enable AMD Metal driver)

1
https://forums.macrumors.com/threads/mp3-1-others-sse-4-2-emulation-to-enable-amd-metal-driver.2206682/

Clover Kexts and Firmware driver conversion(.kext, .efi)

1
https://github.com/dortania/OpenCore-Install-Guide/blob/master/clover-conversion/clover-efi.md

macOS BigSur 11.0安装中常见的问题及解决方法

1
https://blog.daliansky.net/Common-problems-and-solutions-in-macOS-BigSur-11.0-installation.html

Release Date – Gixxer PC

1
https://www.dualbootpc.com/guide/release-date/

TSplicedFont failed creating descriptor for El Capitan

1
https://apple.stackexchange.com/questions/304552/tsplicedfont-failed-creating-descriptor-for-el-capitan

Acer V5-572G On Yosemite

1
https://www.jianshu.com/p/30ff92784076

How to make a bootable Mountain Lion install drive

1
https://www.macworld.com/article/1167857/how-to-make-a-bootable-mountain-lion-install-drive.html

Who can help me compile the DSDT, Thanks!

1
https://www.tonymacx86.com/threads/solved-who-can-help-me-compile-the-dsdt-thanks.189972/

HACKINTOSH BOOT FLAGS

1
https://www.fitzweekly.com/2016/04/hackintosh-boot-flags.html

macOS系统下载

1
https://www.applex.net/pages/macos/

A full history of macOS (OS X) release dates and rates

1
https://robservatory.com/a-full-history-of-macos-os-x-release-dates-and-rates/

Show Hidden Files OS X 10.7 Lion

1
https://apple.stackexchange.com/questions/18662/show-hidden-files-os-x-10-7-lion

Is Intel’s 8th gen Compatible with OS X 10.9, 10.10, 10.11, 10.12?

1
https://www.tonymacx86.com/threads/is-intels-8th-gen-compatible-with-os-x-10-9-10-10-10-11-10-12.253152/

How to create a bootable OS X Snow Leopard USB drive?

1
https://apple.stackexchange.com/questions/400472/how-to-create-a-bootable-os-x-snow-leopard-usb-drive

Download MacOS X 10.4 - 10.15 original - All versions

1
https://applehint.com/t/download-macos-x-10-4-10-15-original-all-versions/376

Common boot options for Chimera, Chameleon, Unibeast, Niresh, and more

1
http://www.macbreaker.com/2012/01/list-of-common-hackintosh-boot-flags_29.html

关于黑苹果升级macOS11(bigsur)的建议与观点

1
https://zhuanlan.zhihu.com/p/158770898

卡在com.apple.xpc.launchd[1]这里了,一直循环,求大神指导一下

1
http://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1876638

acidanthera/bugtracker

1
2
3
4
5
6
https://github.com/acidanthera/bugtracker/issues/1235
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.0 Big Sur Public Beta 10 - boot, kernel panic

1
https://www.tonymacx86.com/threads/solved-macos-11-0-big-sur-public-beta-10-boot-kernel-panic.305007/

Slide值获取及计算

1
https://blog.daliansky.net/Slide-value-acquisition-and-calculation.html

macOS 11 Big Sur on Unsupported Macs Thread

1
2
https://forums.macrumors.com/threads/macos-11-big-sur-on-unsupported-macs-thread.2242172/page-28?post=28603788#post-28603788
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

1
https://blog.juliensatti.com/install-macos-big-sur-mac-obsolete/

Making WiFi work on Big Sur unsupported Macs with “failed with 66” error

1
https://andv.medium.com/making-wifi-on-big-sur-unsupported-macs-with-failed-with-66-error-36c98e3f7965

[教程] Win版变色龙安装到EFI方法

1
http://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1072629

Previous Shutdown Causes Explained

1
https://georgegarside.com/blog/macos/shutdown-causes/

Stuck on [ PCI CONFIGURATION BEGIN ] npci=0x2000 not working

1
https://www.tonymacx86.com/threads/stuck-on-pci-configuration-begin-npci-0x2000-not-working.49320/

macOS版本歷史 - 維基百科,自由的百科全書

1
https://zh.wikipedia.org/wiki/MacOS%E7%89%88%E6%9C%AC%E6%AD%B7%E5%8F%B2

[Hack] Hackintosh - Install Mac OS X 10.6.8 (Snow Leopard) on ThinkPad X61T (Tablet)

1
https://xuelianghan.tumblr.com/post/52456030005/hack-hackintosh-install-mac-os-x-1068-snow

成功安装MAC OS 10.4.6 for X86

1
http://www.playcase.com/blog/article.asp?id=55

VMware再战MAC 10.5.2

1
http://www.playcase.com/blog/article.asp?id=103

Mac OSx86: 10.4.8 Tiger VMware Installation Guide

1
https://blog.naver.com/sysyphus/70025314227

识别 MacBook Pro 机型

1
https://support.apple.com/zh-cn/HT201300

识别 MacBook 机型

1
https://support.apple.com/zh-cn/HT201608

识别 MacBook Air 机型

1
https://support.apple.com/zh-cn/HT201862

识别 Mac mini 机型

1
https://support.apple.com/zh-cn/HT201894

识别 Mac Pro 机型

1
https://support.apple.com/zh-cn/HT202888

识别您的 iMac 机型

1
https://support.apple.com/zh-cn/HT201634

MacBook Pro机型列表/型号详解(识别MacBook Pro机型)

1
https://www.xiaoyuanjiu.com/10465.html

如何识别 MacBook Pro 机型

1
https://www.jianshu.com/p/45151c1444fd

MacBook - 維基百科,自由的百科全書

1
https://zh.wikipedia.org/wiki/MacBook

iMac (Intel-based) - Wikipedia

1
https://en.wikipedia.org/wiki/IMac_(Intel-based)

iMac Pro - Wikipedia

1
https://en.wikipedia.org/wiki/IMac_Pro

Mac mini - 维基百科,自由的百科全书

1
https://zh.wikipedia.org/wiki/Mac_mini

Mac Pro - 維基百科,自由的百科全書

1
https://zh.wikipedia.org/wiki/Mac_Pro

MacBook Pro - 維基百科,自由的百科全書

1
https://zh.wikipedia.org/wiki/MacBook_Pro

MacBook Air - 維基百科,自由的百科全書

1
https://zh.wikipedia.org/wiki/MacBook_Air

APPLE 电脑型号大全

1
https://blog.csdn.net/zhugq_1988/article/details/42705659

如何获取旧版 macOS

1
https://support.apple.com/zh-cn/HT211683

如何升级至 macOS Big Sur

1
https://support.apple.com/zh-cn/HT201475

iMac - iMac11,1 | Itemcycle

1
https://www.itemcycle.com/imac/id/iMac11,1

iMac - Macmini5,3 | Itemcycle

1
https://www.itemcycle.com/imac/id/Macmini5,3

Apple 15” MacBook Pro (2.53Ghz, Mid 2009); MacBookPro5,4 Installation Guides & Specifications - Macfixit Australia

1
https://support.macfixit.com.au/article/119-apple-15-macbook-pro-253ghz-mid-2009-macbookpro54-installation-guides-specifications

记录一些Opencore黑苹果问题解决方案

1
https://www.cmlnt.com/?p=239

21.5” iMac (Edu, Slim Alum., Early 2013) / 3.3 GHz Core i3 / ME699LL/A

1
https://www.sellyourmac.com/mac-product-guides/imac/me699ll-a-21-5-imac-edu-slim-alum-early-2013-3-3-ghz-core-i3.html

21.5-inch Apple iMac - Late 2013*

1
https://eshop.macsales.com/tech_center/system-specs/iMac2013.09_21.5_143/

Mac & Apple Devices - EveryMac.com’s Ultimate Mac Lookup

1
https://everymac.com/ultimate-mac-lookup/?search_keywords=iMac14,3

黑苹果必备驱动:VirtualSMC 系统管理控制器内核仿冒驱动 1.1.4

1
https://heipg.cn/drivers/virtualsmc-1-1-4.html

[OpenCore] 关于AppleIntelMCEReporter的报错

1
http://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1843338

DSDT与SSDT编译错误解决方案合集汇总

1
http://imacos.top/2019/08/23/1709/

苹果macOS 10.9~10.15系列原版系统镜像下载

1
https://mac.osystem.club/47.html

X61 安装完黑苹果10.6.4 无法驱动无线网卡

1
http://mac.8miu.com/thread-791955-1-1.html

异常处理

1
https://tinylab-1.gitbook.io/lad-book/zh-cn/kernel/core/exception

Mac OS X for PPC (Mac OS 10)

1
http://macintoshgarden.org/apps/mac-osx-mac-os-10-ppc

Mac OS X Public Beta

1
http://macintoshgarden.org/apps/mac-os-x-public-beta

An Unpatched Kernel Bug

1
https://objective-see.com/blog/blog_0x27.html

[Guide] Gigabyte Z77X UD5H Clover UEFI Install/Tweak guide

1
https://www.insanelymac.com/forum/topic/288829-guide-gigabyte-z77x-ud5h-clover-uefi-installtweak-guide/?_fromLogin=1

‘[IOBluetoothHCIController]…– Missing Bluetooth Controller Transport!’

1
https://www.insanelymac.com/forum/topic/320388-iobluetoothhcicontroller-missing-bluetooth-controller-transport/

使用 Mini vMac 搭建一个 System 7.0 虚拟机

1
https://zhuanlan.zhihu.com/p/57342369?from_voters_page=true

How to Install Mac OS System 1.0 - 7.5 in Mini vMac and Run Classic 68k Applications

1
https://www.youtube.com/watch?v=FhdGxH8lzGA

Open core Boot Menu Keyboard Not Working

1
https://www.reddit.com/r/hackintosh/comments/hdlb6i/open_core_boot_menu_keyboard_not_working/
1
https://gist.github.com/naveenkrdy/26760ac5135deed6d0bb8902f6ceb6bd

DRM Compatibility Chart for 10.15

1
https://github.com/acidanthera/WhateverGreen/blob/master/Manual/FAQ.Chart.md

Howto create nVidia EFI string for Geforce the simple way

1
http://forum.netkas.org/index.php?topic=222.0

GPU Buyers Guide

1
https://dortania.github.io/GPU-Buyers-Guide/

使用 QEMU 模拟 PowerPC 版本的 Mac OS X / Classic Mac OS

1
https://blog.qwq.ren/posts/simulation-of-ppc-macos-via-qemu/

Can you virtualize PowerPC versions of Mac OS X on Intel Macs?

1
https://apple.stackexchange.com/questions/22262/can-you-virtualize-powerpc-versions-of-mac-os-x-on-intel-macs

FakeSMC, VirtualSMC, LAN, Sound, Graphics - где взять кексты?

1
https://applelife.ru/threads/fakesmc-virtualsmc-lan-sound-graphics-gde-vzjat-keksty.2942933/page-2#post-744431

[交流] 新手常见(五国)(-v图)错误解决(原版,破解kernel,补丁kext下载)

1
2
https://blog.csdn.net/ashuai81/article/details/8032952
https://blog.csdn.net/JoeBlackzqq/article/details/29359827

[分享] 终于安装上雪豹了,把自己的经验与大家分享,解决了IOATAFamily.kext引起的问题

1
http://bbs.pcbeta.com/viewthread.php?tid=595342

[下载] 最新发布:bootthink 2.5.2 for lion包括WIN版和MAC版~附带Mac OS安装教程

1
http://bbs.pcbeta.com/viewthread-937914-1-1.html

使用 QEMU 模拟 PowerPC 版本的 Mac OS X / Classic Mac OS

1
https://blog.qwq.ren/posts/simulation-of-ppc-macos-via-qemu/

在macos使用qemu安裝windows

1
https://slanla.com/2020-12-17-529

Alternate Guide #1 – OS X Snow Leopard Install using Retail DVD

1
https://tonymacx86.blogspot.com/2009/11/alternate-guide-1-os-x-snow-leopard.html

[分享] 从技术角度谈谈10.11的USB驱动机制,兼论10.11 USB安装盘的花屏禁行问题

1
http://bbs.pcbeta.com/viewthread-1646768-1-1.html

[教程] 新手安装指南:一步一步在Windows安装苹果雪豹系统

1
2
http://bbs.pcbeta.com/viewthread-592288-1-1.html
https://blog.csdn.net/Mamong/article/details/6791740

OCB: boot LoadImage failed - Not Found

1
https://www.tonymacx86.com/threads/ocb-boot-loadimage-failed-not-found.297803/

mac 安装qemu的方法

1
https://blog.csdn.net/qianss520/article/details/90294748

Redundant Robot

1
https://www.redundantrobot.com/sheepshaver

How To Install Mac OS 9 In OS X Using SheepShaver

1
https://www.youtube.com/watch?v=XQAf7GII9NY

Setting up System 7.5.3 with BasiliskII for OSX/macOS

1
https://www.emaculation.com/doku.php/basiliskii_osx_setup#setting_up_system_753_with_basiliskii_for_osx_macos

AMD Mojave Kernel Development and Testing

1
2
https://www.insanelymac.com/forum/topic/335877-amd-mojave-kernel-development-and-testing/page/7/?tab=comments#comment-2658085
https://www.insanelymac.com/forum/topic/335877-amd-mojave-kernel-development-and-testing/page/9/?tab=comments#comment-2661857

Vanilla AMD Hackintosh

1
2
https://kb.amd-osx.com/guides/HS/
https://kb.amd-osx.com/guides/MJ/

/r/Hackintosh Multiboot

1
2
https://hackintosh-multiboot.gitbook.io/hackintosh-multiboot/
https://github.com/midi1996/JBOG/blob/master/Multiboot.md

OpenCore 引导迁移折腾记录

1
https://kirainmoe.com/blog/post/opencore-migration-experience/

XStar-Dev’s Blog

1
https://xstar-dev.github.io/

NVRAM Variables

1
https://docs.google.com/spreadsheets/d/1HTCBwfOBkXsHiK7os3b2CUc6k68axdJYdGl-TyXqLu0/

Boot argument options in OS X

1
https://osxeon.wordpress.com/2015/08/10/boot-argument-options-in-os-x/

小白也能看懂的入门教程DSDT/SSDT/ROM提取完整步骤编译拆分补丁除错实现笔记本电脑电池显示

1
http://imacos.top/2019/07/22/1409/

SNOWLEOPARDAMD INSTALL AND POSTINSTALL

1
https://web.archive.org/web/20201129192905/https://amd-osx.com/forum/viewtopic.php?t=4482#p39746

[教程] Darwin boot loader參數一覽(中文版)

1
http://bbs.pcbeta.com/viewthread-638119-1-3.html

[教程] 【变色龙系列一】Chameleon手动安装说明+ Chameleon 2 RC5 Rev580【11/03更新】

1
http://bbs.pcbeta.com/viewthread.php?tid=797534

[教程] 【变色龙系列二】com.apple.Boot.plist + SMBIOS.plist设定说明【09/22更新】

1
http://bbs.pcbeta.com/viewthread-798366-1-1.html

黑苹果常见kext驱动解读

1
https://macx.top/1972.html

Is there a list of available boot-args for darwin / OS X

1
https://superuser.com/questions/255176/is-there-a-list-of-available-boot-args-for-darwin-os-x

/r/Hackintosh macOS Internet Install

1
https://internet-install.gitbook.io/macos-internet-install/

[交流] DSDT 修改討論 (技嘉) 02/04 更新

1
http://bbs.pcbeta.com/viewthread-633082-1-1.html

[GUIDE] Snow Leopard with 100% vanilla /S/L/E - Comprehensive DSDT patching guide

1
https://www.insanelymac.com/forum/topic/211705-guide-snow-leopard-with-100-vanilla-sle-comprehensive-dsdt-patching-guide/

Mother-FKR/RazerBlade15-Base-Model-Hackintosh_macOS_Big_Sur

1
https://github.com/Mother-FKR/RazerBlade15-Base-Model-Hackintosh_macOS_Big_Sur

[教程] 「教程」简单扯扯用 VMWare 在实体机上装 Big Sur

1
http://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1862049&highlight=big%2Bsur

[Guide] Installing Mountain Lion.

1
https://www.insanelymac.com/forum/topic/277015-guide-installing-mountain-lion/

[Guide] The all-in-one guide to Vanilla OS X (including Chameleon + DSDT) for beginners (updated for Yosemite!)

1
https://www.insanelymac.com/forum/topic/280756-guide-the-all-in-one-guide-to-vanilla-os-x-including-chameleon-dsdt-for-beginners-updated-for-yosemite/

ALL IN ONE GUIDES FOR HACKINTOSH

1
https://www.insanelymac.com/forum/topic/298027-guide-aio-guides-for-hackintosh/

黑苹果常见驱动以及作用介绍

1
http://blog.sina.com.cn/s/blog_4ddc30040102yzho.html

黑果驱动介绍和选择

1
https://zhuanlan.zhihu.com/p/94680998

(GUIDE) Calculating your Bus Ratio

1
https://www.insanelymac.com/forum/topic/240542-guide-getting-your-busratio/

Existing Lilu plugins

1
https://github.com/acidanthera/Lilu/blob/master/KnownPlugins.md

Chameleon 2.4svn Official PKG Installer

1
https://www.insanelymac.com/forum/topic/231075-chameleon-24svn-official-pkg-installer/

[Guide] USB power property injection for Sierra (and later)

1
https://www.tonymacx86.com/threads/guide-usb-power-property-injection-for-sierra-and-later.222266/

Οδηγός Εγκατάστασης MacOSX Lion 10.7 στο project PC (GA-EP35-DS3P). v1.1

1
https://howtomacospc.wordpress.com/2011/12/02/%CE%BF%CE%B4%CE%B7%CE%B3%CF%8C%CF%82-%CE%B5%CE%B3%CE%BA%CE%B1%CF%84%CE%AC%CF%83%CF%84%CE%B1%CF%83%CE%B7%CF%82-macosx-lion-10-7-2-%CF%83%CF%84%CE%BF-project-pc-ga-ep35-ds3p-v1-1/

The Always Up-to-Date Guide to Building a Hackintosh (macOS Sierra)

1
https://lifehacker.com/the-always-up-to-date-guide-to-building-a-hackintosh-o-5841604

How to easily install Mac OS X Lion on your PC / Laptop Osx86 Hackintosh Walkthrough / Tutorial

1
https://www.youtube.com/watch?v=f6gnFSwRVpI

Δημιουργία DVD Mac OS X Lion installation για PC (video)

1
https://howtomacospc.wordpress.com/2011/10/30/%ce%b4%ce%b7%ce%bc%ce%b9%ce%bf%cf%85%cf%81%ce%b3%ce%af%ce%b1-dvd-lion-installation-%ce%b3%ce%b9%ce%b1-pc/

Installation Guides

1
https://wiki.osx86project.org/wiki/index.php/Installation_Guides

Cómo activar Intel HD 2500 ga-z77-d3h en OS X 10.8.5 Mountain Lion

1
https://www.osx86spain.com/52/47197/como-activar-intel-hd-2500-ga-z77-d3h-en-os-x-10-8-5-mountain-lion.html

Install OS X Lion 10.7.2, 10.7.3 on PC Hackintosh [USB]

1
https://geeknizer.com/install-osx-lion-10-7-2-on-pc-hackintosh-usb/

Install Snow Leopard on PC

1
https://geeknizer.com/install-snow-leopard-on-pc/

Retail OS X Install (10.5.7) on Gigabyte GA-EX58-UD5 (Core i7) Mobo, Scripted

1
https://wiki.osx86project.org/wiki/index.php/Retail_OS_X_Install_%2810.5.7%29_on_Gigabyte_GA-EX58-UD5_%28Core_i7%29_Mobo%2C_Scripted

Dual Boot Windows 7 and OS X Snow Leopard Using Chameleon

1
https://tonymacx86.blogspot.com/2009/11/dual-boot-windows-7-and-os-x-snow.html

Build a Hackintosh Mac for Under $800

1
https://lifehacker.com/build-a-hackintosh-mac-for-under-800-321913

Инсталация на mac os x 10.5.x на ПЦ с дуалбуут

1
https://www.kaldata.com/forums/topic/157610-%D0%B8%D0%BD%D1%81%D1%82%D0%B0%D0%BB%D0%B0%D1%86%D0%B8%D1%8F-%D0%BD%D0%B0-mac-os-x-105x-%D0%BD%D0%B0-%D0%BF%D1%86-%D1%81-%D0%B4%D1%83%D0%B0%D0%BB%D0%B1%D1%83%D1%83%D1%82/

creating a kext disabler

1
https://www.tonymacx86.com/threads/creating-a-kext-disabler.48254/

【持续更新】OpenCore引导-v各种卡及OC引导常见问题解决方案速查表合集

1
http://imacos.top/2021/01/19/0154/

How to update to 10.5.2./10.5.3

1
http://netkas.org/?p=50

Triple Boot Windows 7, Mac OS X Snow Leopard & Ubuntu 10.04

1
https://bigfloppydonkeydisk.blogspot.com/2010/07/triple-boot-windows-7-mac-os-x-snow.html

Vista bootloader

1
https://wiki.osx86project.org/wiki/index.php/Vista_bootloader

Understanding MAC OSx86 for Dummies

1
https://geeknizer.com/understanding-mac-osx86-for-dummies/

Download, Install Chameleon RC4 Bootloader

1
https://geeknizer.com/download-install-chameleon-bootloader/

Dual Booting Windows 7 and Snow Leopard on a HP dv5 Laptop - The Definitive Guide!

1
https://kylesinterestingstuff.blogspot.com/2010/06/dual-booting-windows-7-and-snow-leopard.html

Install Mac OS X – HP DV1000

1
https://cisco21c.wordpress.com/2011/01/21/install-mac-os-x-hp-dv1000/

Install Snow Leopard on AMD PC, Laptop

1
https://geeknizer.com/install-snow-leopard-on-amd/

Instalación OS X 10.9 Mavericks con MyHack

1
https://www.osx86spain.com/148/47060/instalacion-os-x-10-9-mavericks-con-myhack.html#

How to Build a Hackintosh with Snow Leopard, Start to Finish

1
https://lifehacker.com/how-to-build-a-hackintosh-with-snow-leopard-start-to-f-5351485

Installation Guides/Kalyway DualBoot 10.5.2

1
https://wiki.osx86project.org/wiki/index.php/Installation_Guides/Kalyway_DualBoot_10.5.2

Install Snow Leopard on Your Hackintosh PC, No Hacking Required

1
https://lifehacker.com/install-snow-leopard-on-your-hackintosh-pc-no-hacking-5360150

How to Install SnowOSX Universal

1
https://geeknizer.com/how-to-install-snowosx-universal/

Install OS X 10.8 Mountain Lion on PC Hackintosh [Bootable USB]

1
https://geeknizer.com/install-osx-mountain-lion-on-pc-hackintosh-usb/

Make Bootable USB Mountain Lion Install Disk drive [Easy]

1
https://geeknizer.com/make-bootable-usb-mountain-lion-install-disk-drive/

Install Mac OS X Lion 10.7 on PC Hackintosh

1
https://geeknizer.com/install-mac-os-lion-10-7-on-pc-hackintosh/

Installation Guides/Existing Leopard Method

1
https://wiki.osx86project.org/wiki/index.php/Installation_Guides/Existing_Leopard_Method

Snow Leopard on Samsung R519

1
https://www.unix-master.com/2013/06/snow-leopard-on-samsung-r519.html

Using “myHack installer” with additional custom kext files

1
https://wiki.osx86project.org/wiki/index.php/Using_%22myHack_installer%22_with_additional_custom_kext_files

How to Build a Hackintosh Mac and Install OS X in Eight Easy Steps

1
https://lifehacker.com/how-to-build-a-hackintosh-mac-and-install-os-x-in-eight-5672051

Hackintosh Upgrades Without Problems to 10.6.1

1
https://lifehacker.com/hackintosh-upgrades-without-problems-to-10-6-1-5356864

Make Bootable USB [OSx86, Snow Leopard]

1
https://geeknizer.com/make-bootable-usb-mac-osx86-snow-leopard/

Install Mac OS X Leopard OSx86 on PC Dual Boot Windows 7, Vista in 9 Easy Steps

1
https://geeknizer.com/install-mac-os-x-leopard-osx86-on-pc-dual-boot-windows-7-vista-in-9-easy-steps/

OSX 10.6.8 running on Toshiba M305

1
https://thetalesnet.wordpress.com/2011/06/28/osx-10-6-8-running-on-toshiba-m305/

How to install 10.4.4 on Dell Inspiron 8500

1
https://wiki.osx86project.org/wiki/index.php/How_to_install_10.4.4_on_Dell_Inspiron_8500

The Dual boot Tutorial With installing (Snow) Leopard and Windows 7 on a PC OSX86 Tutorial

1
https://www.youtube.com/watch?v=ZRHbmsVZ3ww

Install Mac OSX Snow Leopard 10.6.6 VMware on Windows PC

1
https://geeknizer.com/install-mac-osx-snow-leopard-10-6-6-vmware-on-windows-pc/

How to install OS X 10.9 Mavericks on your PC with myHack

1
http://www.macbreaker.com/2013/06/how-to-install-os-x-109-mavericks-dp1.html

Quad booting

1
https://wiki.osx86project.org/wiki/index.php/Quad_booting

Make Bootable USB, DVD drive for OS X Lion Installation

1
https://geeknizer.com/make-bootable-usb-dvd-drive-os-x-lion-installation/

OpenCore引导各平台所需要的SSDT

1
http://imacos.top/2020/03/29/ssdt/

Wingrub instead of Grub

1
https://wiki.osx86project.org/wiki/index.php/Wingrub_instead_of_Grub

Multibooting

1
https://wiki.osx86project.org/wiki/index.php/Multibooting

Stock XP and OS X Dual Boot

1
https://wiki.osx86project.org/wiki/index.php/Stock_XP_and_OS_X_Dual_Boot

MacOSx86 10.4.5 via VMWare on WinXP Pro Sp2

1
https://buddhistnerd.blogspot.com/2006/06/namaste-friends.html

Install Snow Leopard on PC [USB]

1
https://geeknizer.com/install-snow-leopard-on-pc-easy/

How to Troubleshoot a Hackintosh

1
https://lifehacker.com/how-to-troubleshoot-a-hackintosh-5845186

Install Mac OS X Leopard OSx86 on PC Dual Boot Windows 7, Vista in 9 Easy Steps

1
https://geeknizer.com/install-mac-os-x-leopard-osx86-on-pc-dual-boot-windows-7-vista-in-9-easy-steps/

10.5.5 on the Dell Inspiron/mini 9

1
https://wiki.osx86project.org/wiki/index.php/10.5.5_on_the_Dell_Inspiron/mini_9

Install to a USB Hard Drive

1
https://wiki.osx86project.org/wiki/index.php/Install_to_a_USB_Hard_Drive

Intel 3945 Wireless Driver for Snow Leopard [Hackintosh]

1
https://geeknizer.com/intel-3945abg-wireless-snow-leopard-hackintosh/

ZDNet.de - Praxis: Installation von Mac OS X 10.6 auf einem PC

1
https://www.youtube.com/watch?v=lfzXhzMrruI

The Dual boot Tutorial With installing (Snow) Leopard and Windows 7 on a PC OSX86 Tutorial

1
https://www.youtube.com/watch?v=ZRHbmsVZ3ww

Mac OS X86!!! Run Mac natively on windows

1
https://drchoc.blogspot.com/2006/04/mac-os-x86-run-mac-natively-on-windows.html

Το OS X x86 στο windows-PC σας!

1
https://makosxgr.blogspot.com/

Simple Dual Boot

1
https://wiki.osx86project.org/wiki/index.php/Simple_Dual_Boot

Triple Booting Windows, Linux, and OSX86.

1
https://cy8erpunkthunk.blogspot.com/2006/03/triple-booting-windows-linux-and-osx86.html

Installatie van Kalyway/OSX en bootloader Vista/XP

1
https://docs.google.com/document/d/1RO_-oS4h3_i3iA-buWXoHQM3Q9ocg87ACKz-zvtkWl8/edit

Mac osx86 iDeneb 10.5.6

1
https://pools.wordpress.com/2009/02/26/mac-osx86-ideneb-1056/

Atualizando o iDeneb da versão 10.5.6 para a 10.5.7

1
https://pools.wordpress.com/2009/06/29/atualizando-o-ideneb-da-versao-10-5-6-para-a-10-5-7/

Atualizando o iDeneb para a versão 10.5.8

1
https://pools.wordpress.com/2009/08/12/atualizando-o-ideneb-para-a-versao-10-5-8/

Installation Guides/Pentium4D-G31M-GS-R2.html

1
https://wiki.osx86project.org/wiki/index.php/Installation_Guides/Pentium4D-G31M-GS-R2.html

Using a British/UK Windows keyboard with an Apple Mac in OS X (3)

1
https://www.gyford.com/phil/writing/2005/11/20/using-a-british/

Installation Guides/Kalway AMD 10 5 2

1
https://wiki.osx86project.org/wiki/index.php/Installation_Guides/Kalway_AMD_10_5_2

Install Mac OS X Leopard OSx86 on PC Dual Boot Windows 7, Vista in 9 Easy Steps

1
https://geeknizer.com/install-mac-os-x-leopard-osx86-on-pc-dual-boot-windows-7-vista-in-9-easy-steps/

Praxis: Installation von Mac OS X 10.6 auf einem PC

1
https://www.zdnet.de/41502928/praxis-installation-von-mac-os-x-10-6-auf-einem-pc/

Installation Guide in Turkish

1
https://wiki.osx86project.org/wiki/index.php/Installation_Guide_in_Turkish

Programas Essenciais no MacOSX

1
https://pools.wordpress.com/2009/03/29/60/

Como instalar o Windows XP, Mac OSX86 10.5.6 e o Linux Ubuntu 9.04 no PC com Triple Boot!

1
https://pools.wordpress.com/2009/06/29/como-instalar-windows-xp-mac-osx86-ubuntu-904-triple-boot/

Mac OS X Leopard Retail Installation Simple Guide

1
https://web.archive.org/web/20120510121540/http://3rr0rists.net/macintosh/mac-os-x-leopard-retail-installation-simple-guide.html

How To Install Mac OS X Lion on PC

1
https://web.archive.org/web/20120324081231/http://3rr0rists.net/macintosh/how-to-install-mac-os-x-lion-on-pc.html

How To Install Snow Leopard Retail on a PC

1
https://web.archive.org/web/20120324031242/http://3rr0rists.net/macintosh/how-to-install-snow-leopard-retail-in-a-pc.html

Installing OS X Snow Leopard

1
2
3
http://lnx2mac.blogspot.com/2010/07/installing-os-x-snow-leopard-part-one.html
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

Inverting direction of mouse scroll wheel

1
https://superuser.com/questions/310681/inverting-direction-of-mouse-scroll-wheel/364353#364353

OpenCore 简体中文参考手册

1
https://oc.skk.moe/

Optimal BIOS Configuration

1
http://lnx2mac.blogspot.com/2010/07/optimal-bios-configuration.html

[GUIDE] HP ProBook 4530s with Lion 10.7.5

1
https://www.insanelymac.com/forum/topic/282994-guide-hp-probook-4530s-with-lion-1075

10.9 Mavericks Simple Vanilla Hackintosh Install Guide

1
https://www.insanelymac.com/forum/topic/289062-109-mavericks-simple-vanilla-hackintosh-install-guide/

[Guide] El Capitan, Sierra / High Sierra / Mojave / Catalina on Intel 5, 6, 7, 8, 9 Chipset Series / Nehalem, SandyBridge, IvyBridge, Haswell, Broadwell

1
https://www.insanelymac.com/forum/topic/323052-guide-el-capitan-sierra-high-sierra-mojave-catalina-on-intel-5-6-7-8-9-chipset-series-nehalem-sandybridge-ivybridge-haswell-broadwell/

10.11.0-10.11.3 Skylake Starter Guide

1
https://www.tonymacx86.com/threads/10-11-0-10-11-3-skylake-starter-guide.179221/

[Guide] 10.11+ USB changes and solutions

1
https://www.tonymacx86.com/threads/guide-10-11-usb-changes-and-solutions.173616/

[Guide] Alternative to the minStolenSize patch with 32mb DVMT-prealloc

1
https://www.tonymacx86.com/threads/guide-alternative-to-the-minstolensize-patch-with-32mb-dvmt-prealloc.221506/

iBoot + MultiBeast: Install Mac OS X on any Intel-based PC

1
https://tonymacx86.blogspot.com/2010/04/iboot-multibeast-install-mac-os-x-on.html

Tweaking Your System: Install Chameleon, DSDT, & Extras to EFI Partition

1
https://tonymacx86.blogspot.com/2010/01/tweaking-your-system-install-chameleon.html

How to Install Snow Leopard on PC [Hackintosh]

1
https://geeknizer.com/how-to-install-mac-os-x-snow-leopard-on-pc-dual-boot/

Cómo Instalar Mac OS X desde wmware para iniciar en nativo

1
https://www.osx86spain.com/107/4229/c-mo-instalar-mac-os-x-desde-wmware-para-iniciar-en-nativo.html

How to Install Snow Leopard on VirtualBox

1
https://geeknizer.com/install-snow-leopard-virtualbox/

How to Install Snow Leopard [VMWare]

1
https://geeknizer.com/how-to-install-snow-leopard-vmware-workstation-windows/

Install Mac OS X in VirtualBox [Snow Leopard]

1
https://geeknizer.com/install-mac-os-in-virtualbox/

[教程] 通过加载AppleLPC.kext来使用MAC原生的CPU电源管理

1
http://bbs.pcbeta.com/viewthread.php?tid=594984

3rdPartyDrivers

1
https://wiki.osx86project.org/wiki/index.php/3rdPartyDrivers

First generation Intel HD Graphics on macOS

1
https://github.com/Goldfish64/ArrandaleGraphicsHackintosh

Завод Intel® Quick Sync Video

1
https://www.applelife.ru/threads/zavod-intel-quick-sync-video.817923/

Установка macOS High Sierra 10.13 на intel PC

1
https://www.applelife.ru/threads/ustanovka-macos-high-sierra-10-13-na-intel-pc.2210706/page-742#post-730496

Intel® HD Graphics FAQs

1
https://github.com/acidanthera/WhateverGreen/blob/master/Manual/FAQ.IntelHD.en.md

Intel® HD Graphics

1
https://www.applelife.ru/threads/intel-hd-graphics.1289648/page-170#post-750369

WhateverGreen/Manual/AzulPatcher4600_equivalent.plist

1
https://github.com/acidanthera/WhateverGreen/blob/master/Manual/AzulPatcher4600_equivalent.plist

GUIDE: Using a EFI Graphics string

1
http://forum.netkas.org/index.php/topic,66.0.html

GFX Strings Walkthrough

1
https://aquamac.proboards.com/thread/509

Intel Gma950 32bit only

1
https://www.applelife.ru/threads/intel-gma950-32bit-only.22726/

Install Snow Leopard on a PC / Laptop (OSX86) Tutorial/guide

1
https://www.youtube.com/watch?v=RVan49_Vm_I

Anti-Hackintosh Buyers Guide

1
https://dortania.github.io/Anti-Hackintosh-Buyers-Guide/

Выбор комплектующих для Mac OS X (Hackintosh)

1
https://4pda.to/forum/index.php?showtopic=72333

CPU Compatibility

1
https://hackintoshenglish.fandom.com/wiki/CPU_Compatibility

Установка macOS Catalina 10.15 на intel PC

1
2
https://applelife.ru/threads/ustanovka-macos-catalina-10-15-na-intel-pc.2944136/page-43#post-810430
https://applelife.ru/threads/ustanovka-macos-catalina-10-15-na-intel-pc.2944136/page-39#post-810111

Установка macOS Big Sur 11.0 beta на intel PC (old)

1
https://applelife.ru/threads/ustanovka-macos-big-sur-11-0-beta-na-intel-pc-old.2944999/page-81#post-884400

One box, every x86 install! HP DC 7900

1
https://www.reddit.com/r/hackintosh/comments/j0d6t0/one_box_every_x86_install_hp_dc_7900/

Getting started with ACPI

1
https://dortania.github.io/Getting-Started-With-ACPI/

HP Compaq DC7900 SFF

1
2
https://github.com/khronokernel/trashOS
https://github.com/khronokernel/trashOS/tree/master/HP-Compaq-DC7900

Multiboot with OpenCore

1
https://dortania.github.io/OpenCore-Multiboot/

OpenCore-Install-Guide/clover-conversion

1
https://github.com/dortania/OpenCore-Install-Guide/tree/master/clover-conversion

faq - hackintosh

1
https://www.reddit.com/r/hackintosh/wiki/faq#wiki_hackintoshing_reddit_faq

使用 OpenCL 和 OpenGL 图形处理程序的 Mac 电脑

1
https://support.apple.com/zh-cn/HT202823

Introduction - USB Map

1
https://usb-map.gitbook.io/project/

[Guide] Intel Framebuffer patching using WhateverGreen

1
https://www.tonymacx86.com/threads/guide-intel-framebuffer-patching-using-whatevergreen.256490/

Установка macOS Big Sur 11.0 beta на intel PC (old)

1
https://applelife.ru/threads/ustanovka-macos-big-sur-11-0-beta-na-intel-pc-old.2944999/page-81#post-884400

APFS Snapshots: Rolling Back to a Previous Known State

1
https://www.lifewire.com/roll-back-apfs-snapshots-4154969

Making a bootable High Sierra USB Installer Entirely From Scratch in Windows or Linux Mint (without access to Mac or App Store Installer.app)

1
https://www.insanelymac.com/forum/topic/329828-making-a-bootable-high-sierra-usb-installer-entirely-from-scratch-in-windows-or-linux-mint-without-access-to-mac-or-app-store-installerapp/

Clover v.2 Instructions

1
https://www.insanelymac.com/forum/topic/282787-clover-v2-instructions/

Big Sur on unsupported Macs TL;DR

1
https://lynx.pink/big-sur-unsupported-macs-tldr/#/

BasiliskII for Linux

1
https://emaculation.com/doku.php/basiliskii_linux_setup

Extracting a ROM for use in SheepShaver using Basilisk II

1
https://emaculation.com/doku.php/sheepshaver_roms

SheepShaver Brings the Classic Mac OS to Intel Macs and Leopard

1
https://lowendmac.com/2008/sheepshaver-brings-the-classic-mac-os-to-intel-macs-and-leopard/

Mac OS 11.3 has broken support for older Mac Pros

1
https://forums.macrumors.com/threads/mac-os-11-3-has-broken-support-for-older-mac-pros.2289056/

QEMU/Mac OS 9

1
https://en.wikibooks.org/wiki/QEMU/Mac_OS_9

Qemu [E-Maculation wiki]

1
https://www.emaculation.com/doku.php/qemu

Mini vMac for iOS

1
https://namedfork.net/minivmac/

SheepShaver for Linux

1
https://www.emaculation.com/doku.php/ubuntu

Pattern of MLB (Main Logic Board) serial

1
https://www.insanelymac.com/forum/topic/303073-pattern-of-mlb-main-logic-board/s

Olarila

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
https://www.olarila.com/topic/9679-olarila-big-sur-beta-5-vanilla-image-restore-mode-easy-way-opencore/
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/