NVRAM能否正常支持,是判斷黑蘋果完美程度的一個因素。NVRAM是一個儲存芯片,用來保存藍牙參數(shù),亮度與音量,啟動磁盤等等,還有就是儲存iMessage與FaceTime的參數(shù)。比如更先進的Opencore引導,沒有設置默認啟動磁盤的地方,而就是靠設置-啟動磁盤,里面你的選擇。這和白蘋果幾乎無區(qū)別了。而你選的啟動磁盤就被保存到NVRAM里等待下次開機讀取,如果沒有驅動好NVRAM,會導致Opencore無法更改啟動磁盤。

但是,并不是所有的主板自帶的NVRAM都支持MacOS。測試自己的NVRAM能否被支持使用,即能否驅動原生NVRAM

 

200系列芯片組請自測。目前已知300芯片組除了Z370之外都無法使用原生NVRAM,因為Z370是200系列芯片組馬甲,不是真正的300系列芯片組。比如B360 B365 H310 H370 Q370 Z390均不支持原生NVRAM。

所以我們?yōu)榱撕诠耐昝溃枰MNVRAM,我們使用EmuVariableUefi。
但是注意!Clover作者明確指出:安裝Clover時勾選了EmuVariableUefi,但沒有勾選RC腳本,這樣等于什么都沒做。所以一定要勾選RC腳本。只在drivers里放EmuVariableUefi等于沒放,再強調一遍。

正確安裝后重啟兩次,會在EFI分區(qū)內看到NVRAM.plist,這樣代表模擬NVRAM已經正確工作。

終端運行代碼

獲取root權限

sudo -s

清空NVRAM,需要關閉SIP

sudo nvram -c

清空后設置一個顯示MissFeather的內容,需要輸入密碼

sudo nvram TestVar=MissFeather

重啟電腦,打開終端,輸入

sudo nvram -p | grep 'TestVar'

 

如果看到TestVar MissFeather的字樣,表示你的主板支持原生NVRAM,如果不顯示,表示你的主板需要打一個修復補丁。

如果可以正常顯示后,可以清除設置,我也不知道如何稱呼,編程一般叫變量。

sudo nvram -d TestVar

如果清除出錯,顯示下面的內容

nvram: Error clearing firmware variables: (iokit/common) not permitted

 

以四葉草引導舉例,去 /EFI/Clover/Drivers/UEFI 目錄找到:

# 文件系統(tǒng)
apfs.efi 替換為 ApfsDriverLoader.efi
# 內存補丁
OsxAptioFix2Drv.efi 替換為 AptioMemoryFix.efi
# 如果是300系主板:
OsxAptioFix2Drv.efi 替換為 OsxAptioFixDrv.efi
# 如果依舊無法重置NVRAM,刪除:
EmuVariableUEFI.efi

如果刪除 EmuVariableUEFI-64.efi 可能導致 iMessage 無法登陸或異常。替換文件前,務必做好文件備份。

 

NVRAM 如何重置

Clover 用戶可在引導選擇系統(tǒng)界面按下 F11 重置 NVRAM(如果你使用的是模擬,清空的只是模擬的 NVRAM);

OpenCore 用戶在引導菜單中選擇 Reset NVRAM 即可。

OpenCore 的重置 NVRAM 功能非常徹底,可能會把你已有的引導項一起重置消失掉;處在 Clover 轉換到 OpenCore 階段時,如果重置后再次使用 Clover 可能會提示“您的電腦因為出現(xiàn)問題而重啟”,新手謹慎使用;

 

如果想要刪除指定內容,例如要刪除每次開機出現(xiàn)的 “您的電腦因為出現(xiàn)問題而重啟” 的信息(也就是 Kernel Panic 后遺癥):

sudo nvram -d aapl,panic-info

如果清除出錯,顯示下面的內容

nvram: Error clearing firmware variables: (iokit/common) not permitted

 

首先,確認你關閉了SIP(系統(tǒng)完整性保護),再次嘗試清空命令;

如果是 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 替代;

如果你的主板使用 AptioMemoryFix.efi 可以不計算 slide 正常工作(具體表現(xiàn)是啟動時不卡++++號),這是最理想的情況

如果卡在++++號可以試試添加引導參數(shù) slide=0(可能影響休眠),或計算 slide值;

不推薦使用 OsxAptioFix2Drv-free2000.efi,因為作者自曝這個驅動可能會永久性損壞你的主板;

刪除 EmuVariableUEFI.efi;

EmuVariableUEFI.efi 是用于模擬 NVRAM 的 efi 驅動,如果刪除可能導致 iMessage 無法登陸或異常.

刪除各個 EFI 分區(qū)下的 nvram.plist 文件,如果你使用過 Clover 的 RC 腳本,還需刪除以下文件。并重啟系統(tǒng)。刪除或替換文件前,務必做好文件備份。

/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 及其傳感器 kext 全部刪除,替換為 VirtualSMC.kext 及其傳感器 kext,刪除 /EFI/Clover/Drivers/UEFI/ 目錄下的 smchelper.efi,加入 virtualsmc.efi,重啟。

重啟后,在 Clover 系統(tǒng)選擇界面按下 F11,這是 Clover 重置 NVRAM 的操作,此時系統(tǒng)可能會再次重啟。

如果以上方法均無效,臺式機請拔掉電源,并取下主板上的紐扣電池,靜置5分鐘,重新裝回電池再試。

