Contribute
Register

[Guide] HackrNVMeFamily co-existence with IONVMeFamily using class-code spoof

Status
Not open for further replies.
Ah yes good catch I couldn't get my SATA M.2 to read in a PCI-E Adapter so I moved it back onto the board's M.2 Slot...forgot the update the location. New Configuration here...but it still doesn't see drives.
 

Attachments

  • Clover2.zip
    1.8 MB · Views: 94
Ah yes good catch I couldn't get my SATA M.2 to read in a PCI-E Adapter so I moved it back onto the board's M.2 Slot...forgot the update the location. New Configuration here...but it still doesn't see drives.

This code is wrong/not needed:
Code:
    Device (_SB.PCI0.RP09.PXSX)
    {
        Name (_ADR, Zero)  // _ADR: Address
    }

The PXSX identity already exists. It is an error to try to create a duplicate.
Your config.plist is missing the _DSM->XDSM patch.
 
This code is wrong/not needed:
Code:
    Device (_SB.PCI0.RP09.PXSX)
    {
        Name (_ADR, Zero)  // _ADR: Address
    }

The PXSX identity already exists. It is an error to try to create a duplicate.
Your config.plist is missing the _DSM->XDSM patch.

SUCCESS! Thank you so much for the assistance. I redid the .aml in MaciASL from scratch, because trying to edit the original patch file was too confusing for my newbie eyes. :) Without making that silly copy and paste mistake shown above it works like a charm. On to the USB SSDT next!
 
Hey @RehabMan - thanks so much for your excellent work on this. I'm about to tackle this project on a new build. I've just gotten a successful install of Sierra 10.12.3 on a standard SSD (Samsung 840 EVO) with my Samsung 960 Pro M.2 also installed. Obviously it's not visible until I follow your instructions.

In my current install of Sierra on the 840 EVO SSD, there is no S/L/E... only L/E. When I look in that folder, there is no IONVMeFamily.kext installed by default. What am I missing? Will I have any issues with using this method, since it appears I don't have the IONVMeFamily.kext that will live concurrently with HackrNVMeFamily.kext? (sorry if this is a stupid question)

Build in progress: GA-Z170X-DESIGNARE, 6700K, 16GB Crucial, NVIDIA GTX 970

THANKS!!
--B
 
Yay! Success!

Thanks RehabMan. (like the man says 'go back and read post #1')

i was following instructions for 'dual NVMe drive' not 'dual NVMe drive without leaf node' instructions

here's the code that fixed my system:

