RehabMan的NVMe修補腳本
此腳本可用於為非Apple NVMe SSD(例如Samsung 950 Pro NVMe)創建修補的IONVMeFamily.kext。
這些腳本在Pike的博客上實現了Pike R. Alpha和Mork vom Ork創建的補丁。
請參閱以下鏈接以獲取背景
正如我在insanelymac.com上寫的那樣:
“雖然我通常是Clover KextsToPatch的粉絲,但在這種情況下我認為這不是合適的解決方案。在KextsToPatch失敗的正常情況下,有問題的kext只是不加載,不起作用,或者在這種情況下,如果KextsToPatch失敗,結果可能是部分修補的kext,這可能會導致數據丟失。我將在我的系統上安裝修補的kext而不是使用Clover補丁。問題是危險如果只有一部分補丁適用於更新的系統kext,那就太棒了。在這種情況下,kext可能會加載......並且看起來有效,但由於補丁不完整而導致卷損壞(因為更新中的更改)在這種情況下,最好使用舊的修補kext,直到可以創建一個新的修補kext。我在我的系統上這樣做的方式,我重命名了類和包標識符(帶有其他補丁),以便修補的kext可以安裝在未修補的vanilla kext旁邊(在/ L / E或/ S / L / E中,或者註入)。
這裡的腳本實現了上面提出的策略。
LiteOn / Plextor / Hynix NVMe的特殊補丁
請閱讀:http://www.insanelymac.com/forum/topic/312803-patch-for-using-nvme-under-macos-sierra-is-ready/page-42#entry2356251
此外,請閱讀Pene提出的替代補丁:https://www.insanelymac.com/forum/topic/312803-patch-for-using-nvme-under-macos-sierra-is-ready/? do = findComment&comment = 2617639
各種補丁選擇在config_patches.plist中
關於4k塊大小的驅動器的特別說明
可能是您的驅動器能夠以4k塊大小而不是512字節驅動。如果驅動器處於4k模式,則可以使用不帶補丁的IONVMeFamily.kext。
請閱讀:https://www.insanelymac.com/forum/topic/312803-patch-for-using-nvme-under-macos-sierra-is-ready/? do = findComment&comment = 2377304支持4k的部分驅動器列表本地:
- 東芝XG3(控制器:TC58NCP070GSB)
- OCZ RD400(控制器:TC58NCP070GSB)
- 英特爾SSD750(具有性能/速度問題)
- WD Black(控制器:Marvell 88SS1093)
10.13 High Sierra
使用10.13,Apple修復了它們的IONVMeFamily.kext,現在它本身支持512字節塊大小。這意味著對於許多NVMe SSD,您不需要這些補丁。但是,LiteOn / Plextor / Hynix SSD的特殊補丁可能是必要的(見上文)。
10.12 Sierra Notes
在10.12中有一些程序上的變化:
- 如果您嘗試將HackrNVMeFamily用於10.12安裝程序,請忘記它。在config.plist KextsToPatch中使用正確的補丁。
- 安裝後,您可以創建HackrNVMeFamily並使用它(或使用您已創建的),但您必須從/ System / Library / Extensions中刪除IONVMeFamily.kext
如果有更好的解決方案,我會在這裡更新。
10.12更新
通過欺騙系統,我們可以阻止IONVMeFamily.kext加載。它涉及注入一個假的“類代碼”,使IONVMeFamily的Info.plist中的IOPCIClassMatch不再匹配。
借助這種技術,HackrNVMeFamily和IONVMeFamily可以共存。適用於安裝方案和安裝後。
詳情請見:http: //www.insanelymac.com/forum/topic/312803-patch-for-using-nvme-under-macos-sierra-is-ready/page-29#entry2322636
或者在這裡:https: //www.tonymacx86.com/threads/guide-hackrnvmefamily-co-existence-with-ionvmefamily-using-class-code-spoof.210316/
注意:patch_nvme.sh的--spoof選項可用於使用修改後的IOPCIClassMatch自動生成kext。
如:
./patch_nvme.sh --spoof 10_12_2
並且--unpatched選項可用於指定IONVMeFamily.kext的備用位置。例如,如果要從其他版本或從其他位置存儲的IONVMeFamily.kext進行修補:
./patch_nvme.sh --unpatched /Volumes/10.11.6/System/Library/Extensions/IONVMeFamily.kext 10_11_6_sec2017-001
關於雙啟動和10.13的說明
如果您在10.13之前的版本(例如10.11或10.12)上使用類代碼欺騙,您會注意到欺騙的類代碼將阻止加載10.13中的IONVMeFamily.kext。您還會注意到此項目中沒有用於修補10.13 IONVMeFamily.kext的文件。這是因為10.13 IONVMeFamily現在可以本地處理512字節塊,因此不需要修補。
但是由於類代碼欺騙到位,10.13的IONVMeFamily.kext將無法加載(它正在尋找NVMe標準類代碼)。對於非雙啟動方案(例如,僅啟動10.13,沒有其他macOS / OS X版本),您只需刪除類代碼欺騙(SSDT_NVMe-Pcc.aml)。
對於引導10.11 / 10.12 + 10.13的情況,將HackrNVMeFamilyInjector.kext安裝到系統卷(僅限10.13+)。它是一個簡單的注入式kext,它將欺騙的類代碼添加到IO目錄中,從而導致IONVMeFamily.kext加載欺騙的類代碼。這樣,HackrNVMeFamily - * .kext可用於10.12 / 10.11,而IONVMeFamily.kext(本機)可用於10.13。
用法:
下載ZIP(並解壓縮)或克隆git存儲庫。
內容:
- patch_nvme.sh:主要修補腳本
- NVMe_patches_10_11_5.plist:由Mork vom Ork提供的KextsToPatch內容,發布#33 IM線程。
- NVMe_patches_10_11_6_beta4.plist:由Mork vom Ork提供的KextsToPatch內容,發布#16 IM線程。
- NVMe_patches_10_11_6.plist:最終10.11.6的KextsToPatch內容
- NVMe_patches_10_11_6_sec2016-001:帶有安全更新2016-001的10.11.6的KextsToPatch內容(僅更改了md5)
- NVMe_patches_10_11_6_sec2016-002:帶有安全更新2016-002的10.11.6的KextsToPatch內容(僅更改了md5)
- NVMe_patches_10_11_6_sec2016-003:帶有安全更新2016-003的10.11.6的KextsToPatch內容(僅更改了md5)
- NVMe_patches_10_11_6_supp2016-003:帶有安全更新(補充)2016-003的10.11.6的KextsToPatch內容(僅更改了md5)
- NVMe_patches_10_11_6_sec2017-002:10.11.6 build 15G1510的KextsToPatch內容(僅更改了md5)
- NVMe_patches_10_11_6_sec2017-003:10.11.6 build 15G1611的KextsToPatch內容(僅更改了md5)
- NVMe_patches_10_11_6_sec2017-004:10.11.6安全更新2017-004的KextsToPatch內容(僅更改了md5)
- NVMe_patches_10_11_6_sec2017-005-15G18013.plist:10.11.6安全更新2017-005(15G18013)的KextsToPatch內容(僅更改了md5)
- NVMe_patches_10_11_6_sec2018-002.plist:10.11.6安全更新2018-002(15G20015)的KextsToPatch內容
- NVMe_patches_10_11_6_sec2018-003.plist:10.11.6安全更新2018-003(15G21013)的KextsToPatch內容
- NVMe_patches_10_12_dp1.plist:由Mork vom Ork提供的KextsToPatch內容,發布#8 IM線程。
- NVMe_patches_10_12_0.plist:KextsToPatch 10.12.0的內容
- NVMe_patches_10_12_1_16B2555.plist:10.12.1 build 16B2555的KextsToPatch內容,隨後進行了快速更新。補丁與NVMe_patches_10_12_1.plist相同,但MD5總和不同。
- NVMe_patches_10_12_1.plist:10.12.1的KextsToPatch內容
- NVMe_patches_10_12_2.plist:10.12.2(16C67)的KextsToPatch內容
- NVMe_patches_10_12_3.plist:10.12.3(16D32)的KextsToPatch內容
- NVMe_patches_10_12_4.plist:10.12.4的KextsToPatch內容
- NVMe_patches_10_12_5.plist:10.12.5的KextsToPatch內容
- NMVe_Patches_10_12_6.plist:KextsToPatch 10.12.6的內容
- NMVe_Patches_10_12_6_sec2017-001.plist:10.12.6安全更新2017-001(16G1036)的KextsToPatch內容
- NMVe_Patches_10_12_6_sec2017-002.plist:10.12.6安全更新2017-002(16G1114)的KextsToPatch內容
- NVMe_Patches_10_12_6_sec2018-001.plist:10.12.6安全更新2018-001(16G1212)的KextsToPatch內容
- NVMe_Patches_10_12_6_sec2018-002.plist:10.12.6安全更新2018-002(16G1314)的KextsToPatch內容
- NVMe_Patches_10_12_6_sec2018-003.plist:10.12.6安全更新2018-003(16G1408)的KextsToPatch內容
- NVMe_Patches_10_12_6_sec2018-004.plist:10.12.6安全更新2018-004(16G1510)的KextsToPatch內容
- binpatch:使用簡單命令行修補二進製文件的預構建實用程序。
- binpatch.c:binpatch二進製文件的源代碼
- config_patches.plist:包含_DSM到XDSM ACPI補丁,以及其他特殊用途(LiteOn / Plextor / Hynix)IONVMeFamily補丁
- HackrNVMeFamilyInjector.kext:適用於具有類代碼欺騙的10.13。見上文“關於雙啟動和10.13的說明”
用法:
- 解壓縮patch_nvme.zip存檔
- cd到提取的位置
- 執行patch_nvme.sh,其參數與您要修補的plist相對應
- 該腳本在當前目錄中創建修補的kext
- 您必須使用與您正在運行的OS X版本對應的參數運行腳本
- /System/Library/Extensions/IONVMeFamily.kext必須是vanilla
例如,如果您正在運行10.11.5,並從github下載/解壓縮了patch-nvme-master,則創建一個修補的10.11.5 kext:
cd ~/Downloads/patch-nvme-master
./patch_nvme.sh 10_11_5
我傾向於按照預期使用git:
mkdir ~/Projects && cd Projects
git clone https://github.com/RehabMan/patch-nvme.git patch-nvme.git
cd patch-nvme.git
./patch_nvme.sh 10_11_5
結果是HackrNVMeFamily-10_11_5.kext。您可以將它安裝到/ S / L / E,/ L / E,或使用Clover kext注入。它不會干擾IONVMeFamily.kext,系統更新也不會改變它。
您也可以不指定補丁名稱,腳本將根據vanilla IONVMeFamily確定正確的補丁:
./patch_nvme.sh
或者使用--spoof選項:
./patch_nvme.sh --spoof
在嘗試使用修補的kext之前,還應確保config.plist中沒有IONVMeFamily.kext的補丁。
注意:當前腳本使用與IOPCIClassMatch匹配的類代碼來匹配任何符合NVMe標準的SSD。
反饋:
在此反饋:http://www.insanelymac.com/forum/topic/312803-patch-for-using-nvme-under-macos-sierra-is-ready/page-3#entry2247453
使用github上的“問題”來報告錯誤。
更改日誌:
2017年4月19日
- 如果未指定補丁名稱,則添加自動檢測正確的補丁文件
- 添加了額外的錯誤檢查(當md5總和不匹配時不會生成修補的kext,除非指定了--override)
- 添加--override(僅限高級用途)
2017年4月3日
- 添加--unpatched選項(joevt)
2017年3月29日
- 增加了對10.11.6安全更新2017-001的支持
2017年3月28日
- 增加了對10.12.4的支持
2017年1月23日
- 增加了對10.12.3的支持
2016年7月4日
- 改為使用IOPCIClassMatch而不是IONameMatch
2016年7月3日
- insanelymac.com上的orignal發布
留言
張貼留言