Asus Zephyrus M15 (2020) Hackintosh

Guide on how to turn the ASUS Zephyrus M15 into a Hackintosh

Contents

Intro

So you’ve bought yourself an Asus Zephyrus M15 laptop. You’ve just opened your brand new laptop and booted up straight to Windows ready to play some games. For $1500, you get yourself a Six Core 10th generation i7-10750H processor and RTX 2070 graphics. Something seems missing, however.

Despite all the positives of this laptop, if you’re like me and coming from a Macbook Pro, it means you have to give up all of your productivity tools on macOS. You also lose the ability to use XCode for Apple Development. Fear not! Modern Hackintosh solutions allow a user to install macOS on pretty much any hardware.

OpenCore, a modern bootloader, is what handles all of the software injection into macOS. See, our hardware itself does not play nicely with macOS so there are a series of patches, kexts (think drivers on Windows), and other system files that need to be loaded into macOS before booting can occur. OpenCore handles most of the work for us, and is actually really easy to get working.

Things you will need

  1. A spare USB drive that is at least 8GB
    • This is used to contain our OpenCore files as well as the macOS installer
  2. A separate boot drive to install macOS on to
    • I used a 1TB Sabrent Rocket Q M.2 SSD that I installed in the laptop. It can be purchased here
  3. A USB WIFI Adapter
    • This is not necessary as you can use the built in WIFI card. It is just less stable at the time of this writing. More on this in the WIFI section.
  4. A seperate computer
    • You can use the Windows install on this laptop to do the setup.
    • If your seperate computer is running Windows and NOT macOS you will need an ethernet connection as the tools on Windows do not fully download the macOS installer.
  5. A USB Mouse
    • This is needed to complete the macOS install and to configure our Trackpad.

Setting Up OpenCore

To begin, I would highly recommend checking out Dortania’s OpenCore Install Guide, which contains a comprehensive guide on how to get OpenCore and macOS running on almost any hardware. I followed this guide when creating my config files, and when deciding what kexts to install. If anything from this guide is confusing to you, please check out Dortania’s guide first as the explanation may be there.

With that out of the way, lets begin with creating our USB.


Gathering The Files

To begin, lets download the OpenCore files from the repository. Download this zip file and unzip it onto your computer.

OpenCore

ProperTree

Next, we need a plist editor. Most of the work in setting up OpenCore comes with editing our config.plist file. Dortania’s guide and myself recommend ProperTree, as it has basic OpenCore features baked into it. You’re going to get out your terminal of choice for this one.

ProperTree for macOS:

git clone https://github.com/corpnewt/ProperTree
cd ProperTree
chmod +x ProperTree.command
./ProperTree.command

ProperTree for Windows:

git clone https://github.com/corpnewt/ProperTree
cd ProperTree
./ProperTree/ProperTree.bat

If you want to launch ProperTree without using the command line, navigate to the folder that the repository was cloned to and double click the ProperTree.command file (ProperTree.bat on Windows).

GibMacOS

Next we’re going to want GibMacOS. GibMacOS is a tool that can be used to download macOS on non-macOS computers. If you are on macOS you do not need GibMacOS, but it can be helpful if you want a specific version. Open up command line again and get to work.

git clone https://github.com/corpnewt/gibMacOS
cd gibMacOS
./gibMacOS.command

./gibMacOS.bat on Windows computers. Now that you have all of the required files, lets start making the USB.

MountEFI

This is needed to mount the EFI partition on both the USB drive and the macOS system. This is generally only needed for macOS as gibMacOS will mount EFI on Windows.

git clone https://github.com/corpnewt/MountEFI
cd MountEFI
chmod +x MountEFI.command

You can run MountEFI by either double-clicking on MountEFI.command or by ./MountEFI.command.


Creating the USB Installer

Again, I really recommend using Dortania’s guide for this as it will go into much more detail than I will here. Most of the process that I have outlined here has come from the guide. Alas, if you want a guide specific to this laptop, continue on.

Now we’re going to create the macOS installer.

Now we’re going to format the USB drive. This process is slightly different on macOS and on Windows. For this, I will show the mac version, but you can see how to do it on Windows here. You can skip the rest of the steps in the Creating the USB Installer section if you are on Windows.

Disk Utility Finally, we are going to put the macOS install app on the USB drive. This is not as simple as dragging and dropping, but thankfully Apple has create a nice tool to do this for us.

sudo /Applications/Install\ macOS\ Catalina.app/Contents/Resources/createinstallmedia --volume /Volumes/USB

