OSX-KVM/UEFI
2017-08-16 19:11:47 +05:30
..
.synergy.conf Modernize multiple components 2017-08-11 14:00:26 +05:30
action.png Modernize multiple components 2017-08-11 14:00:26 +05:30
Clover_v2.4k_r4152.pkg Modernize multiple components 2017-08-11 14:00:26 +05:30
Clover_v2.4k_r4152.pkg.md5 Modernize multiple components 2017-08-11 14:00:26 +05:30
config.plist Modernize multiple components 2017-08-11 14:00:26 +05:30
q35-acpi-dsdt.aml Modernize multiple components 2017-08-11 14:00:26 +05:30
README.md Add USB passthrough notes 2017-08-16 19:11:47 +05:30

Setting up UEFI enabled macOS

This is under development. No support is provided for OVMF and Clover based installations at the moment. Experiment at your own risk.

  • Install macOS by following the usual Enoch method.

  • Build and use QEMU from https://github.com/kholia/qemu/. Use the "macOS" branch. Clover + macOS will fail to boot without this step.

  • Install the included Clover_v2*.pkg on the main macOS disk.

    • Hit the Customize button during Clover install.

    • Tick 'Install for UEFI booting only', OsxAptioFix2Drv-64 and PartitionDxe-64 options.

  • The Clover installer should leave the EFI partition mounted for us. Open that up in Finder.

    • Replace the EFI/CLOVER/config.plist file with config.plist included in this folder.

    • Put the included q35-acpi-dsdt.aml file into EFI/CLOVER/ACPI/origin location.

  • You may edit EFI/CLOVER/config.plist to change the screen resolution from 800x600 to a higher supported value.

    This change also requires a corresponding change in the OVMF settings. When using OVMF with a virtual display (without VGA passthrough), you can set the client resolution in the OVMF menu, which you can reach with a press of the ESC button during the OVMF boot logo. In the OVMF menu settings, set Device Manager -> OVMF Platform Configuration -> Change Preferred Resolution for Next Boot to a supported value. Commit changes and exit the OVMF settings. Relaunch the boot-macOS script.

  • Finally, use boot-clover.sh to use OVMF/UEFI to boot macOS with Clover.

  • You can use Clover Configurator to modify your Clover configuration, if required.

GPU passthrough notes

These steps will need to be adapted for your particular setup. A host machine with IOMMU support is required. Consult the Arch Wiki article linked to at the bottom of this file for exact requirements and other details.

I am running Ubuntu 17.04 on Intel i5-6500 + ASUS Z170-AR motherboard + NVIDIA 1050 Ti.

  • Enable IOMMU support on the host machine.

    Add iommu=pt intel_iommu=on video=efifb:off to the GRUB_CMDLINE_LINUX_DEFAULT line in /etc/default/grub file.

  • Uninstall NVIDIA drivers from the host machine and blacklist the required modules.

    $ cat /etc/modprobe.d/blacklist.conf
    ... <existing stuff>
    
    blacklist radeon
    blacklist nouveau
    blacklist nvidia
    
  • Enable the required kernel modules.

    # echo "vfio" >> /etc/modules
    # echo "vfio_iommu_type1" >> /etc/modules
    # echo "vfio_pci" >> /etc/modules
    # echo "vfio_virqfd" >> /etc/modules
    
  • Isolate the passthrough PCIe devices with vfio-pci, with the help of lspci -nnk command. Adapt these commands to suit your hardware setup.

    $ lspci -nn
    ...
    01:00.0 ... NVIDIA Corporation [GeForce GTX 1050 Ti] [10de:1c82]
    01:00.1 Audio device: NVIDIA Corporation Device [10de:0fb9]
    03:00.0 USB controller: ASMedia ASM1142 USB 3.1 Host Controller [1b21:1242]
    
    # echo "options vfio-pci ids=10de:1c82,10de:0fb9 disable_vga=1" > /etc/modprobe.d/vfio.conf
    
  • Update initramfs, GRUB and then reboot.

    $ sudo update-grub2
    $ sudo update-initramfs -k all -u
    
  • Verify that the IOMMU is enabled, and vfio_pci is working as expected. Consult Arch Wiki again for help on this.

  • On the macOS VM, install a NVIDIA Web Driver version which is appropriate for the macOS version. Consult http://www.macvidcards.com/drivers.html for more information.

    For example, macOS 10.12.5 requires version 378.05.05.15f01 whereas macOS 10.12.6 requires version 378.05.05.25f01.

  • Boot the macOS VM using the boot-passthrough.sh script. At this point, the display connected to your passthrough PCIe device should turn on, and you should see the Clover boot screen. Using the keyboard, navigate to Options -> Graphics Injectord, and enable Use NVIDIA Web Driver, then boot macOS.

  • Updating SMBIOS for the macOS to iMac14,2 might be required. I did not do so myself.

  • To reuse the keyboard and mouse devices from the host, setup "Automatic login" in System Preferences in macOS and configure Synergy software.

USB passthrough notes

These steps will need to be adapted for your particular setup.

  • Isolate the passthrough PCIe devices with vfio-pci, with the help of lspci -nnk command.

    $ lspci -nn
    ...
    01:00.0 ... NVIDIA Corporation [GeForce GTX 1050 Ti] [10de:1c82]
    01:00.1 Audio device: NVIDIA Corporation Device [10de:0fb9]
    03:00.0 USB controller: ASMedia ASM1142 USB 3.1 Host Controller [1b21:1242]
    

    Add 1b21:1242 to /etc/modprobe.d/vfio.conf file in the required format.

  • Update initramfs, and then reboot.

    $ sudo update-initramfs -k all -u
    
  • Use the helper scripts to isolate the USB controller.

    $ scripts/lsgroup.sh
    ### Group 7 ###
        00:1c.0 PCI bridge: Intel Corporation Sunrise ...
    ### Group 15 ###
        06:00.0 Audio device: Creative Labs Sound Core3D ...
    ### Group 5 ###
        00:17.0 SATA controller: Intel Corporation Sunrise ...
    ### Group 13 ###
        03:00.0 USB controller: ASMedia ASM1142 USB 3.1 Host Controller
    
    $ scripts/vfio-group.sh 13
    
  • Add -device vfio-pci,host=03:00.0,bus=pcie.0 \ line to the boot-passthrough.sh script.

  • Boot the VM, and devices attached to the ASMedia USB controller should just work under macOS.

Synergy Notes

  • Get Synergy from https://sourceforge.net/projects/synergy-stable-builds.

    I installed "synergy-v1.8.8-stable-MacOSX-x86_64.dmg" on the macOS guest and configured it as a client.

    For automatically starting Synergy on macOS, add Synergy to "Login Items", System Preferences -> Users & Groups -> Select your user account -> Login Items -> Add a login item

  • On the Linux host machine, install "synergy-v1.8.8-stable-Linux-x86_64.deb" or newer, configure ~/.synergy.conf and run synergys command.

  • The included .synergy.conf will need to be adapted according to your setup.

Credits

  • Nicholas Sherlock and others - UEFI, Clover, and other hacks

  • Kyle Dayton - UEFI, Clover, and GPU passthrough notes

References