/VirtualSMC

SMC emulator layer

Primary LanguageC++BSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

VirtualSMC

Build Status Scan Status

Advanced Apple SMC emulator in the kernel. Requires Lilu for full functioning.

Features

  • Supports macOS 10.8 and newer (10.9 and newer is recommended)
  • Implements MMIO protocol and interrupt-based responses for compatibility with modern OS
  • Properly reports key attributes and r/w protection in the keys
  • Allows tuning on per-model basis and allows to use different SMC generations
  • Extensible by the plugins for sensor and key addition support
  • Enables smcdebug=XX boot argument support on 10.9
  • Replaces hardware SMC it finds (to disable SMC entirely you need to flash a dedicated firmware)

Boot arguments

  • Add -vsmcdbg to enable debug printing (available in DEBUG binaries).
  • Add -vsmcoff to switch off all the Lilu enhancements.
  • Add -vsmcbeta to enable Lilu enhancements on unsupported OS (10.16 and below are enabled by default).
  • Add -vsmcrpt to report about missing SMC keys to the system log.
  • Add -vsmccomp to prefer existing hardware SMC implementation if found.
  • Add vsmcgen=X to force exposing X-gen SMC device (1 and 2 are supported).
  • Add vsmchbkp=X to set HBKP dumping mode (0 - off, 1 - normal, 2 - without encryption).
  • Add vsmcslvl=X to set value serialisation level (0 - off, 1 - normal, 2 - with sensitive data (default)).
  • Add smcdebug=0xff to enable AppleSMC debug information printing.
  • Add watchdog=0 to disable WatchDog timer (if you get accidental reboots).

Credits

  • Apple for macOS
  • netkas for the original idea of creating a software SMC emulator
  • CupertinoNet for reversing most of MMIO protocol and SMC headers
  • Alex Ionescu for the initial reverse of SMC firmware
  • 07151129 for co-devoloping VirtualSMC and invaluable help during the research
  • lvs1974 for developing laptop sensor support
  • usr-sse2 for developing laptop sensor support
  • joedmru for developing fans and voltage sensor support
  • theopolis for smc-fuzzer tool
  • kokke for tiny-AES-c
  • vit9696 for Lilu.kext and this software
  • Additional big thanks go to all the contributors and researchers involved in Apple SMC exploration!