Note, if your macOS install app is not in the Applications folder you will need to modify the path to the Application. Also, if your USB drive is not named USB, you need to change the name in the command.

Finally, we are going to mount the EFI partition to get set up with OpenCore.

This will mount the EFI partition of your USB drive to your computer. Make sure your EFI partition is empty. If it is not empty, you likely mounted the wrong EFI partition.


Adding OpenCore files to your USB

Now that you have the EFI partition mounted, you need to add the OpenCore files to the USB. Note: If you are on Windows and followed Dortania’s guide, you can skip this entirely.


Adding the Proper Kexts

With the OpenCore files properly added to your EFI partition, it is time to grab the kexts (think drivers on Windows) that MacOS needs to function. Add these to the EFI/OC/Kexts/ folder.

Graphics

Audio

Ethernet

WIFI

Extra

Input Kexts

Kext’s Folder This is what my kexts folder looks like at the VERY end of the guide. For now, you can ignore some of the additional kexts as we will configure those later.


Creating the proper SSDT files

So, you’ve just added all of the kexts to your kexts folder and you think this is pretty easy so far. Now, let me give you some background into what SSDT’s really are. Every computer has a BIOS. The bios communicates a certain file to each operating system called a DSDT file. This allows the operating system to communicate with the actual hardware that our computer has. Unfortunately for us, ASUS makes the DSDT file to work with Windows and NOT macOS. SSDT files are basically patches that allow macOS to communicate with our hardware.

Dortania’s guide goes over in detail how to make SSDT patches for every device. It is honestly pretty easy to follow, but it is too complex for me to go over in this guide. If you would like to make your own SSDT files, I will link you to where you can learn to make them.

This Laptop’s CPU is Comet Lake, so follow the Comet Lake section of the guide. SSDT Guide

If you do not want to make your own SSDT’s I will include my SSDT’s here.


Creating your config.plist file

The config.plist file is what tells OpenCore what to do with our system and what to patch. There is a VERY good explanation available on Dortania’s Guide so I will not be helping you create your config.plist in this guide. Regardless, there are some steps to take to get started with making your config.plist. I will also go over some specific changes from the guide that is needed for this laptop.

You’re now ready to follow the Cofee Lake Plus section of the Dortania Guide.

Some notes that are different from the guide

If things go wrong after following this guide, and your system won’t boot, try looking at the Troubleshooting section of the Dortania Guide. I will NOT post by config.plist as I feel that it is very important for people to try and make their own config.plist to learn more about the system. It is not as hard as you may think at first.


Necessary BIOS Settings

There are some settings in the BIOS that need to be changed to allow our hardware to work with macOS. Some of them were changed in the Kernel section of our config.plist as these options are not available in the bios.

With these settings changed, you should be ready to go to boot the macOS installer!


Installing macOS

With all of this finished, you’re ready to install macOS.


You need to format your drive in order to install macOS. Your drive needs to be both GUID partition scheme and formatted as APFS in order for macOS to be able to be installed.

Note: You will need a USB mouse for this install and to configure the Trackpad.

Note: Your system will reboot a few times. Make sure you get back into the OpenCore menu each time, and select macOS installer the first time and then select whatever you named your disk as the second time.

First Boot By now, you should be booted into macOS and going through the initial setup process. Congrats! There are more steps that you need to take to get everything up and running, but for now macOS should work.


Fixing Necessary Things

While macOS is installed and is likely functional, there are some quality of life things we need to take care of in order to get this laptop working to its full capacity.

Things that need to be fixed


Audio

If you followed this guide to a tee, your audio should already be working as you have set the correct boot-args. In order to get audio working, you need to put alcid=XX in your boot-args where XX is your audio layout ID. For this laptop, I found that 13 is the ID that works the best for this laptop.

Note: I have not found out how to make the 3.5mm audio jack plug-in to work with this laptop. For now, just the speakers and the microphone work.


CPU Power Management

Because we put SMCProcessor.kext in our Kexts folder, we should have working power management with our system. The problem is that this power management is designed for a Macbook Pro 16” which is NOT what our system is.

In order to tell our system to use a better power management structure, we use CPUFriend.kext and the CPUFiendFiend script to create the power plan.

Download CPUFriendFriend

git clone https://github.com/corpnewt/CPUFriendFriend.git
cd CPUFriendFriend
chmod +x CPUFriendFriend.command

Using CPUFriendFriend

