Depending on the circumstances VirtualSMC can bring better compatibility with present and future macOS releases providing broader SMC feature support and allowing more flexible SMC key emulation like MMIO, events (like in SMCLightSensor), permission support, etc. On older Macs it can be used to upgrade SMC generation with more features.
macOS 10.4 or newer. Compatible Lilu is required for full functionality, basic functionality will be available even on beta macOS versions or with -liluoff
boot-arg. Bootloader support is recommended for boot.efi compatibility when FileVault 2 is enabled. Legacy
VirtualSMC.efi module can be used for incompatible bootloaders. SMCHelper-64.efi is not compatible with VirtualSMC.efi and must be removed.
Using DEBUG kexts and the usual boot-args to enable debug information in relevant kexts. Other than -vsmcdbg
and generic boot-args like keepsyms=1
, -v
, debug=0x100
, io=0xff
you may be interested in AppleSMC debug support (smc=0xff
) or AppleSmartBatteryManager debug support (batman=0xff
). On 10.13 or newer you may have to patch the kernel to be able to view the panic trace without the subsequent kext list. Good luck.
In most cases VirtualSMC is unrelated to any kernel panic you experience. The reason it is present in stacktrace is becauase VirtualSMC wraps kernel_trap to emulate SMC device.
Sensor kexts provide extra monitoring functionality like temperature, voltage, or extra functionality in dedicated SMC keys. The list of known SMC keys and sensors could be found in Docs directory. You are welcome to implement your own sensor kexts using a dedicated API, but check the basic manual first.
Make sure, that the information you are looking for is actually implemented in sensor X by checking the SMC key values (run smcread -s
). If it is not, then make sure that this information is present on Apple hardware and consider making a pull-request. If it is not, then make sure that the software you check the information with does try to read the relevant key. Be aware, that some software like iStat Menus implement special sensor profiles based on Mac platform, and may not read all the sensors available.
Authenticated restart, normally invoked by sudo fdesetup authrestart
, see man fdesetup
, is supported when bootloader support or VirtualSMC.efi are present. However, it is insecure just as any software implementation is. If you care about privacy and security, you should disable it by passing vsmchbkp=0
boot-arg.
The VirtualSMC implementation stores the encryption key in nvram and may encrypt it with a temporary key if higher RTC memory bank is available. Other than that, AptioMemoryFix will try to prevent reads of the encryption key after EXIT_BOOT_SERVICES, if installed.
SMCBasics.txt
contains generic information about SMCSMCKeys.txt
contains some upated SMC key descriptions (complements html docs)SMCKeysMacPro.html
contains SMC key descriptions for old MacProSMCSensorKeys.txt
containslibSMC.dylib
SMC sensor key descriptionsSMCDumps
contains SMC key dumps created by runningsmcread -s
, please add more!SMCDatabase
contains SMC firmware dumps created withsmcread
from Apple updatesSMCTypes
contains summarised SMC key lists across SMC generations based onSMCDatabase
iStat.txt
contains iStat Menus key profiles (FauxMac is a profile when FakeSMC service is detected)MacModels.txt
contains board-id <--> mac-model summary with SMC firmware dump statusesSensorInfo.md
contains basic sensor how-to
rtcread
allows to access RTC/CMOS memory and contains relevant AppleRTC informationsmcread
allows to access SMC keys, dump SMC firmwares andlibSMC.dylib
smc-fuzzer
is a fork of an oldsmc
tool with some features missing insmcread
libaistat
allows to dump SMC key profiles from iStat Menus when used withDYLD_INSERT_LIBRARIES
SMCLightSensor
implements an example of illumination sensor handling with a new SMC event API (requiresACPI0008
/_ALI
)SMCBatteryManager
implements a complete emulation layer of AppleSmartBattery of SMC and SMBus protocolsSMCProcessor
implements temperature monitoring for Penryn CPUs or newerSMCSuperIO
implements support fans reading