到這里,絕大部分的主板應該已經解決問題(部分主板可能還需要添加本文后面提到的 SSDT)。

對于擁有原生 NVRAM 的主板,以上是該問題的所有常用處理辦法。

 

NVRAM 支持情況

已知原生支持NVRAM的主板

技嘉 5、6、7、8、9 系;
華擎 8 系;
微星 9 系;
華碩 8 系,100系(早期BIOS版本);
英特爾 6 系;
Z370;
絕大多數(shù) Z370 都具備原生 NVRAM,僅需要 AptioMemoryFix.efi 即可,或使用 OsxAptioFix2Drv.efi/OsxAptioFix3Drv.efi 配合 slide 值計算(新手強烈不推薦自行計算,十個新手八個找不到,還有一個算錯,直接試一下 slide=0 這個引導參數(shù))。

 

已知沒有原生NVRAM的主板

技嘉 100 系;
華碩 100 系(較新BIOS版本);
已知部分 X99、X299 配備的 NVRAM 和 macOS 不兼容;
99% 的 B360、B365、H310、H370、Z390 “不具備”原生NVRAM;

對于沒有 NVRAM 支持的主板,下面推薦2種解決辦法,第一種是使用 SSDT 補丁開啟原生支持,主要針對300系主板;如果你的主板無法使用 SSDT 方案,參考第二種辦法,使用模擬。

 

使用 SSDT 補丁開啟 NVRAM

為什么目前 300 系的主板,B360、B365、H310、H370、Z390 主板“不具備”原生NVRAM?答案其實很扯,是因為英特爾“忘記了”將 FW 芯片真正聲明為 ACPI 中的 MMIO,因此 XNU 將忽略 UEFI 內存映射聲明的 MMIO 區(qū)域。因此,NVRAM SMM 頁面錯誤地出現(xiàn)在未映射的頁面訪問上。

原文:

Intel “forgot” to actually declare the FW chip as MMIO in ACPI and so XNU will ignore the MMIO region declared by the UEFI memory map. And so NVRAM SMM page fault’ed on unmapped page access, oh what fun!

 

所幸,在 OpenCorePkg 的開發(fā)堆棧中,有愛好者貢獻了一個 SSDT 用以解決這個問題。

雖然來自 OpenCore 的開發(fā)堆棧,但這個 SSDT 并沒有綁定到 OpenCore,Clover 用戶也是可以使用的,因為能否使用其實取決于你的主板有沒有 LPCB,這個在 Z390 主板上非常常見,可以通過 IORegistryExplorer.app 搜索 PCI0 → LPCB。

 

 

提取反編譯SSDT和DSDT

Clover 用戶請將其放入 EFI/CLOVER/ACPI/patched

OpenCore 用戶請將其放入 EFI/OC/ACPI(注意在 OpenCore 的 config 文件中啟用).

 

刪除模擬 NVRAM 殘留文件

如果你使用過模擬 NVRAM,請依次刪除以下文件,注意某些項目可能需要 關閉 SIP 才能刪除(如果你使用的是 RC 腳本)

/Volumes/EFI/EFI/CLOVER/drivers/UEFI/EmuVariableUefi-64.efi
/Volumes/EFI/nvram.plist
/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?

OpenCore 用戶只需要關閉以下項目即可:

Booter -> Quirks -> DisableVariableWrite -> False
NVRAM -> LegacyEnable -> False

最后,不要忘記刪除各個 EFI 分區(qū)下的 nvram.plist 文件。都完成后,可以返回本文開頭部分測試 NVRAM 是否開啟成功。

 

使用 CloverDaemon 模擬 NVRAM

如果你的主板不能使用 SSDT 方案,可以考慮使用 Clover.app 輔助程序安裝 CloverDaemonNew,CloverDaemonNew 是一個全新設計的 Clover 守護程序(需要 Clover r5040以上版本),主要用于替代 RC 腳本實現(xiàn) NVRAM 功能(CloverDaemonNew 和 RC 腳本必須二選一,非常不推薦使用 RC 腳本)。

 

安裝成功后,重啟電腦,在 EFI 目錄看到 NVRAM.plist 文件即代表成功。

 

如果重啟后仍然沒有出現(xiàn) NVRAM.plist

如果你的主板安裝了 CloverDaemon 重啟后仍然沒有出現(xiàn) nvram.plist,注意需要額外的模擬驅動。處理辦法是使用 Clover.app 安裝相應的 efi 驅動文件,請確保 Clover 是 UEFI 模式安裝,運行在 UEFI 引導模式,安裝驅動文件中的 EmuVariableUefi.efi,安裝好后,重啟兩次就應該會生效。

 

現(xiàn)在可直接編輯 nvram.plist,也可以使用命令操作,例如:

sudo nvram -xp

可以顯示 NVRAM 的所有條目。

這時可以使用:

sudo nvram -d keyname

建議成功生成 NVRAM.plist 后使用以下命令清空一次 NVRAM(注意現(xiàn)在清空的只是模擬的 NVRAM):

sudo nvram -c
聲明:本站所有文章,如無特殊說明或標注,均為本站原創(chuàng)發(fā)布。任何個人或組織,在未征得本站同意時,禁止復制、盜用、采集、發(fā)布本站內容到任何網站、書籍等各類媒體平臺。如若本站內容侵犯了原著者的合法權益,可聯(lián)系我們進行處理。