Code:
// Inject bogus class-code for NVMe SSD to prevent IONVMeFamily.kext from loading
DefinitionBlock("", "SSDT", 2, "hack", "NVMe-Pcc", 0)
{
    External(_SB.PCI0.RP09, DeviceObj)
    Device(_SB.PCI0.RP09.SSD0) { Name(_ADR, 0) } // adding SSD0 identity under _SB.PCI0.RP09
    Method(_SB.PCI0.RP09.SSD0._DSM, 4)
    {
        If (!Arg2) { Return (Buffer() { 0x03 } ) }
        Return(Package()
        {
            "class-code", Buffer() { 0xff, 0x08, 0x01, 0x00 },
            "built-in", Buffer() { 0 },
        })
    External(_SB.PCI0.RP13, DeviceObj)
    Device(_SB.PCI0.RP13.SSD0) { Name(_ADR, 0) } // adding SSD0 identity under _SB.PCI0.RP13
    Method(_SB.PCI0.RP13.SSD0._DSM, 4)
    {
        If (!Arg2) { Return (Buffer() { 0x03 } ) }
        Return(Package()
        {
            "class-code", Buffer() { 0xff, 0x08, 0x01, 0x00 },
            "built-in", Buffer() { 0 },
        })
    }
}
//EOF

1. Compile this using MacISL and save to USB/EFI/Clover/ACPI/Patched or HDD/EFI/Clover/ACPI/Patched
2. create patched HackrNVMeFamily.kext using --Stealth variable and copy to USB/EFI/Clover/kexts/other or HDD/EFI/Clover/kexts/other

I'm now seeing 2 x NVMe drives (1=Windows 10 and 2=OSX 10.12.3 Sierra) and can freely boot into either.

now just audio, wifi, power management, bluetooth, flickery menu bar, ....................!
 
Last edited by a moderator:
Hey @RehabMan - thanks so much for your excellent work on this. I'm about to tackle this project on a new build. I've just gotten a successful install of Sierra 10.12.3 on a standard SSD (Samsung 840 EVO) with my Samsung 960 Pro M.2 also installed. Obviously it's not visible until I follow your instructions.

In my current install of Sierra on the 840 EVO SSD, there is no S/L/E... only L/E. When I look in that folder, there is no IONVMeFamily.kext installed by default. What am I missing? Will I have any issues with using this method, since it appears I don't have the IONVMeFamily.kext that will live concurrently with HackrNVMeFamily.kext? (sorry if this is a stupid question)

Build in progress: GA-Z170X-DESIGNARE, 6700K, 16GB Crucial, NVIDIA GTX 970

THANKS!!
--B

/S/L/E must exist. You would not be able to boot without it.
 
/S/L/E must exist. You would not be able to boot without it.
Could it be hidden, then? Here's what the fresh install on my 960 Pro M.2 looks like:
Screen Shot 2017-02-20 at 8.54.38 AM.png

Just to confirm, once Sierra is installed on my new M.2, the HackrNVMeFamily can live in *either* S/L/E, *or* EFI/Clover/Kexts/Other (but not both)....yes?

TIA!
 
Could it be hidden, then? Here's what the fresh install on my 960 Pro M.2 looks like:
View attachment 237280

Just to confirm, once Sierra is installed on my new M.2, the HackrNVMeFamily can live in *either* S/L/E, *or* EFI/Clover/Kexts/Other (but not both)....yes?

TIA!
One or the other. However, I used KextBeast to install the patched kext in /S/L/E. KextBeast makes it soooo easy.
 
Could it be hidden, then? Here's what the fresh install on my 960 Pro M.2 looks like:
View attachment 237280

In Terminal:
Code:
open /System/Library/Extensions

Just to confirm, once Sierra is installed on my new M.2, the HackrNVMeFamily can live in *either* S/L/E, *or* EFI/Clover/Kexts/Other (but not both)....yes?

It should be present both on the system volume and in EFI/Clover/kexts/Other. You will install FakeSMC.kext to the system volume, and you likely have InjectKexts=Detect. Which means kexts from Clover/kexts will not be injected when you're booting your system volume.

So... you'll need it on your system volume (/L/E or /S/L/E) and you will need it on EFI/Clover/kexts when booting recovery or the installer (upgrade scenarios).

In other words... the same as any other "essential" kext you want to work in all scenarios...

Note: I install HackrNVMeFamily to /L/E.
 
Trying to get Sierra to see y intel 600p M2 NVMe. I *can* get it work find when patching Clover on my USB stick and use the Intel 600p M2 NVMe as the only drive in my configuration with this procedure:

https://github.com/RehabMan/patch-nvme

http://www.insanelymac.com/forum/to...g-nvme-under-macos-sierra-is-ready/?p=2246306

Installs and boot from Intel 600p M2 NVMe fine.

So I know the Intel 600p M2 NVMe can work. But I do not want to use the intel 600p M2 NVMe as the boot drive because I think it is easier to maintain my install when I use a standard sata3 ssd as the boot drive. So I have installed Sierra just fine (As per normal unibeast/Multibeast installation) on my SATA 3 ssd. And next I’d like to make the intel 600p M2 NVMe work as a data storage.

So I found this procedure:

https://www.tonymacx86.com/threads/...h-ionvmefamily-using-class-code-spoof.210316/

But I cannot get Disk Utility to see my intel 600p M2 NVMe. Can you spot what I do wrong or any tips to get it going?

Figuring out where Intel NVMe Is hanging out in the device tree:

Screen Shot 2017-02-18 at 12.46.39.png


So I deduct it to be like this :

/_SB/PCI0@0/RP09@1d0000/PXSX@0

And therefore my SSDT-NVMe-Pcc.aml looks like this, compile to version 6.1 with MaciASL.

// Inject bogus class-code for NVMe SSD to prevent IONVMeFamily.kext from loading
DefinitionBlock("", "SSDT", 2, "hack", "NVMe-Pcc", 0)
{
External(_SB.PCI0.RP9.PXSX, DeviceObj)
Method(_SB.PCI0.RP9.PXSX._DSM, 4)
{
If (!Arg2) { Return (Buffer() { 0x03 } ) }
Return(Package()
{
"class-code", Buffer() { 0xff, 0x08, 0x01, 0x00 },
"built-in", Buffer() { 0 },
})
}
}
//EOF

And put in place:

xxx-iMac:patched xxx$ pwd
/Volumes/EFI/EFI/CLOVER/ACPI/patched
xxx-iMac:patched xxx$ ls -l
total 1
-rwxrwxrwx@ 1 xxx staff 118 Feb 20 15:04 SSDT-NVMe-Pcc.aml

Although I understand this part the least I made the edits in the config.plist:

Screen Shot 2017-02-20 at 16.18.22.png


Also I have downloaded patch-mve-master from GitHub and created the spoofed package for 10_12_3

./patch_nvme.sh --spoof 10_12_3
Creating patched HackrNVMeFamily-10_12_3.kext
Vanilla MD5 matches expected MD5 entry (b54230d2816150a4d57b000d23bf1fc1)
Patched MD5 matches expected MD5 entry (2ea6658fbc1b161b4e1131ba5c2c5196)
And put it in the right place with kextbeast:
ls -l /Library/Extensions/
total 0
drwxr-xr-x 3 root wheel 102 Jun 13 2014 ACS6x.kext
drwxr-xr-x 3 root wheel 102 Jun 27 2016 ATTOCelerityFC8.kext
drwxr-xr-x 3 root wheel 102 Jun 27 2016 ATTOExpressSASHBA2.kext
drwxr-xr-x 3 root wheel 102 Jun 27 2016 ATTOExpressSASRAID2.kext
drwxr-xr-x 3 root wheel 102 Feb 18 21:56 AppleHDA1150.kext
drwxr-xr-x 3 root wheel 102 Aug 20 2013 ArcMSR.kext
drwxr-xr-x 3 root wheel 102 Sep 1 2013 CalDigitHDProDrv.kext
drwxr-xr-x 3 root wheel 102 Apr 12 2016 EnergyDriver.kext
drwxr-xr-x 3 root wheel 102 Sep 8 18:22 FakeSMC.kext
drwxr-xr-x 3 root wheel 102 Feb 18 22:38 HackrNVMeFamily-10_12_3.kext
drwxr-xr-x 3 root wheel 102 Aug 15 2014 HighPointIOP.kext
drwxr-xr-x 3 root wheel 102 Aug 15 2014 HighPointRR.kext
drwxr-xr-x 3 root wheel 102 Sep 23 23:47 IntelMausiEthernet.kext
drwxr-xr-x 3 root wheel 102 Apr 28 2014 PromiseSTEX.kext
drwxr-xr-x 3 root wheel 102 Aug 4 2016 SoftRAID.kext
drwxr-xr-x 3 root wheel 102 Sep 7 17:10 USBInjectAll.kext
drwxr-xr-x 3 root wheel 102 Nov 6 2015 realtekALC.kext

And also in /System/Library/Extensions/

Still no Intel 600p NVMe in Disk Utility. Any idea what to test or try?
 
Last edited:
Status
Not open for further replies.
Back
Top