黑苹果启用休眠简单步骤

2020-05-12 / 2.13w / 教程 / 4.43k / 13分钟

概述

本文最后更新:2020年9月29日

使用笔记本电脑安装黑苹果的同学,因为省电刚需的关系几乎都需要经历排查各种问题开启休眠功能,本文将简单介绍黑苹果开启休眠需要调试的功能和文件。总的来说,休眠功能调试应该是黑苹果安装最后一个步骤,因为需要的前置条件很多且都是黑苹果必须的步骤,所以在进行休眠调试前,请确定已将其它大部分问题解决。

最后,因个人经验和知识量有限,如无法解决您的问题请见谅。

 

需要调试正常的功能

  • 功能正常的 CPU 电源管理
  • 正常驱动的核显(如果有)
  • 运作正常的 NVRAM(无论原生或模拟)
  • 定制好的 USB 端口
  • 已解锁的 CFG Lock(MSR 0xE2写保护)

 

需要的 kext 和软件

  • Lilu.kext:目前黑苹果必备
    • WhateverGreen.kext:用于驱动核显/独显,解决驱动显卡相关功能(该 kext 依赖 Lilu.kext)
    • HibernationFixup.kext:用于修复休眠睡死或者黑屏等问题(该 kext 依赖 Lilu.kext)
    • CpuTscSync.kext:某些从休眠中唤醒后内核崩溃的问题,该 kext 可能有帮助(依赖 Lilu.kext)。
  • Hackintool.app,用于修改/查看目前的休眠模式
  • 使用 AptioMemoryFix.efi 驱动系统
    • Clover 现在也可以使用 OpenCore 的 OpenRuntime.efi 搭配 OcQuirks.efi,具体参阅本文

 

系统功能调试顺序

以下每一步操作涉及的内容可能看起来不多,但操作起来全是问题,请耐心研究,执行每一步操作前请务必备份文件。

  • 首先确认 BIOS 中的 CFG Lock(MSR 0xE2写保护)已解锁,这对于开启休眠可能不是必须的,因为在 OpenCore 中提供了一种基于 NVRAM 的休眠方式,同时,解锁 CFG 锁定对其它功能也有益。如果你的 BIOS 无法解锁这个选项,可参考这篇这篇文章;
  • 接下来 Clover 用户需确认是否正在使用 AptioMemoryFix.efi 驱动系统,此 efi 文件主要解决内存地址分配问题,具体可参阅此文中关于“内存修复驱动”和“关于 slide 值”部分;
    • OpenCore 用户 0.5.7 版本以下检查 /EFI/OC/ACPI/ 下是否有 FwRuntimeServices.efi,以上版本(包括 0.5.7)用户检查是否有 OpenRuntime.efi;
  • 完成上一步,重启正常后,给你的黑苹果选择合适的 SMBIOS 机型,完成注入三码
  • 三码正常重启应用后,检查 CPU 电源管理,一般来说,如果你的 CPU 正常睿频,并且 X86PlatformPlugin 和 X86PlatformShim 是正常加载状态,电源管理就是正常的(绝大部分第六/七/八/九代酷睿都不会遇到这个问题)。如果不正常,那你应该连睿频都会遇到问题,解决方法参考 CPUFriend.kext 使用方法以及ssdtPRGen.sh生成处理器变频配置
  • 接下来完成驱动核显(如果有),大部分 iMac 机型使用核显+独显进行编解码,完成后可用 VideoProc.app 查看驱动情况,并使用这个 5K 小工具测试性能是否正常;

  • 下一步,测试和启用主板的 NVRAM,具体参考这里,无论使用原生或模拟都是可以的;
  • NVRAM 重启正常应用后,应定制 USB 端口,注意把键盘/鼠标/蓝牙/RGB控制器设置为内置 USB 设备,否则可能出现休眠秒醒;

 

