
注意:本教程需要您定制好USB,以及原生电源管理,请配合视频使用
文章了参考xjn等大佬的内容
所需要的软件我已经放在这个网盘里了,如果你比较懒,直接从这里下载,以后我做这类教程,需要的软件等我都会放在这个链接里
https://share.weiyun.com/uPLQfZFI
Part1
所需的软件以及东西:

玩黑苹果的都懂吧
https://github.com/headkaze/Hackintool

编辑ACPI文件的,玩黑苹果的应该也知道
https://github.com/acidanthera/MaciASL

opencore的config编辑工具
https://github.com/ic005k/QtOpenCoreConfig
其实这里也可以用 opencore config 也可以。这个软件Windows,mac,甚至Linux都可以用,当然大佬用propertree之类的我也不拦着,这个也自带一些通用的EFI配置,很好用。看这个视频播放情况吧,有时间的话我可能会单独介绍一下这个软件
OC-little的包:
https://github.com/daliansky/OC-little
国内访问慢的也可以去gitee下载,这个可能需要注册账号
https://gitee.com/BI4PWI/oc-little2
Part2 ACPI表的提取(如果有就跳过)
这个方法需要到windows下进行操作
参考自https://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1544506&highlight=
涉及到的指令:
acpidump.exe -b
del facp.dat facs.dat xsdt.dat
ren dsdt.dat dsdt.aml
del dsdt.dat
iasl -d dsdt.aml
下载网站:
https://www.acpica.org/
Part 3 判断睡眠唤醒的原因,以及以我的机子为例的睡眠问题解决的两种方法
什么是_PRW?
- `_PRW` 定义了一个部件的唤醒方法。其 `Return` 2 个或者 2 个以上字节组成的数据包。有关 `_PRW` 详细的内容参见 ACPI 规范。
- 有这么一些部件,由于他们的 `_PRW` 和 macOS 发生了冲突从而导致机器刚刚睡眠成功就被立即唤醒。为了解决问题,必须对这些部件实施补丁。这些部件 `_PRW` 数据包的第 1 个字节是 `0D` 或者 `6D`。因此,这种补丁被称为 `0D/6D补丁`,也叫`秒醒补丁`,也叫`睡了即醒补丁`。为了描述方便,以下统一称之为 `0D/6D补丁`。
- `_PRW` 数据包的第 2 个字节多为 `03` 或者 `04`,将这个字节修正为 `0` 即完成了 `0D/6D补丁`。
- 不同的机器对 `_PRW` 定义的方法可能不同,其数据包的内容、形式也可能多样化。实际的 `0D/6D补丁` 应视具体情况而定。见后文的描述。
- 我们期待 OpenCore 后续版本能够解决 `0D/6D` 问题。
引用自readme的内容
↑看不懂也没关系,跟着我的视频来就可以了
确定什么部件导致的唤醒终端里输入下面的命令,这个表示的是显示最近一天的睡眠的唤醒原因
log show --last 1d | grep "Wake reason" 你可能会看到类似以下的内容:
2022-01-29 14:06:41.253213+0800 0x74 Default 0x0 0 0 kernel: (AppleACPIPlatform) AppleACPIPlatformPower Wake reason: EHC1,EHC2,XHC,GLAN EHC1,EHC2,XHC这些三个部件一般是usb设备(我视频里录的时候可能没说),你要确定哪个USB部件是没有用的你可以打开hackintool来确定这个问题

我想保留键盘能唤醒电脑的这个功能,那么XHC的_PRW部件就不能修改,但EHC1,EHC2在我的电脑上是没有任何接口的,所以得修改
GLAN一般是你的有线网卡
CNVW(CNVI网卡),你的主板得有
HDEF 音频 等等
一般除了USB得特殊看一眼以外,其他的都需要按教程让_PRW失效(具体请看视频)
注:Part4的方法仅适用于method类型(大多数电脑应该都是这种类型),其他的请按照oclittle里面的readme.md的内容进行睡眠唤醒问题的修复
Part4-方法一(参考自使用 OpenCore 引导黑苹果 - Xjn's Blog (xjn819.com))
个人认为这个要比方法二好一点,因为方法二只能用电源键唤醒。
1.打开DSDT,确定要填写的内容
这里就是一个还没全部翻译好的 oc 版改名 xhc 的 prw。那么如何定位 xhc 下的 _prw 呢,主要是填写 Count 和 Skip。其实 oc 的 tgtbridge 是通过一个个数过去来定位具体哪一个位置的。比如xhc的prw是整张dsdt里面的第55个,那 skip 填 54,意味着跳过前 54 个,从第 55 个开始执行。那执行多少次呢?执行一次 count 就填 1;比如你要同时改第 55 个和 56 个,那 count 就填 2。
引用自xjn大佬的博客
多读几遍,挺好理解
2.需要在在OC-ACPI-PATCH添加的内容:
Comment String XHC:_PRW to XPRW
Count Number //需要重点解释
Enabled Boolean True //表示应用此补丁,不应用选False
Find Data 5F505257 //hex转text的含义即是:_PRW
Limit Number 0 //这个按默认即可 不去管他
Mask Data <> //这个按默认即可 不去管他
OemTableId Data <> //这个按默认即可 不去管他
Replace Data 58505257 //hex转text的含义即是:XPRW
ReplaceMask Data <> //这个按默认即可 不去管他
Skip Number //需要重点解释
TableLength Number 0 //这个按默认即可 不去管他
TableSignature Data 44534454 //hex转text的含义即是:DSDT,这里按默认即可,代表对dsdt进行修改
3.清理日志,重启电脑,观察睡眠是否不再醒了,如果没有,再来一遍步骤1~2
Part4-方法二
直接把相应的ACPI文件导进去,在OC-ACPI-PATCH添加一些内容:
Comment: GPRW to XPRW
Count:0
Enabled:YES
Find:<4750525702> //UPRW的机子需要修改,GPRW不用管
Limit:0
Mask:<>
OemTable:<>
Replace:<5850525702>//UPRW的机子需要修改,GPRW不用管
ReplaceMask:<>
Skip:0
TableLength:0
TableSignature:<>
find和replace这里UPRW的机子看一下dsl文件开头的注释,你们需要改一下find和replace的值,其余不用动,值在如图的黑框部分,打开SSDT-UPRW.dsl就能看到,和我视频一样的GPRW的那些人,不用管这部分,直接照抄上表就行

SSDT-UPRW
然后重启就行,没什么可说的,理论上你的机子除了电源键,任何方式都唤醒不了了
感谢收看,喜欢的话,给我的视频来个三联吧!免费的赞也可以!谢谢!你的支持对我很重要!视频部分地方由于录制原因可能有喷麦,声音大小不一样等问题,下次注意。
视频BV号:BV1B34y127Cf