If you want to follow my power plan, follow the steps below. You can create your own if you would like.

After doing this, a CPUFriendDataProvider.kext should be in the results folder of CPUFriendFriend.

Finally, you’re going to need to download CPUFriend.kext.

With this, your CPU should be managing its power effectively. This will likely improve your thermals and your battery life. If you would like to view your CPU frequencies and thermals, I recommend downloading HWMonitorSMC2.


Trackpad

Oh boy here we go this is the hard one. I spent weeks trying to figure out how to get the trackpad working with this laptop and I have finally got it working. Because I spent so much time myself trying to get this to work, I will burden you with the unnecessary details about why ASUS is terrible at making DSDT files.

VoodooI2C, the kext that is used to make our trackpad work requires SSCN and FMCN values to be sent from out DSDT to our operating system. ASUS, for some stupid ass reason, decided not to include the SSCN values under the I2C controller that the trackpad is attached to. These required values are present elsewhere in the DSDT, however, so it is possible to patch our DSDT to make this work.

Tools

In order to create our own SSDT to patch this, we are going to need MaciASL, a tool for editing and creating ACPI files. If you made your own SSDT files, you likely already have this installed. If not, download it here:

Opening up MaciASL should bring up your system DSDT. You are going to want to find some values from this.

DefinitionBlock ("", "SSDT", 2, "hack", "I2C", 0x00000000)
{
    External (_SB_.PCI0.I2C1, DeviceObj)
    External (SSD1, IntObj)
    External (SSH1, IntObj)
    External (SSL1, IntObj)

    Scope (_SB.PCI0.I2C1)
    {
        Method (PKG3, 3, Serialized)
        {
            Name (PKG, Package (0x03)
            {
                Zero,
                Zero,
                Zero
            })
            PKG [Zero] = Arg0
            PKG [One] = Arg1
            PKG [0x02] = Arg2
            Return (PKG) /* \_SB_.PCI0.I2C1.PKG3.PKG_ */
        }

        Method (SSCN, 0, NotSerialized)
        {
            Return (PKG3 (SSH1, SSL1, SSD1))
        }
    }
}

As you can see, my SSDT-I2C.dsl file has both the PKG3 method and the SSCN method from my DSDT. This is essentially adding these methods to my I2C controller. The DefinitionBlock is meant to tell OpenCore to load this SSDT file and it defines the changes as unique. The External blocks are meant to define the variables used in the PKG3 and SSCN methods. You may need to modify this based on what you saw in your searches in your DSDT.

My SSDT will be available on my Github repo here.


WIFI/Bluetooth

Initially, I purchased a USB wifi adapter to get WIFI working. It worked well, but it was annoying having one USB port always being filled up. Then came OpenIntelWireless.

The creators behind OpenIntelWireless have made kexts that work with the wifi card in this laptop! This means that we no longer need our USB WIFI Adapter. There will be an additional post with instructions for the USB WIFI adapter that I purchased.

Note: Please be aware that at the time of this writing, this kext is extremely buggy and is experimental. The one issue I have had so far is decreased range from my WIFI Card and occasional screen flickering. This is something I can live with, but I know not all users will want this.

To start, download AirportItlwm NOT itlwm. If you are on a different macOS other than Big Sur or Catalina, download itlwm instead.

You are also going to need IntelBluetoothFirmware.

Make sure you are on OpenCore 0.6.1 Release Version for compatibility with this kext.

Now on with the install:


WIFI


Bluetooth If your wifi does not work on the first boot, you may need to reboot to get it working.

You should now have working WIFI and bluetooth on your ASUS laptop.


Finalizing Things

By this point, you are almost done! Your Asus Zephyrus M15 should pretty much be fully functional on macOS. It does suck that you have to use the USB every time you want to boot though…

Lets fix that.

Moving EFI to you macOS Disk

Now, every time you reboot, you don’t need to have your USB drive to boot macOS. Just select OpenCore or your disk in the boot menu in your BIOS.


Final Notes

Here are some notes for using your computer with macOS on it.

I hope you found this guide useful! This entire process was a huge journey for me and it enhanced my knowledge of Hackintosh and computers in general. I was finally able to make my laptop the ultimate laptop to fit my needs. I could use Windows for games and macOS for all things productivity.

Here is a link to the files in this project on Github.

Disclaimer

I am not responsible for anything that goes wrong with your device as a result of the posts on this site. By trying these methods on your device, you are taking full responsibility for your actions.

View my Github here