kext和软件安装&调试

  • Clover 用户把 Lilu.kext / WhateverGreen.kext / HibernationFixup.kext / VirtualSMC.kext 放到 /EFI/Clover/Kexts/Other/,OpenCore 用户放到 /EFI/OC/Kexts/,如果没有文件夹就创建一个。这个步骤应该大部分用户都无需操作,因为现在大部分下载到的配置好的 EFI 文件都包含这几个 kext(但 HibernationFixup.kext 大部分 EFI 都没有,如果你用的是别人配置的 EFI 请注意检查)。
  • 接下来打开 Hackintool.app,切换到“电源”选项卡,查看目前的休眠模式:

  • 如果有红色条目,可以点击下方的小螺丝刀进行“修复”。同时,也可以使用 终端.app 输入以下命令查看目前的休眠模式:
pmset -g

  • 其中 AC Power 指的是外接电源,Battery Power 指的是内置电池(笔者是台式机所以不显示电池方案)。
  • 以上都完成后,可在 偏好设置 → 节能 开启以下选项:
    • 如果可能,使硬盘进入睡眠;
    • 唤醒以提供网络访问;
    • 请勿启动电能小憩,因为这涉及到黑苹果设置 Darkwake 状态的问题(背后涉及 XNU 以及 Darwin,非常脑壳疼)。电能小憩的行为基本如下:在开启电能小憩的情况下,白苹果会周期性自动唤醒,进行邮件收取/更新或备份系统等其它操作,当这些操作完成后,白苹果会自动再次进入休眠。这个过程会让大部分的黑苹果系统 Game Over;
    • 其它选项均可不启用。

 

选择休眠模式

  • 下面是关于“休眠(Hibernate)”和“睡眠(Sleep)”的说明,在终端使用如下命令:
pmset -g | grep hibernatemode
  • 根据上面终端命令返回的值,可得出目前正在使用的休眠模式,具体来说有以下几种:
    • 0 —旧休眠模式
      • 休眠期间内存是通电状态,禁用安全睡眠,唤醒超快速,原是桌面端 Mac 的默认模式;
    • 1 —睡眠模式
      • 该模式会把内存中的数据写入硬盘,文件位置:/var/vm/sleepimage。macOS 在休眠时将完全关闭。因为需要读取先前保存在硬盘中的内存数据,该模式唤醒较慢,但理论上应该是最为省电的模式。注意该模式在每次休眠时会向硬盘写入和内存等大的文件,如果内存空间太大,日积月累下来还是挺恐怖的;
    • 3 —休眠模式(2005年末后机型默认使用)
      • 休眠过程中,内存保持通电状态,同时内存数据在进入睡眠模式之前同样要写入到硬盘,直到电池到达临界值,macOS 会自动进入休眠模式。基本上是 模式0 和 模式1 的结合,这个模式也叫 Safe Sleep,是移动版 Mac 的默认睡眠模式,该模式唤醒可快可慢,取决于休眠时长;
    • 5 —和模式1基本一致
      • 该模式是为了使用安全虚拟内存而设, System Preferences -> Security(系统设置 → 安全)
    • 7 —和模式3基本一致
      • 同样是为了安全虚拟内存而设
  • 以上所有模式可通过以下终端命令设置,修改最后面的数字即可。台式机推荐模式0,笔记本推荐模式1或模式3,但网上也有笔记本案例说模式 23/25/57 等奇怪数字解决问题的,其中 25 是最多的。
sudo pmset -a hibernatemode 3
  • 如果还想更进一步省电,可设置在休眠后断开网络连接:
sudo pmset -b tcpkeepalive 0

 

排错方法

  • 以上设置都完成后,点击  苹果图标 → 睡眠 即可进行测试,尽量让测试时间长一点,至少 5 分钟。
  • 如果出现秒唤醒,或睡死等情况,使用以下命令查询日志原因:
log show --start '2020-5-12 12:00:00' --end '2020-5-12 12:05:00' | grep 'Wake reason'
  • 其中 start 时间和 end 时间分别对应开始和结束,可自行指定;
  • 因为错误类型可能繁多,每个机型可能遇到不同问题,此命令提取出的 Wake reason 可直接复制到搜索引擎搜索有没有相关参考;
  • 某些笔记本机型可能模式1、模式3、模式5、模式7都无法使用,可逐个测试;
  • 如果显示以下内容,代表唤醒是由用户按下电源按钮造成的:
Wake reason: PWRB (User)

 

使用 SSDT

这里推荐一个能解决大部分台式机睡眠问题(睡了即醒)的 SSDT,Credit @Sukka。

/*
 * Intel ACPI Component Architecture
 * AML/ASL+ Disassembler version 20180427 (64-bit version)(RM)
 * Copyright (c) 2000 - 2018 Intel Corporation
 * 
 * Disassembling to non-symbolic legacy ASL operators
 *
 * Disassembly of iASLH8qhUx.aml, Sat Jul 25 17:33:07 2020
 *
 * Original Table Header:
 *     Signature        "SSDT"
 *     Length           0x00000065 (101)
 *     Revision         0x02
 *     Checksum         0x21
 *     OEM ID           "OCLT"
 *     OEM Table ID     "GPRW"
 *     OEM Revision     0x00000000 (0)
 *     Compiler ID      "INTL"
 *     Compiler Version 0x20180427 (538444839)
 */
DefinitionBlock ("", "SSDT", 2, "OCLT", "GPRW", 0x00000000)
{
    External (XPRW, MethodObj)    // 2 Arguments (from opcode)
    Method (GPRW, 2, NotSerialized)
    {
        If (_OSI ("Darwin"))
        {
            If (LEqual (0x6D, Arg0))
            {
                Return (Package (0x02)
                {
                    0x6D, 
                    Zero
                })
            }
            If (LEqual (0x0D, Arg0))
            {
                Return (Package (0x02)
                {
                    0x0D, 
                    Zero
                })
            }
        }
        Return (XPRW (Arg0, Arg1))
    }
}

以上内容可使用 MaciASL.app 直接编译为 SSDT-GPRW.aml 文件,Clover 用户放到 /EFI/Clover/ACPI/Patched/ 目录,OpenCore 用户放到 /EFI/OC/ACPI/ ,并在 config.plist 中启用。

对于懒人...可以下载黑苹果星球整理好的包:

超级会员免费 永久超级会员免费

已有178人查看

上面的 SSDT 需要配合 ACPI 重命名补丁使用,Clover 和 OpenCore 操作见下图:

代码如下:

Find* [HEX]: 47505257 02 
Replace* [HEX]: 58505257 02 
Comment: change GPRW to XPRW(Hibernation)

 

关闭 RTC 计划唤醒

如果你在 grep 唤醒原因的过程中,看到唤醒原因和 RTC 相关时,可尝试以下内核补丁:

代码如下:

Base: __ZN8AppleRTC18setupDateTimeAlarmEPK11RTCDateTime
Comment: Disable RTC wake scheduling
Count: 1
Enabled: True
Identifier: com.apple.driver.AppleRTC
Replace: C3

 

其它参考资料

最后提供几个参考资料。

Darkwake 状态详解,以及 pmset 命令操作(英文):链接

DSDT 修改方法:链接

通过 pmset 工具管理 macOS 睡眠:链接

彻底删除巨大的休眠镜像文件:链接

官方休眠设置文档:链接

 

0. 本站所有资源解压密码均为 heipg.cn
1. 本站资源收集于网络,仅做学习和交流使用,请于下载后24小时内删除。如果你喜欢我们推荐的软件,请购买正版支持作者。
2. 如有无法下载的链接,请及时邮箱[email protected],或到QQ群进行反馈,我们将及时进行处理。
3. 本站发布的内容若侵犯到您的权益,请联系站长删除,联系方式:[email protected],我们将第一时间配合处理!
扫描QQ二维码加入【黑苹果星球交流群】

黑苹果星球 » 黑苹果启用休眠简单步骤

2 评论

  1. 大佬你好 请教个问题啊 黑苹果 使用了降低cpu电压的软件 但是只要完整睡眠 点击那菜单睡眠 都是十几秒那种 唤醒后电压设置就没了 修改了睡眠值0 点菜单也是一样长睡 合上屏幕发现外屏还正常操作 盒盖只关闭了内屏

    1. 听上去像唤醒后重新加载了原来的电源设置

发表评论