HibernationFixup 1.4.5
休眠修复
一个开源内核扩展,分享 RTC 变量和 NVRAM 之间的同步。通过设计,mach 内核对休眠 sleepimage 进行加密,并将加密密钥写入系统注册表 (PMRootDomain) 中的变量“IOHibernateRTCVariables”。必须以某种方式将此值写入 RTC(或 SMC),知识兔以便 boot.efi 可以读取它。但是,如果知识兔您必须将 RTC 内存限制为 1 个银行(128 字节),则它不起作用:SMC/NVRAM/RTC(实际上是 FakeSMC)中没有任何变量。
幸运的是,boot.efi 可以从 NVRAM 读取密钥“IOHibernateRTCVariables”!此 kext 检测进入“休眠”电源状态,知识兔从系统注册表读取变量 IOHibernateRTCVariables 并将其写入 NVRAM。
特征
- 在 10.10.5 及更高版本上使用硬件 NVRAM 在 PC 上启用“本机”休眠。“本机”表示带加密的休眠(标准休眠模式 3 和 25)
- 在休眠或恐慌之前启用转储 NVRAM 到文件 /nvram.plist
引导参数
-hbfx-dump-nvram
在休眠之前和内核恐慌之后(带有恐慌信息)将 NVRAM 保存到文件 nvram.plist-hbfx-disable-patch-pci
禁用 IOPCIFamily 的补丁(此补丁有助于避免恢复后挂起和黑屏(不会为所有设备调用 restoreMachineState)hbfx-patch-pci=XHC,IMEI,IGPU
允许指定显式设备列表(并且知识兔不会仅为这些设备调用 restoreMachineState )。知识兔还支持值none
,false
,off
。-hbfxdbg
打开调试输出-hbfxbeta
启用在不受支持的 osx 上加载-hbfxoff
禁用 kext 加载hbfx-ahbm=abhm_value
控制自动休眠功能,其中 abhm_value 是以下各个值的算术和:EnableAutoHibernation
= 1:如果知识兔设置了此标志,系统将休眠而不是常规睡眠(以下标志可用于限制此行为)WhenLidIsClosed
= 2:关闭盖子时会发生自动休眠(如果知识兔未设置位 – 无论盖子处于哪种状态)WhenExternalPowerIsDisconnected
= 4:外部电源断开时会发生自动休眠(如果知识兔位未设置 – 无论是否连接)WhenBatteryIsNotCharging
= 8:电池未充电时会自动休眠(如果知识兔未设置位 – 无论是否充电)WhenBatteryIsAtWarnLevel
= 16:当电池处于警告级别时会发生自动休眠(macOS和电池kext负责此级别)WhenBatteryAtCriticalLevel
= 32:电池处于临界水平时会发生自动休眠(macOS和电池kext负责此水平)DisableStimulusDarkWakeActivityTickle
= 128:在内核中禁用电源事件 kStimulusDarkWakeActivityTickle,因此该事件无法触发从黑暗唤醒到完全唤醒的切换
接下来的 4 位用于指定强制休眠时的最小剩余容量百分比值。可与WhenBatteryIsAtWarnLevel 或WhenBatteryAtCriticalLevel 一起使用,当IOPMPowerSource 无法检测警告或电池电量严重不足时
RemainCapacityBit1
= 256RemainCapacityBit2
= 512RemainCapacityBit3
= 1024RemainCapacityBit4
= 2048
NVRAM 选项
以下选项可以存储在 NVRAM 中(GUID = E09B9297-7928-4440-9AAB-D1F8536FBF0A),它们可以用来代替各自的引导参数
hbfx-dump-nvram
– 类型布尔hbfx-disable-patch-pci
– 类型布尔hbfx-patch-pci=XHC,IMEI,IGPU,none,false,off
– 输入字符串hbfx-ahbm
– 输入号码
v1.4.5
- When battery level is critical, try to put macOS into sleep/hibernate mode only once per minute.
v1.4.4
- Automatically puts macOS into sleep/hibernate mode when WhenBatteryIsAtWarnLevel or WhenBatteryAtCriticalLevel bit is set in hbfx-ahbm. If battery kext does not provide these levels, additional bits for remaining capacity can be specified (RemainCapacityBit1, RemainCapacityBit2, RemainCapacityBit3, RemainCapacityBit4).
v1.4.3
- Use method routeMultipleLong instead of routeMultiple in order to avoid conflict with DebugEnhancer
v1.4.2
- Use method routeMultipleLong instead of routeMultiple in order to avoid conflict with future versions of CpuTscSync
v1.4.1
- Added constants for macOS 12 support.