vlambda博客
学习文章列表

NVRAM是什么?对黑苹果重要吗?


文 / 菜鸟搞机 · 吃瓜市民王先生

Hello 大家好,

这是一篇关于NVRAM的基础教程。


先来简单聊聊NVRAM。🤔


NVRAM是一种随机存取存储器,在电源关闭时会保留其信息(具备非易失性)。这与动态随机存取存储器和静态随机存取存储器形成对比,后者仅在通电时才保持数据。NVRAM通常以一块芯片的形式存在,所以系统是否支持NVRAM,取决于主板


NVRAM是什么?对黑苹果重要吗?


NVRAM在黑苹果中有着 及其重要 的作用,第一,它是用于重启后保存与蓝牙、屏幕亮度、系统音量、iMessage、FaceTime等相关参数;第二,Clover和OpenCore需要NVRAM支持才能支持系统启动磁盘设置(例如Bootcamp功能);第三,用于支持NVIDIA Web Driver Manager等相关功能。

配置功能完善的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


02. 重制NVRAM

  • Clover用户可在引导选择系统界面按下F11重置NVRAM(如果你使用的是模拟,清空的只是模拟的NVRAM);

  • OpenCore用户在引导菜单中选择Reset NVRAM即可。


PS. OpenCore的重置NVRAM功能非常彻底,可能会把你已有的引导项一起重置消失掉;如果你处在Clover转换到OpenCore阶段时,重置后再次使用Clover可能会提示“您的电脑因为出现问题而重启”,劝新手谨慎使用。


如果想要删除指定内容,例如要删除每次开机出现的“您的电脑因为出现问题而重启”的信息:

sudo nvram -d aapl,panic-info


03. NVRAM清空错误解决方法

如果清空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已经工作正常,可忽略错误提示。



04. 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方案,参考第二种办法,使用模拟(该教程后续会出,敬请期待)。



05. 使用SSDT补丁开启NVRAM


该教程笔者已经做成word,大家自行尝试👇:


https://wws.lanz ous.com/isIiOkxhkrc


写在最后

以上,就是本次想和你分享的内容。

如果有帮到你,你可以点击 「在看」 转发分享 ,这会对我们有很大的帮助。

喜欢一键三连 (´▽`ʃ♡ƪ)