NVRAM是什么?对黑苹果重要吗?
Hello 大家好,
这是一篇关于NVRAM的基础教程。
先来简单聊聊NVRAM。🤔
NVRAM是一种随机存取存储器,在电源关闭时会保留其信息(具备非易失性)。这与动态随机存取存储器和静态随机存取存储器形成对比,后者仅在通电时才保持数据。NVRAM通常以一块芯片的形式存在,所以系统是否支持NVRAM,取决于主板。
01. NVRAM支持 测试
运行终端进行以下测试,方可知道自己的主板是否支持NVRAM:
sudo -s
这一步是获取root权限,接下来输入:
sudo nvram -c
这一步是清空NVRAM,需要关闭SIP。
具体如何关闭SIP请参阅👉:
如果你卡在了清空NVRAM,说明当前的NVRAM设置是有问题的。
如果正常,输入以下命令,执行后重启:
sudo nvram TestVar=RandomString
重启后,终端执行以下命令:
sudo nvram -p | grep 'TestVar'
如果终端输出了包含“TestVar RandomString”的结果,则表示NVRAM正在正常运行。
如果没有,则NVRAM需要打补丁修复,不修复会导致iMessage可能无法正常工作。
测试完成后,可以运行以下命令清除产生的垃圾代码:
sudo nvram -d TestVar
Clover用户可在引导选择系统界面按下F11重置NVRAM(如果你使用的是模拟,清空的只是模拟的NVRAM);
OpenCore用户在引导菜单中选择Reset NVRAM即可。
PS. OpenCore的重置NVRAM功能非常彻底,可能会把你已有的引导项一起重置消失掉;如果你处在Clover转换到OpenCore阶段时,重置后再次使用Clover可能会提示“您的电脑因为出现问题而重启”,劝新手谨慎使用。
如果想要删除指定内容,例如要删除每次开机出现的“您的电脑因为出现问题而重启”的信息:
sudo nvram -d aapl,panic-info
如果清空NVRAM出现以下提示:
nvram: Error clearing firmware variables: (iokit/common) not permitted
先确认你是否关闭了SIP(系统完整性保护),再次尝试清空命令。
如果是OpenCore用户,请检查👇:
Booter→Quirks→DisableVariableWrite
设置为NO(不勾选)。
使用OcQuirks.efi的Clover用户也注意该项设置为False。
Clover用户删除EFI/Clover/drivers64UEFI目录以及目录下的所有文件(删除文件前,务必做好备份)。
在EFI/Clover/Drivers/UEFI目录:
apfs.efi替换为👇
ApfsDriverLoader.efi,
如果两个都有,删除apfs.efi。
内存修复驱动:
OsxAptioFixDrv.efi/OsxAptioFix2Drv.efi/OsxAptioFix3Drv.efi
替换为AptioMemoryFix.efi,或使用OcQuirks.efi替代。
如果你的主板EFI使用的是👇:
AptioMemoryFix.efi
则可以不计算slide正常工作(具体表现是启动时不卡+号),
这是最理想的情况,如果卡在+号可以试试添加引导参数slide=0(可能影响休眠),或计算slide值。
不推荐使用👇:
OsxAptioFix2Drv-free2000.efi
因为制作该驱动的作者说这个驱动可能会损坏主板。
删除EmuVariableUEFI.efi。
EmuVariableUEFI.efi是用于模拟NVRAM的efi驱动,如果删除可能导致iMessage无法登陆或异常。
删除各EFI分区下的nvram.plist文件,如果你使用过Clover的RC脚本,还需删除以下文件。
完成后重启系统(删除或替换文件前,务必做好文件备份)。
/etc/rc.clover.lib/etc/rc.boot.d/10.save_and_rotate_boot_log.local
/etc/rc.boot.d/20.mount_ESP.local
/etc/rc.boot.d/70.disable_sleep_proxy_client.local.disabled
/etc/rc.shutdown.d/80.save_nvram_plist.local
将EFI/Clover/kexts/other目录下的👇:
FakeSMC.kext及其传感器驱动全部删除,
替换为VirtualSMC.kext及其传感器驱动,
并删除EFI/Clover/Drivers/UEFI目录下的Smchelper.efi,
加入Virtualsmc.efi后重启。
重启好后,在Clover系统选择界面按下F11,这是Clover重置NVRAM的操作(此时系统可能会再次重启)。
如果以上方法均无效,台式机请拔掉电源,并取下主板上的纽扣电池,静置5分钟,然后重新装回电池再试。
到这里,绝大部分的主板应该已经解决问题(部分主板可能还需要添加SSDT)。
对于拥有原生NVRAM的主板,以上是该问题的所有常用处理办法。
这个时候,可以回到第一步,在终端输入:
sudo nvram TestVar=RandomString
重启,终端输入:
sudo nvram -p | grep 'TestVar'
如果终端输出了包含“TestVar RandomString”的结果,输入(这一步是删除这个值):
sudo nvram -d TestVar
或者:
sudo nvram -c
再次重启,输入:
sudo nvram -p | grep 'TestVar'
如果终端提示错误,没有输出包含“TestVar RandomString”的结果,代表NVRAM已经工作正常,可忽略错误提示。
已知的原生支持NVRAM主板;
技嘉5、6、7、8、9系;
华擎8系;
微星9系;
华硕8系,100系(早期BIOS版本);
英特尔6系;
Z370;
绝大多数Z370都具备原生NVRAM,
仅需要AptioMemoryFix.efi即可。
或使用👇:
OsxAptioFix2Drv.efi/OsxAptioFix3Drv.efi配合slide值计算。
PS. 新手强烈不推荐自行计算,直接试一下slide=0这个引导参数。
已知没有原生NVRAM的主板:
技嘉100系;
华硕100系(较新BIOS版本);
已知部分X99、X299配备的NVRAM和macOS不兼容;
99%的B360、B365、H310、H370、Z390“不具备”原生NVRAM;
对于没有NVRAM支持的主板,下面推荐2种解决办法,第一种是使用SSDT补丁开启原生支持,主要针对300系主板;如果你的主板无法使用SSDT方案,参考第二种办法,使用模拟(该教程后续会出,敬请期待)。
该教程笔者已经做成word,大家自行尝试👇: