Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.
Status
The first post of this thread is a WikiPost and can be edited by anyone with the appropiate permissions. Your edits will be public.

kondrat

macrumors newbie
Jan 25, 2014
16
2
Hi,
do I need dosdude1's APFS patch in Catalina after patching BootRom in mac pro 3,1?
Is this upgrade available only in Mojave installer, or Catalina as well?
 

freqrider

macrumors regular
Feb 10, 2019
210
73
Hi,
do I need dosdude1's APFS patch in Catalina after patching BootRom in mac pro 3,1?
Is this upgrade available only in Mojave installer, or Catalina as well?

If you manually added apfsjumpstart.dxe to your rom in addition to nvme.dxf, then no.

If you didn’t manually add apfsjumpstart driver to your rom, then yes. Only if you are planning to use apfs filesystem though. (Highly recommend with flash storage.)
 
  • Like
Reactions: kondrat

77iicC

macrumors newbie
Jul 22, 2020
3
0
hi guys, my first day here. I wanna have full nvme support for my macbook pro Retina Mid-2012 MacBookPro10,1. I wanna my macbook to recognize the new thunderbolt 3 external ssd as well as other nvme ssd.
I am currently on yosemite 10.10.5, and I cannot upgrade my os.

PLZ HELP. I am still a noob in
hackintosh stuff, but I am a fast learner.
 

jbarley

macrumors 601
Jul 1, 2006
4,023
1,893
Vancouver Island
hi guys, my first day here. I wanna have full nvme support for my macbook pro Retina Mid-2012 MacBookPro10,1. I wanna my macbook to recognize the new thunderbolt 3 external ssd as well as other nvme ssd.
I am currently on yosemite 10.10.5, and I cannot upgrade my os.

PLZ HELP. I am still a noob in
hackintosh stuff, but I am a fast learner.
A good place to start would be to post your questions in the right forum, something like MacBookPro maybe.
This forum is for the classic Mac Pro desktops.
 
  • Like
  • Haha
Reactions: 77iicC and Cfreak

mdrenthen

macrumors newbie
Jul 25, 2020
1
0
ROMTool, which is based on flashrom, only has problems on machines with the nVidia MCP79 chipset. All other systems work just fine with ROMTool.
Hello Dosdude I'm new to this form and i find a way to clear a problem with ROMtool. I'm running HS on a Mac pro 3.1 and when i try to dump ROM I got an kext error. (DirectHW.kext could not be loaded...)My computer is in Flash mode and SIP is disabled.... read many forums and tried many things no luck.....HELP please :)
 

boldstripe

macrumors newbie
May 5, 2018
2
0
Thanks, I read through this thread and now I want to boot from an NVME on a PCIE card.

But what if I am going to go Linux-only to boot on my Mac Pro 3,1 (2008)? I already boot MX-Linux on an SSD in one of the HD bays.

Do I still have to boot MacOS to flash the firmware ROM etc for the NVME?

Or, does Linux natively support an NVME card on a PCIE adapter? Or offer other utilities? I see there are some steps that can already be done in Linux--is there more?
 

Ludacrisvp

macrumors 6502a
May 14, 2008
797
363
Thanks, I read through this thread and now I want to boot from an NVME on a PCIE card.

But what if I am going to go Linux-only to boot on my Mac Pro 3,1 (2008)? I already boot MX-Linux on an SSD in one of the HD bays.

Do I still have to boot MacOS to flash the firmware ROM etc for the NVME?

Or, does Linux natively support an NVME card on a PCIE adapter? Or offer other utilities? I see there are some steps that can already be done in Linux--is there more?
I know of no way to flash the Mac boot rom via Linux. You’d have to install macOS to get access to romtool to install the NVME driver into the bootrom. After that is done you shouldn’t need macOS anymore and you should be able to (in theory) boot Linux ... I know windows 10 has been reported to not be bootable from nvme in the 3,1 so you may also have issues with Linux.
 
  • Like
Reactions: boldstripe

joevt

Contributor
Jun 21, 2012
6,660
4,078
I know of no way to flash the Mac boot rom via Linux. You’d have to install macOS to get access to romtool to install the NVME driver into the bootrom. After that is done you shouldn’t need macOS anymore and you should be able to (in theory) boot Linux ... I know windows 10 has been reported to not be bootable from nvme in the 3,1 so you may also have issues with Linux.
Linux can boot using EFI in MacPro3,1 so it shouldn't have a problem booting from NVMe.
Windows boots using legacy BIOS on MacPro3,1 so it can't be booted from NVMe (install Windows to a drive connected to one of the internal drive bays).
 

boldstripe

macrumors newbie
May 5, 2018
2
0
Thank you. I booted into High Sierra from a drive I made a few years ago with dosdude's High Sierra Patcher. At the time, I had made this into an APFS drive and I lost the Recovery partition--so now I can't actually disable SIP in Utilities when booted in Recovery.

But maybe I disabled SIP some time before? And if I did, would that disabling persist?

Because I can do the following even without now disabling SIP:
- start up with the long power-button hold, fast flashing LED and long tone (in EFI FLASH mode?)
- open ROMTool
- 'Dump System Rom' or at least click the button in ROMTool and save a 2.1 MB file with a '.bin' extension.
- in Terminal, run DXEInject at the command line, using the arguments in the Google Doc, and outputing a new file called 'macPro-nvme.bin' without error.

Would I have been able to do all those steps if SIP had been enabled? How can I test and trust this new file?

Edit: I found out more about SIP at this web page:

In particular, the command csrutil status can be run by the user on a booted drive. Running this on my machine booted on the High Sierra disk returns the message: "System Integrity Protection status: disabled".

So, hopefully, my new firmware is good.

Edit 2: so I updated my firmware with ROMTool without bricking the Mac Pro. I also applied dosdude's APFS Patch mentioned in this thread (which worked, I can see and boot from an APFS High Sierra drive now). I don't have an NVME card yet to test.

Edit 3: for anyone else coming across this and not having a Recovery partition, you can also access Utilities>Terminal on--for example--the High Sierra installer, if you boot from a USB drive containing it. Strangely (to me), when I ran csrutil status doing that just now, it returned: "System Integrity Protection Status: enabled" but perhaps that is something that happens just when you boot from an installer drive. Please contribute here if you can confirm this.
 
Last edited:

Prophet96ix

macrumors newbie
Sep 27, 2019
18
4
Germany
Hello Dosdude I'm new to this form and i find a way to clear a problem with ROMtool. I'm running HS on a Mac pro 3.1 and when i try to dump ROM I got an kext error. (DirectHW.kext could not be loaded...)My computer is in Flash mode and SIP is disabled.... read many forums and tried many things no luck.....HELP please :)

did you fix that issue? I'm having exactly the same! :(
 

joevt

Contributor
Jun 21, 2012
6,660
4,078
Adding NVMe and apfs support to MacPro3,1 without flashing ROM or using a EFI boot loader or Shell:

You can place the EFI drivers on a EFI or FAT or HFS+ partition, then set Driver#### and DriverOrder NVRAM variables using the commands discussed here. In my example below, I chose a folder called drivers on the EFI partition of the disk in bay 2 of my MacPro3,1.

The commands below come from https://gist.github.com/joevt/477fe842d16095c2bfd839e2ab4794ff . Setup instructions are there.
  1. Add Driver#### options using the file path for each driver. Each driver needs a different number. I start from 0080 and count up (in uppercase hex).
    Code:
    setbootvar Driver0080 1 "apfs.efi" /Volumes/EFI*/*_bay2/../drivers/apfs.efi
    setbootvar Driver0081 1 "nvme.efi" /Volumes/EFI*/*_bay2/../drivers/nvme.efi
    setdriverorder Driver0080 Driver0081
  2. Verify results.
    Code:
    dumpallbootvars
  3. Reboot to test.
With the drivers included this way, macOS apfs volumes can now boot and can also appear and be selectable in the Startup Manager (hold option at boot).
I have tested with the apfs driver. I have not tested NVMe.

Edit: I simplified the instructions using the new setbootvar command syntax. The new syntax has the side effect of removing BootNext but that is rarely used anyway.
 
Last edited:

Petri Krohn

macrumors regular
Feb 15, 2019
102
111
Helsinki, Finland
You can place the efi drivers on a EFI or FAT or HFS+ partition, then set Driver#### and DriverOrder NVRAM variables.

The use of the Driver#### NVRAM variables is defined in chapter 3.1.1 Boot Manager Programming of the Unified Extensible Firmware Interface Specification. This is from page 52 of version 2.1 from October 1, 2008.

3.1.1 Boot Manager Programming

Programmatic interaction with the boot manager is accomplished through globally defined variables.
On initialization the boot manager reads the values which comprise all of the published load options
among the UEFI environment variables. By using the SetVariable() function the data that
contain these environment variables can be modified.

Each load option entry resides in a Boot#### variable or a Driver#### variable where the
#### is replaced by a unique option number in printable hexadecimal representation using the digits
0–9, and the upper case versions of the characters A–F (0000–FFFF). The #### must always be
four digits, so small numbers must use leading zeros. The load options are then logically ordered by
an array of option numbers listed in the desired order. There are two such option ordering lists. The
first is DriverOrder that orders the Driver#### load option variables into their load order.

The second is BootOrder that orders the Boot#### load options variables into their load order.
For example, to add a new boot option, a new Boot#### variable would be added. Then the
option number of the new Boot#### variable would be added to the BootOrder ordered list and
the BootOrder variable would be rewritten. To change boot option on an existing Boot####,
only the Boot#### variable would need to be rewritten. A similar operation would be done to add,
remove, or modify the driver load list.

If the boot via Boot#### returns with a status of EFI_SUCCESS the boot manager will stop
processing the BootOrder variable and present a boot manager menu to the user. If a boot via
Boot#### returns a status other than EFI_SUCCESS, the boot has failed and the next Boot####
in the BootOrder variable will be tried until all possibilities are exhausted.

Weird, that no one has thought of using the Driver#### variables before. I have not even seen this on the WinRAID forum.

This part from page 55 may also be relevant.
If any Driver#### load option is marked as LOAD_OPTION_FORCE_RECONNECT, then all of
the UEFI drivers in the system will be disconnected and reconnected after the last Driver####
load option is processed. This allows a UEFI driver loaded with a Driver#### load option to
override a UEFI driver that was loaded prior to the execution of the UEFI Boot Manager.

Also on the same page.
The LOAD_OPTION_CATEGORY provides a hint to the boot manager to describe how it should
group the Boot#### load options. Boot#### load options with LOAD_OPTION_CATEGORY_BOOT are meant to be part of the normal boot processing.

Boot#### load options with LOAD_OPTION_CATEGORY_APP are executables which are not
part of the normal boot processing. Boot options with reserved category values will be ignored by
the boot manager.

If any Boot#### load option is marked as LOAD_OPTION_HIDDEN, then the load option will
not appear in the menu (if any) provided by the boot manager for load option selection.

Update October 3, 2020: There is some undocumented Apple specific stuff in the leaked CIA Vault 7 hacking tools wiki. See EFI Basics: NVRAM Variables:

4D1ED05-38C7-4A6A-9CC6-4BCCA8B38C14EnableDriverOrderApple specific, causes loader to use the DriverOrder and Driver#### variables.
Consumed after use. Uses DriverOrder if EnableDriverOrder==0x31

There is a typo in the CIA document. The Apple-specific APPLE_VENDOR_NVRAM_GUID is 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14. It is documented on Github by Erik Berglund.
 
Last edited:

Wallace Fung

macrumors newbie
Aug 4, 2020
13
6
Hong Kong
oh I've got my question with answer in the following post

Patch APFS and then inject NVME rom.
 
Last edited:

Wallace Fung

macrumors newbie
Aug 4, 2020
13
6
Hong Kong
Adding NVMe and apfs support to MacPro3,1 without flashing ROM or using a EFI boot loader or Shell:

You can place the efi drivers on a EFI or FAT or HFS+ partition, then set Driver#### and DriverOrder NVRAM variables.

The commands below come from https://gist.github.com/joevt/477fe842d16095c2bfd839e2ab4794ff . Setup instructions are there.
  1. First, get the efi device path of the driver by using the bless command:
    Code:
    sudo bless --mount /Volumes/Catalina\ Boot --file /Volumes/Catalina\ Boot/macOSCatalinaPatcher/apfs.efi --setBoot
    dumpallbootvars
    The result:
    Code:
    BootOrder: Boot0080
    Boot0080: 1, "Mac OS X", "PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0x0,0x0)/HD(12,GPT,01A40057-B54C-4974-AF84-A70CD2E937FF,0x6FC68A00,0x19088)/\macOSCatalinaPatcher\apfs.efi"

  2. Restore the correct boot using Startup Disk in System Preferences.app.

  3. Add a Driver#### option using the efi device path for the driver.
    Code:
    setbootvar Driver0080 1 "apfs.efi" "PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0x0,0x0)/HD(12,GPT,01A40057-B54C-4974-AF84-A70CD2E937FF,0x6FC68A00,0x19088)/\macOSCatalinaPatcher\apfs.efi"
    setbootvar Driver0081 1 "nvme.efi" "PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0x0,0x0)/HD(12,GPT,01A40057-B54C-4974-AF84-A70CD2E937FF,0x6FC68A00,0x19088)/\macOSCatalinaPatcher\nvme.efi"
    setdriverorder Driver0080 Driver0081

  4. Verify results.
    Code:
    dumpallbootvars

  5. Reboot to test.
With the drivers included this way, macOS apfs volumes can now boot and can also appear and be selectable in the Startup Manager (hold option at boot).
I have tested with the apfs driver. I have not tested NVMe.
Adding NVMe and apfs support to MacPro3,1 without flashing ROM or using a EFI boot loader or Shell:

You can place the efi drivers on a EFI or FAT or HFS+ partition, then set Driver#### and DriverOrder NVRAM variables.

The commands below come from https://gist.github.com/joevt/477fe842d16095c2bfd839e2ab4794ff . Setup instructions are there.
  1. First, get the efi device path of the driver by using the bless command:
    Code:
    sudo bless --mount /Volumes/Catalina\ Boot --file /Volumes/Catalina\ Boot/macOSCatalinaPatcher/apfs.efi --setBoot
    dumpallbootvars
    The result:
    Code:
    BootOrder: Boot0080
    Boot0080: 1, "Mac OS X", "PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0x0,0x0)/HD(12,GPT,01A40057-B54C-4974-AF84-A70CD2E937FF,0x6FC68A00,0x19088)/\macOSCatalinaPatcher\apfs.efi"

  2. Restore the correct boot using Startup Disk in System Preferences.app.

  3. Add a Driver#### option using the efi device path for the driver.
    Code:
    setbootvar Driver0080 1 "apfs.efi" "PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0x0,0x0)/HD(12,GPT,01A40057-B54C-4974-AF84-A70CD2E937FF,0x6FC68A00,0x19088)/\macOSCatalinaPatcher\apfs.efi"
    setbootvar Driver0081 1 "nvme.efi" "PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0x0,0x0)/HD(12,GPT,01A40057-B54C-4974-AF84-A70CD2E937FF,0x6FC68A00,0x19088)/\macOSCatalinaPatcher\nvme.efi"
    setdriverorder Driver0080 Driver0081

  4. Verify results.
    Code:
    dumpallbootvars

  5. Reboot to test.
With the drivers included this way, macOS apfs volumes can now boot and can also appear and be selectable in the Startup Manager (hold option at boot).
I have tested with the apfs driver. I have not tested NVMe.

Could you add some photo to show where the files are located in?
I really want to try this method but I am not sure the detail. Thank you.
 

joevt

Contributor
Jun 21, 2012
6,660
4,078
Could you add some photo to show where the files are located in?
I really want to try this method but I am not sure the detail. Thank you.
I said you could put the files on a EFI, FAT, or HFS+ partition. Pick one. Put the files there. Mine is on an HFS+ partition.
If you don't want to create a new partition, then use an existing partition.
Use the EFI partition if you want the files to be more hidden. Put the files in a folder that is not automatically scanned by any boot loader you might install (rEFInd, OpenCore...).
 

Wallace Fung

macrumors newbie
Aug 4, 2020
13
6
Hong Kong
I said you could put the files on a EFI, FAT, or HFS+ partition. Pick one. Put the files there. Mine is on an HFS+ partition.
If you don't want to create a new partition, then use an existing partition.
Use the EFI partition if you want the files to be more hidden. Put the files in a folder that is not automatically scanned by any boot loader you might install (rEFInd, OpenCore...).
Cause I don't know why the file path is with backslash but now I found the reason from page
The page shown a very good example

Examples:

If your computer is named “Macintosh” then you will type Macintosh
sudo bless --folder /Volumes/Macintosh/System/Library/CoreServices/

If your computer is named “Macintosh HD” then you will type Macintosh\ HD
sudo bless --folder /Volumes/Macintosh\ HD/System/Library/CoreServices/

If your computer is named “Daniel Mac Computer” then you will type Daniel\ Mac\ Computer
sudo bless --folder /Volumes/Daniel\ Mac\ Computer/System/Library/CoreServices/

If your computer is named “Daniel Computer” (there are TWO spaces in between) then you will type Daniel\ \ Computer
sudo bless --folder /Volumes/Daniel\ \ Computer/System/Library/CoreServices/
 

Dayo

macrumors 68020
Dec 21, 2018
2,206
1,255
Cause I don't know why the file path is with backslash but now I found the reason from page
That works but easier is to wrap the path in single quotes:
sudo bless --folder '/path/to/target/which/would/not/matter/if/it/has/spaces/or/not/'

if you type sudo bless --folder , then drag the target file/folder into Terminal, the single quotes would be added for you if required.
 

Wallace Fung

macrumors newbie
Aug 4, 2020
13
6
Hong Kong
That works but easier is to wrap the path in single quotes:
sudo bless --folder '/path/to/target/which/would/not/matter/if/it/has/spaces/or/not/'

if you type sudo bless --folder , then drag the target file/folder into Terminal, the single quotes would be added for you if required.

Oh, yeah. Finally I can boot NVME in my Mac Pro 3,1 successfully.
I think the use of command "sudo bless" is to get the hardware id only. So you can use either --folder or --mount in step 1.
The most important part is "setbootvar DriverXXXX". Make sure you got the nvme.efi and apfs.efi and placed two files in my SATA SSD which is format with HFS+ (Mac OS Extended journaled). Actually this SATA drive is installed El Capitan.
Now I installed Catalina in NVME drive. Thanks all.
 

joevt

Contributor
Jun 21, 2012
6,660
4,078
Oh, yeah. Finally I can boot NVME in my Mac Pro 3,1 successfully.
I think the use of command "sudo bless" is to get the hardware id only. So you can use either --folder or --mount in step 1.
The most important part is "setbootvar DriverXXXX". Make sure you got the nvme.efi and apfs.efi and placed two files in my SATA SSD which is format with HFS+ (Mac OS Extended journaled). Actually this SATA drive is installed El Capitan.
Now I installed Catalina in NVME drive. Thanks all.

I used --mount for a reason. See here:

This is with --folder:
Code:
sudo bless --folder /Volumes/Catalina\ Boot --file /Volumes/Catalina\ Boot/macOSCatalinaPatcher/apfs.efi --setBoot
bless --info /Volumes/Catalina\ Boot
dumpallbootvars

finderinfo[0]:      2 => Blessed System Folder is /Volumes/Catalina Boot/
finderinfo[1]:    584 => Blessed System File is /Volumes/Catalina Boot/macOSCatalinaPatcher/apfs.efi
finderinfo[2]:      0 => Open-folder linked list empty
finderinfo[3]:      0 => No alternate OS blessed file/folder
finderinfo[4]:      0 => Unused field unset
finderinfo[5]:      2 => OS X blessed folder is /Volumes/Catalina Boot/
64-bit VSDB volume id:  0x0922FE1CFA46F197
BootOrder: Boot0080
Boot0080: 1, "Mac OS X", "PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0x0,0x0)/HD(12,GPT,01A40057-B54C-4974-AF84-A70CD2E937FF,0x6FC68A00,0x19088)"
The disk is an HFS+ partition so it includes a finderinfo record.
You see the blessed folder is in finderinfo[0] and the blessed file is in finderinfo[1]. With HFS+, the Boot0080 EFI device path points to the partition, and the booter knows to get the blessed file from the finderinfo record so the file path is not included in the Boot0080 EFI Device Path. We need the file path for the Driver#### variables.

This is with --mount:
Code:
sudo bless --mount /Volumes/Catalina\ Boot --file /Volumes/Catalina\ Boot/macOSCatalinaPatcher/apfs.efi --setBoot
dumpallbootvars

BootOrder: Boot0080
Boot0080: 1, "Mac OS X", "PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0x0,0x0)/HD(12,GPT,01A40057-B54C-4974-AF84-A70CD2E937FF,0x6FC68A00,0x19088)/\macOSCatalinaPatcher\apfs.efi"
The --mount option does not modify the finderinfo record of the HFS+ partition. The Boot0080 EFI Device Path points to the same partition but now also includes a file path (using \ directory separator since it's all one EFI device path node. EFI device path nodes are separated by a / character.

The finderinfo record of a HFS partition comes from the classic Mac OS 9 days (or System 6, or System 5, or System 2.1?). The bless folder was the System folder and the blessed file was the Finder. I think to bless a folder, you just had to move a Finder file and System file into the same folder. A program called "System Picker" could be used to switch between multiple System folders.
 

Ludacrisvp

macrumors 6502a
May 14, 2008
797
363
Curious notice: when I had 64GB installed and one stick in Riser A in Slot 4 was damaged (red light on riser), total RAM was recognised as 56GB in High Sierra and Debian. And About this Mac in memory tab showed that there were 2x 4GB (!) sticks in Riser A Slots 3, 4. Also there was no speed penalty.
reading this and thinking about the 64Gb limit that some are having ... i wonder if you could get all 64Gb working properly using OpenCore to customize the memory profile.

I recall some post from someone tricking a 5,1 to let them have more RAM on the single proc model by using _clover_ to fake out a different memory configuration.


My thought here being if you were to add a custom memory profile in OpenCore to claim you were running 16 slots with 4Gb each instead of 8 with 8Gb perhaps it would get around the odd limit that is seen as other linux can do 64Gb fine. you may need to compare dmidecode -t memory in the working 64Gb linux config to assist in splitting things up.

If I had 64Gb I'd test this myself, (I only have 32Gb) but if someone else here has 64Gb and is using OpenCore 0.6.3 or later which adds custom memory configuration you could use my example from the thread at the bottom of this post as a starting point.

Just trying to think outside the box here on the limit.

I'm also mentioning this as this has allowed my Xserve3,1 that is running the MP5,1 firmware to be able to use all 6 DIMMs it has on the single socket board instead of being limited to functioning with only 4 slots.

 

joevt

Contributor
Jun 21, 2012
6,660
4,078
reading this and thinking about the 64Gb limit that some are having ... i wonder if you could get all 64Gb working properly using OpenCore to customize the memory profile.

I recall some post from someone tricking a 5,1 to let them have more RAM on the single proc model by using _clover_ to fake out a different memory configuration.


My thought here being if you were to add a custom memory profile in OpenCore to claim you were running 16 slots with 4Gb each instead of 8 with 8Gb perhaps it would get around the odd limit that is seen as other linux can do 64Gb fine. you may need to compare dmidecode -t memory in the working 64Gb linux config to assist in splitting things up.

If I had 64Gb I'd test this myself, (I only have 32Gb) but if someone else here has 64Gb and is using OpenCore 0.6.3 or later which adds custom memory configuration you could use my example from the thread at the bottom of this post as a starting point.

Just trying to think outside the box here on the limit.

I'm also mentioning this as this has allowed my Xserve3,1 that is running the MP5,1 firmware to be able to use all 6 DIMMs it has on the single socket board instead of being limited to functioning with only 4 slots.

Seems like a lot of work to get a couple more GB of RAM. I'm ok with 62 GB.

Maybe Linux is automatically doing the maxmem = 62 GB workaround? How do you tell what the maxmem is in Ubuntu?
 

Petri Krohn

macrumors regular
Feb 15, 2019
102
111
Helsinki, Finland
Booting NVMe on unflashed Mac Pro 3,1

This has been done before by @abdyfranco 's Next Loader and even more elegantly by @joevt by using the driver#### NVRAM variables. I just want to document my experiences.

I have been trying to figure out the different patch and configuration requirements for running unsupported macOS versions on a fully upgraded Mac Pro 3,1. I started methodically with High Sierra, only applying each patch when it became absolutely necessary. One aim is to replace El Capitan as the natively supported macOS version to fall back into.

Mac Pro 3 High Sierra NVMe.jpg


I managed to boot and run High Sierra from a NVMe drive without using any patches or kexts, without flashing the graphics card or the Mac Pro, and without any Hackintosh-derived tools like OpenCore. Neither is there a need to disable SIP, even temporarily. The only thing that is needed is the NVRAM boot-arg "-no_compat_check", or the equivalent change in the boot plist.

I first tied to install the mouSSE SSE4.2 emulator so I could use my flashed Radeon HD 7770 card, but I failed to get the kext to load. I was however able to boot into the NVMe drive in safe mode by disabling compatibility check in com.apple.Boot.plist. (Safe mode disables all boot-args, including -no_compat_check.)

I then switched over to my unflashed Nvidia GTX 770 reference card. High Sierra runs and sleeps perfectly, with no kexts or patches installed. The problem is in getting the unmodified Mac Pro 3,1 to boot a APFS volume from a NVMe drive.

I had rEFInd installed on my Mac. I added apfs.efi and NvmExpressDxe.efi driver files into the rEFInd drivers_x64 folder. The Apple native boot picker does not show APFS or NVMe drives, but once in rEFInd they become visible. The standard rEFInd distribution however requires a boot screen.

To use my unflashed GTX 770 I upgraded to RefindPlus, which should provide a boot screen with EFI GOP cards. My GTX 770 however did not show any video before macOS booted.

To boot blind into High Sierra in the NVMe drive I tried to make sure that the Mac would consistently boot into rEFInd and rEFInd would by default boot into High Sierra. After I swapped the graphics card the Mac would first boot into my El Capitan SSD. After rebooting I was surprisingly in High Sierra.

Of all the above steps only adding drivers to rEFInd worked right away. All others required tens of tries, if they worked at all.

Some issues:

GPU problems

All AMD cards require the SSE 4.2 instruction set in High Sierra and above. Older ATI cards and Nvidia cards work fine, provided drivers exist. Installing the mouSSE kext requires disabling SIP with breaks security. Nvidia Kepler cards work in Mojave and above, but they do not seem to provide boot screens with bootloaders like RefindPlus or OpenCore. Luckily there is a Mac EFI file for the GTX 770 which worked perfectly on my "Founders Edition" card.

P.S. - The problem with RefindPlus may have been caused by wrong firmware on the GTX 770. See below.

Cannot install High Sierra on APFS drive (solved)

At first I tried to install High Sierra before installing the AFPS and NVMe drivers for rEFInd. I thought this would not be an issue, as the High Sierra installer can see both NVMe and APFS drives. The installer refused to install in a APFS-formatted drive. This is reasonable, as the end result would be an unbootable system, but I wondered how Apple implemented this. Normally the kernel should know nothing of the pre-boot environment. All of it disappears once boot.efi calls ExitBootServices(). There must be some undocumented mechanism for passing information from EFI to macOS.

Once I had installed the EFI drivers and booted the HS installer from rEFInd it would install on the APFS formatted NVMe drive without problems.

Unable to install mouSSE on High Sierra

At first I tried installing mouSSE from the Catalina patcher USB drive. It copied the kext to /Library/Extensions/ but the kext was not loaded. This was half expected as cache rebuild is incompatible between Catalina and older macOS versions. I then tried to manually flush the cache with sudo kextcache -i / but received complaints about file permissions. I then followed these instructions for installing 3rd party kexts in /Library/Extensions. The kext was accepted, but MouSSEstats claimes the driver was not loaded.

Cannot get Mac to consistently boot to rEFInd

Booting into live Linux disabled the rEFInd boot entry and put the Mac into a weird boot order loop instead of booting back to rEFInd and my NVMe High Sierra installation:
  • Restarting from Linux boots it into El Capitan.
  • Restarting from El Capitan puts it into rEFInd
  • rEFInd waits 20 seconds and boot into High Sierra on a NVMe drive.
  • Restarting from High Sierra puts it into Linux.
On every restart the Mac flashes the folder icon with a question mark. The boot order has now become random, with a preference on Linux. The problem persists, even after I reinstalled rEFInd.

I checked the boot order with efibootmgr in Linux. This is the output. rEFInd is installed on the same hard drive as Linux. El Capitan is on a SSD in the optical bay. I cannot see anything missing. rEFInd is the first item, as it should be.

Code:
petri@petri-MacPro:~$ efibootmgr -v
BootCurrent: 0000
Timeout: 5 seconds
BootOrder: 0001,0000,0080
Boot0000* ubuntu    HD(1,GPT,44c4643d-d1e7-453e-9d50-866c7787ec9a,0x800,0x100000)/File(\EFI\ubuntu\shimx64.efi)
Boot0001* rEFInd Boot Manager    HD(1,GPT,44c4643d-d1e7-453e-9d50-866c7787ec9a,0x800,0x100000)/File(\EFI\refind\refind_x64.efi)
Boot0080* Mac OS X    PciRoot(0x0)/Pci(0x1f,0x2)/Sata(4,0,0)/HD(2,GPT,3b9502a7-9747-4d32-9c34-aed695e0a632,0x64028,0xddfac40)
Boot0081* Mac OS X    PciRoot(0x0)/Pci(0x1f,0x2)/Sata(3,0,0)/HD(2,GPT,a10fadc5-4c84-49d6-8642-a6677afad36d,0x64028,0x25294b40)
BootFFFF*     PciRoot(0x0)/Pci(0x1f,0x2)/Sata(2,0,0)/HD(1,GPT,44c4643d-d1e7-453e-9d50-866c7787ec9a,0x800,0x100000)/File(\EFI\BOOT\BOOTX64.efi)

A fundamental problem with rEFInd on a Mac is that the Apple Boot Picker application will only show one boot target for each physical drive, or at most partition. The Linux drive now has two boot targets on the EFI partition of the Linux drive. How do you chose which one to boot?

Apple locked my Apple ID after installing HS too many times

This is what happens if you try to boot an unpatched High Sierra installation in Safe Mode. Drivers are not loaded and boot args are ignored. To get past this you need the plist patch.

High Sierra safe mode.jpg


I wanted to get into safe mode to install kext manually and to rebuild the kext cache. To get into Safe Mode I pressed F2 in rEFInd and selected Safe Mode. I was able to do the second part of the installation in safe mode, but once once I entered my Apple ID password Apple locked my account. I do not know if it was because of the safe mode or because it was the 10th time I had installed High Sierra the same day.

NVMe drive in Mac breaks my El Capitan installation

Having the the NVMe drive is the Mac Pro and shutting down El Capitan leads to a kernel panic. The shutdown fails at the last moment and the Mac reboots. I have sent the report to Apple at least ten times. I do not know if they care what happens in El Capitan. There is nothing unusual about having a NVMe drive in a Mac Pro 3,1 even if Apple does not support any macOS version that supports it. Linux and Windows 10 have no problems.

Update: Could I use the IONVMeFamily.kext from High Sierra in El Capitan? Can I just place it in /Library/Extensions or do I need to replace the original driver? Can I do it without disabling SIP? After all the High Sierra kext should be signed by Apple.

Use APFSdriverLoader.efi?
(Update December 31, 2020)

I have been holding off upgrading my Mac Pro as it was only a single-CPU model and lacked the second heatsink needed for the second Xeon E5462 I had ordered from AliExpress. I finally received a full set of heatsinks from Britain before Christmas. I then went ahead with the modifications.

I did not read any of the guides (including the excellent one at the start of the thread) and just collected the DXE drivers wherever I or Google would find them. I had noticed that Apple's upgrade process for converting a HFS+ drive to APFS adds an apfs.efi driver to /usr/standalone/i386 and says so on the screen. I then took the apfs.efi file from my High Sierra installation and placed it in the rEFInd drivers folder. But why would Apple include a APFS efi driver on the drive if it could not be read from EFI? Is it because the APFS specification might change in the future?

When watching some Hackintosh video I noticed an EFI driver named APFSdriverLoader.efi. Evidently one should only have the loader DXE in the EFI and let it load the macOS specific APFS driver from the disk. This post on Reddit explains the difference.

https://www.reddit.com/r/hackintosh/comments/a07957
 
Last edited:
  • Like
Reactions: permanentmacdabbler

Dayo

macrumors 68020
Dec 21, 2018
2,206
1,255
Terve @Petri Krohn,

Can you kindly PM me a debug log of a boot with your Kepler into RefindPlus?
Can you confirm that you have a current GOP version for the card installed?
 
  • Like
Reactions: Petri Krohn

Petri Krohn

macrumors regular
Feb 15, 2019
102
111
Helsinki, Finland
Terve @Petri Krohn,

Can you kindly PM me a debug log of a boot with your Kepler into RefindPlus?

I switched back to rEFInd when trying to clear the boot coup issue. When booting blindly I only once managed to get RefindPlus to boot. The card now has UGA firmware.

Can you confirm that you have a current GOP version for the card installed?

The problem may have been the wrong firmware on the GTX 770. (I am sorry for not mentioning this. The card also did not show video when booted from a live Linux CD.) When I flashed it NVflash complained of a subsystem ID mismatch. Device ID 10de:1058 belongs to a Fermi GeForce 610M (GF119M).

Actually both firmwares have the same device ID. The EVGA firmware for the reference card has a different subsystem ID than the one coming directly from Nvidia.

Code:
petri@petri-MacPro:~/Downloads/NVFlash$ sudo ./nvflash_linux -6 NVIDIA\ GTX\ 770\ 2048\ MB\ BIOS\ -\ 206871.rom

NVIDIA Firmware Update Utility (Version 5.414.0)
Simplified Version For OEM Only
Checking for matches between display adapter(s) and image(s)...

Adapter: GeForce GTX 770      (10DE,1184,10DE,1058) H:--:NRM  S:00,B:02,D:00,F:00

WARNING: Firmware image PCI Subsystem ID (10DE.1033)
  does not match adapter PCI Subsystem ID (10DE.1058).

Please press 'y' to confirm override of PCI Subsystem ID's:  y
Overriding PCI subsystem ID mismatch
Current      - Version:80.04.B4.00.1A ID:10DE:1184:10DE:1058
               GK104 Board - 20050000 (Normal Board)
Replace with - Version:80.04.E6.00.01 ID:10DE:1184:10DE:1033
               NVIDIA GeForce GTX 770 (Normal Board)

Update display adapter firmware?
Press 'y' to confirm (any other key to abort):  y
Identifying EEPROM...
EEPROM ID (37,3012) : AMIC A25L020 2.7-3.6V 2048Kx1S, page
Storing updated firmware image...
......................................................
Verifying update...
Update successful.

Firmware image has been updated from version 80.04.B4.00.1A to 80.04.E6.00.01.

P.S. - Flashing with NVflash on Linux was far easier than with ATIflash. NVFlash works in EFI mode. When flashing AMD cards, I had to boot from a CD to force Linux into legacy BIOS mode. ATIflash cannot see the video cards in EFI mode.
 
Last edited:

Dayo

macrumors 68020
Dec 21, 2018
2,206
1,255
I switched back to rEFInd when trying to clear the boot coup issue. When booting blindly I only once managed to get RefindPlus to boot.
Strange as there shouldn't anything that works in rEFInd but does not in RefindPlus as it is just rEFInd plus some stuff (basically bootscreen on MacPros).

The problem may have been the wrong firmware on the GTX 770.
Possibly ... Every Keplar tested so far has worked. Code that does the fix was derived from drivers by @joevt.
He might better understand why it might have failed in your case (assuming GOP was present. Debug log would have confirmed this).

On your main subject, are you going to move your tests on to Mojave?

BTW, the next RefindPlus release will include a "disable_mac_compat_check" token which will change the boot args to allow booting unsupported Mac versions directly. Already tested by @startergo in booting Big Sur (he is on a cMP 5,1 but no reason why it wouldn't work on a cMP3,1 as long as APFS is available).
 
  • Like
Reactions: Petri Krohn
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.