A Lilu plugin intended to fix hibernation compatibility issues
Branch: master
Clone or download

README.md

HibernationFixup

Build Status Scan Status

An open source kernel extension providing a sync between RTC variables and NVRAM. By design the mach kernel encrypts hibernate sleepimage and writes the encryption key to variable "IOHibernateRTCVariables" in the system registry (PMRootDomain). Somehow this value has to be written into RTC (or SMC) in order the boot.efi could read it. But in case if you have to limit your RTC memory to 1 bank (128 bytes), it doesn't work: there are no any variables in SMC/NVRAM/RTC (actually FakeSMC).

Fortunately, boot.efi can read key "IOHibernateRTCVariables" from NVRAM! This kext detects entering into "hibernate" power state, reads variable IOHibernateRTCVariables from the system registry and writes it to NVRAM.

Features

  • Enables 'native' hibernation on PC's with hardware NVRAM on 10.10.5 and later. 'Native' means hibernation with encryption (standard hibernate modes 3 & 25)
  • Enables dumping NVRAM to file /nvram.plist before hibernation or panic

Boot-args

  • -hbfx-dump-nvram saves NVRAM to a file nvram.plist before hibernation and after kernel panic (with panic info)
  • -hbfx-disable-patch-pci disables patching of IOPCIFamily (this patch helps to avoid hang & black screen after resume (restoreMachineState won't be called for all devices)
  • hbfx-patch-pci=XHC,IMEI,IGPU allows to specify explicit device list and restoreMachineState won't be called only for these devices)
  • -hbfxdbg turns on debugging output
  • -hbfxbeta enables loading on unsupported osx
  • -hbfxoff disables kext loading

Dependencies

  • Lilu v1.2.5

Credits