People with a NVMe SSD may want to try this boot argument:
Think debug output and skipping the ‘Apple SSD’ check, but this is it for today. Sorry. Had a long day here so I am going to my bed.
Here is what I did:
1.) Fix Info.plist so that IONVMeFamily.kext will load.
<key>GenericNVMeSSD</key> <dict> <key>CFBundleIdentifier</key> <string>com.apple.iokit.IONVMeFamily</string> <key>Chipset Name</key> <string>SSD Controller</string> <key>IOClass</key> <string>IONVMeController</string> <key>IONameMatch</key> <array> <string>pci144d,a802</string> </array> <key>IOPCIPauseCompatible</key> <true/> <key>IOPCITunnelCompatible</key> <true/> <key>IOProviderClass</key> <string>IOPCIDevice</string> <key>IOUnitName</key> <string>disk</string> <key>Physical Interconnect</key> <string>PCI-Express</string> <key>Physical Interconnect Location</key> <string>Internal</string> <key>Vendor Name</key> <string>Apple</string> </dict>
You can use whatever value and method you like. The good news is that now the IONVMeFamily.kext will load, but errors out over a LBA_DATA_SIZE error so we are going to fix this also.
2.) Patch the LBA_DATA_SIZE aka the block size shift value in the binary – change 0xc to 0x9) so that it initialises the IONVMeBlockStorageDevice.
Thing is. Apple uses ‘Preferred Block Size’ of 4096 KB (1 << 0xc) but the Samsung firmware only gives it 512KB (1 << 0x9) so we also need to solve this issue. And we can.
3.) Patch the ‘Preferred Block Size’ and ‘Size’ Properties with help of this patch:
This will fix the ‘Size’ and ‘Preferred Block Size’ errors, so that
diskutil list reports the right size, but the minute you do this, then the kext will error out (see verbose log output). The next hurdle is to patch other values like changing 0x1000 to 0x200 and 0xfff to 0x1ff.
4.) Now someone else can have a go at it… or in your dreams. No worries. I did it already so go read IONVMeFamily.kext is a GO.