VirtualSMC.kext 是一款用于 macOS 系统的系统管理控制器(System Management Control, SMC)内核仿冒驱动,用以仿冒真 Mac 系统布局,让 macOS 以为自己运行在真正的 Mac 上,从而达到驱动黑苹果系统的目的。该驱动需要配合Lilu.kext才能正常工作,并且 FakeSMC.kext 和 VirtualSMC.kext 起相同的功能,只能二选一,由于前者已经许久没有更新,建议使用 VirtualSMC.kext 替代。
版本:1.1.2
发布日期:2020年4月7日
驱动特点:
支持macOS 10.8和更高版本(建议10.9和更高版本)
实现MMIO协议和基于中断的响应,以与现代OS兼容
正确报告密钥的属性和密钥保护
允许基于模型进行调整,并允许使用不同的SMC代
可通过插件扩展以提供传感器和按键添加支持
在10.9上启用smcdebug = XX引导参数支持
替换找到的硬件SMC(要完全禁用SMC,您需要刷新专用固件)
启动参数:
添加 -vsmcdbg以启用调试打印(在DEBUG二进制文件中可用)。
添加 -vsmcoff以关闭所有Lilu增强功能。
添加 -vsmcbeta以在不受支持的操作系统上启用Lilu增强功能(默认情况下启用10.13及以下版本)。
添加 -vsmcrpt以将有关缺少SMC密钥的报告报告到系统日志中。
添加 -vsmccomp以首选现有的硬件SMC实现(如果找到)。
添加 vsmcgen = X强制暴露X-gen SMC设备(支持1和2)。
添加 vsmchbkp = X来设置HBKP转储模式(0-关闭,1-正常,2-不加密)。
添加 vsmcslvl = X来设置值序列化级别(0-关闭,1-正常,2-带有敏感数据(默认))。
添加 smcdebug = 0xff以启用AppleSMC调试信息打印。
添加 watchdog = 0以禁用WatchDog计时器(如果意外重启)。
常见问题:
VirtualSMC 有对我有什么帮助?
在不同情况下,VirtualSMC 能改善现有跟未来版本的 macOS 的兼容性,带来更多 SMC 支持, SMC 键值模拟例如 MMIO ,事件 (SMCLightSensor),权限支持等功能。在旧款的 Mac 型号上,可以用它来升级 SMC 世代以获得更多功能。
VirtualSMC 有什么配置需求?
macOS 10.8.5 或以上. 确保使用正确的 Lilu 版本以获得完整功能, 在测试版的 macOS 下,使用 -liluoff 以启用基本支持。如果有用文件保险箱 (FileVault) 建议使用 VirutalSMC 以获得完整的 boot.efi 支持。 VirtualSMC 不兼容 SMCHelper-64.efi,请避免一起使用。
如何进行错误排查?
使用 DEBUG 版 Kext(也包括 Lilu), 和相关的 Kext 的排错启动参数。 除了添加 -vsmcdbg keepsyms=1, -v, debug=0x100, io=0xff 这些常见的排错参数外,还有 AppleSMC 排错参数 (smc=0xff), AppleSmartBatteryManager 排错参数 (batman=0xff)。 10.13 或以上可使用 内核补丁 来获得内核崩溃追踪以避免使用后续 kext。
为什么内核崩溃报告会提到 VirtualSMC.kext?
大多数情况下 VirtualSMC 跟内核崩溃无关。 VirtualSMC 出现在堆栈跟踪是因为 VirtualSMC 把 kernel_trap 包装在模拟的 SMC 设备里。
SMC 传感器有什么用?
传感器 Kext 提供额外的信息例如温度, 电压, 还可通过特有 SMC 键值提供一些额外的功能。 已知的传感器列表可在 Docs 目录下查阅。 你可以使用特有 API 来开发传感器 Kext, 但请事先阅读一些基本文档。
为什么用了监控器 Kext, 资源监控软件依然看不见相关信息?
检查传感器 Kext 是否有提供你想要查看的传感器信息, 可以通过查看 SMC 键值来确认 (运行 smcread -s). 如没有, 检测此信息是否在原生苹果产品使用上并考虑创建一个 Pull request。 如没有, 检查你所用的资源管理器软件确实有尝试读取相关键值。 请注意, 某些资源监控软件例如 iStat Menus 会根据不同的 Mac 平台使用其特有描述文件, 故某些你所使用的硬件也许会被忽略。
是否支持 authenticated restart( FileVault 免密码重启)?
Authenticated restart, 一般情况下由 sudo fdesetup authrestart 触发,如有用 VirtualSMC.efi 即可支持。 可是, 正如任何软件功能整合一样,它并不是很安全。 如果你很在意安全与隐私, 你应该加上 vsmchbkp=0 启动参数禁止此功能。
此功能的整合由 VirtualSMC 把加密密钥储存在 NVRAM, 如有更高的 RTC 记忆库可用,还会由临时密钥进行再次加密。 除此之外, 如果 AptioMemoryFix 存在的话,在 EXIT_BOOT_SERVICES 后 AptioMemoryFix 会禁止此密钥被再读取。
这些命令行工具都有什么作用?
rtcread 可访问 RTC/CMOS 内存并包含相关 AppleRTC 信息
smcread 可访问 SMC 键值, 导出 SMC 固件所包含的键值和 libSMC.d