** Hackintosh ** Tips to make a bare metal MacOS


Recommended Posts

1 minute ago, david279 said:

Worked out the box. asmedia 3.0 controller on the motherboard. No kext needed. Its a type A and type C set of ports on my botherboard.

oyieee that's weird, as far as i have read asmedia controller need some extra work to be done even on bare metal hackintosh. even @ghost82 have said that he ended up getting inateck usb card as wasn't able to make his asmedia controller work.

as far as i have read controllers that connected directly to chipset are easier to work with compared to asmedia ones, and my z97d3h's usb ports are all connected to chipset only still they dont work (they work but at such a low speed which, they might as well not work at all).

Link to comment
13 minutes ago, Max said:

even @ghost82 have said that he ended up getting inateck usb card as wasn't able to make his asmedia controller work.

There are different asmedia controllers. Mine didn't work well: panic if I boot with something connected to usb and needed to attach, detach and attach again to get recognized.

All depends on the chipset type.

Edited by ghost82
Link to comment

Thanks for your insight on the topic of improving performance, my vm is racing right now, the only thing I can't seem to get to work is nested virtualization, but I think I'm resigning to the fact that's because I have a AMD cpu so OSx only looks for Intel VT-x not AMD-VT? I've added svm cpu flags, but doesn't seem to help.

 

Anyone got nested virtualization working at all? Let alone with an AMD CPU?

 

Edit: Normally wouldn't care, you know unraid having VM support, but for Android Emulators they only support VirtualBox and Haxm, I can use a usb device of course in the mean time.

Edited by chrisjenx
Link to comment
1 hour ago, chrisjenx said:

Thanks for your insight on the topic of improving performance, my vm is racing right now, the only thing I can't seem to get to work is nested virtualization, but I think I'm resigning to the fact that's because I have a AMD cpu so OSx only looks for Intel VT-x not AMD-VT? I've added svm cpu flags, but doesn't seem to help.

 

Anyone got nested virtualization working at all? Let alone with an AMD CPU?

 

Edit: Normally wouldn't care, you know unraid having VM support, but for Android Emulators they only support VirtualBox and Haxm, I can use a usb device of course in the mean time.

Nested virtualization works here. Adding +hypervisor and +vmx flags got it working on an Intel CPU for me. Also using host-passthrough for CPU model, which I guess won't work with AMD CPU unless you apply patches. Without host-passthrough, the Android emulator was very slow. Even with this configuration it still is slow compared to native, but is usable.

Link to comment
6 hours ago, x3sphere said:

Nested virtualization works here. Adding +hypervisor and +vmx flags got it working on an Intel CPU for me. Also using host-passthrough for CPU model, which I guess won't work with AMD CPU unless you apply patches. Without host-passthrough, the Android emulator was very slow. Even with this configuration it still is slow compared to native, but is usable.

Are you able to post your config?

 

I don't think VMX is supported by AMD? Only SVM - so yeah would require some sort of emulation I'm guessing? Would be happy to use VirtualBox and Genymotion thats less picky, but couldn't get that working either even with SVM passthrough...

 

Link to comment
17 hours ago, x3sphere said:

 

Here's my config: https://pastebin.com/ptt15R7K

Yeah deffo an osx-amd incompatability, as I basically had that minus one flag.

Guessing HAXM and Virtual box only look for vxm inside OSx and not SVM.

 

Wondering if it would be possible to mod OSx to accept AMD cpu and pass through the AMD cpu: https://amd-osx.com/2019/10/10/macos-catalina-is-on-amd/

Wonder if that would at least let VirtualBox see the AMD VT flags?

Link to comment

I installed HS with OpenCore, because I have an ATI 5450, and HS is the latest that supports that hardware. Previously I used clover and managed to make the video work with HS. I don't use the VM a lot, just to convert some negatives in Lightroom that later I process mostly in Darktable under Linux, so my needs are pretty modest. However with OpenCore I cannot make the ATI work. Previously I used Inject ATI, FakeID and Eulemur as framebuffer name, however I do not know how to achieve that with OpenCore. I tried adding a dictionary for my card under Root -> DeviceProperties -> PciRoot(0x1)/Pci(0x2,0x2)/Pci(0x0,0x0) -> by setting the device-id and vendor-id to 68e0 & 1002 (this is the 0x68e01002 Fake ATI id), however this did not work for me. Does anyone know how to achieve what clover did, under OpenCore. I am starting to regret reinstalling the vm, but I just wanted to make HDMI Audio work and wasn't able to do it under clover, so I though why not give OpenCore a try. Btw, I like opencore, it's cleaner and far more logical, however documentation is scarce and even the source code doesn't give me enough pointers how to fix certain problems.

Btw, I would just drop my 2 cents here on the proposed libvirt xml file. Instead of passing qemu arguments, I usually declare policies i.e.
 

<cpu mode="custom" match="exact" check="full">
    <model fallback="forbid">Penryn</model>
    <vendor>GenuineIntel</vendor>
    <feature policy="require" name="vme"/>
    <feature policy="require" name="x2apic"/>
    <feature policy="require" name="xsave"/>
    <feature policy="require" name="xsaveopt"/>
    <feature policy="require" name="pcid"/>
    <feature policy="require" name="rdrand"/>
    <feature policy="require" name="f16c"/>
    <feature policy="require" name="fma"/>
    <feature policy="require" name="hypervisor"/>
    <feature policy="require" name="invtsc"/>
    <feature policy="require" name="avx"/>
    <feature policy="require" name="avx2"/>
    <feature policy="require" name="aes"/>
    <feature policy="require" name="ssse3"/>
    <feature policy="require" name="sse4.2"/>
    <feature policy="require" name="popcnt"/>
    <feature policy="require" name="bmi1"/>
    <feature policy="require" name="bmi2"/>
  </cpu>

Which I think is the 'official' libvirt way, however I would like to know if there is any advantage to passing qemu arguments through <qemu:commandline> in libvirt, but that is secondary and more of an academic question :) ?

Link to comment
9 hours ago, ilf said:

However with OpenCore I cannot make the ATI work

In opencore config you should add the device-id key in the device properties add section:

<key>PciRoot(0x1)/Pci(0x2,0x2)/Pci(0x0,0x0)</key>
<dict>
  <key>device-id</key>
  <data>sGc=</data>
</dict>

sGc= is Base64 data for hex b067.

 

For framebuffer I think you have a clover patch?Just convert to be used with opencore: take the following as an example for Orinoco framebuffer patch:

		<key>Patch</key>
		<array>
			<dict>
				<key>Base</key>
				<string></string>
				<key>Comment</key>
				<string>Orinoco Patch for RX 580</string>
				<key>Count</key>
				<integer>1</integer>
				<key>Enabled</key>
				<true/>
				<key>Find</key>
				<data>
				AAQAAAQDAAAAAQEBAAAAABIEBgEAAAAAAAQAAAQDAAAA
				AQIBAAAAACIFBAMAAAAAAAgAAAQCAAAAAQMAAAAAABEC
				AQIAAAAAAAgAAAQCAAAAAQQAAAAAACEDBQQAAAAABAAA
				AAQAAAAAAQUAAAAAAAAAAwYAAAAA
				</data>
				<key>Identifier</key>
				<string>com.apple.kext.AMD9500Controller</string>
				<key>Limit</key>
				<integer>0</integer>
				<key>Mask</key>
				<data>
				</data>
				<key>MatchKernel</key>
				<string></string>
				<key>Replace</key>
				<data>
				AAQAAAQDAAAAAQEAAAAAABIEBgEAAAAAAAQAAAQDAAAA
				AQIAAAAAACIFBAMAAAAAAAgAAAQCAAAAAQMAAAAAABEC
				AQIAAAAAAAgAAAQCAAAAAQQAAAAAACEDBQQAAAAABAAA
				ABQCAAAAAQUAAAAAABAAAwYAAAAA
				</data>
				<key>ReplaceMask</key>
				<data>
				</data>
				<key>Skip</key>
				<integer>0</integer>
			</dict>

You can use Hackintool to convert hex from clover to Base64 for opencore:

hakintool.thumb.png.63d2ba7e764976bf71759385c40f8651.png

And use lilu+whatevergreen.

 

  • Thanks 1
Link to comment

Hi, quick reply. I tried with device-id, but it did not work. Since my post, I went a bit mad, and reinstalled the machine back with clover (just to realize how convoluted it is and how bad it is), so now it works, however my plan is to install another one with HS and opencore and play around till I make it work, this way I would still be able to have a functioning MacOS while trying to work out OpenCore.

Anyway, back to the device-id, what I did was put under the PCI device path: device-id = 68e0 & vendor-id = 1002 also added the ATY,device-id = 68f9 & ATY,vendor-id = 1002. My assumption is that device-id is the desired one, while the ATY,device-id is the real one that I want changed (btw, I tried it vice-a-versa, too, to no avail). Those were all base64 encoded values of course (i.e. data). However when I look at your proposal, you seem to flip the value 67b0 (which is the ID of R290, not my card, but I get what you mean) to b067, so did I mess up the endianness :(? If I understood correctly I should set device-id = b64(e068) and ATY,device-id = b64(f968)? I can skip the vendor-id, I think, as it is not changing anyway. There is another key that I don't know what it is and if it is critical. According to this Clover conversion readme of OpenCore in the FakeAti section there is also "@0,compatible" key, that I have no idea what it should be, what type it is, or is it mandatory. I couldn't figure it out from the source code. If I'm not successful with doing it through the config.plist I'm also thinking about the SSSD GPU SPOOF from opencore, which would be pain, as I don't know how to easily find the ACPI path of the video card under a VM.

As to the frame-buffer, my config.plist (the clover one) says this:

<key>Graphics</key>
	<dict>
		<key>DualLink</key>
		<integer>0</integer>
		<key>FBName</key>
		<string>Eulemur</string>
		<key>Inject</key>
		<dict>
			<key>ATI</key>
			<true/>
		</dict>
		<key>VideoPorts</key>
		<integer>3</integer>
	</dict>

Again, I'm not very well versed in the hackintosh ways, I'm a linux guy by trade, who happens to shoot film in his spare time :).

Sidenote to libvirt.xml: My proposal of setting cpu features as policies works with opencore flawlessly, when I attempted using it with Clover it did not work as expected so I had to revert to qemu arguments in the libvirt.xml. You live, you learn, I guess.
 

Link to comment
On 5/16/2020 at 7:52 PM, ilf said:

Anyway, back to the device-id, what I did was put under the PCI device path: device-id = 68e0 & vendor-id = 1002 also added the ATY,device-id = 68f9 & ATY,vendor-id = 1002

Sorry, not an expert because my gpu works out of the box, but reading here and there I would try this:

	<key>DeviceProperties</key>
	<dict>
		<key>Add</key>
		<dict>
			<key>PciRoot---HERE-GPU-ADDRESS</key>
			<dict>
				<key>ATY,DeviceID</key>
				<data>4Gg=</data>
			</dict>
			<dict>
				<key>@0,compatible</key>
				<data>QVRZLEV1bGVtdXI=</data>
			</dict>
			<dict>
				<key>ATY,vendor-id</key>
				<data>AhA=</data>
			</dict>
		</dict>

I think values for device-id and vendor id should be "swapped".

If it doesn't work try to add also device-id and vendor-id:

	<key>DeviceProperties</key>
	<dict>
		<key>Add</key>
		<dict>
			<key>PciRoot---HERE-GPU-ADDRESS</key>
			<dict>
				<key>device-id</key>
				<data>4Gg=</data>
			</dict>
			<dict>
				<key>ATY,DeviceID</key>
				<data>4Gg=</data>
			</dict>
			<dict>
				<key>@0,compatible</key>
				<data>QVRZLEV1bGVtdXI=</data>
			</dict>
			<dict>
				<key>vendor-id</key>
				<data>AhA=</data>
			</dict>
			<dict>
				<key>ATY,vendor-id</key>
				<data>AhA=</data>
			</dict>
		</dict>

Here:

https://github.com/dortania/OpenCore-Desktop-Guide/blob/master/clover-conversion/Clover-config.md

you can see all the properties which should be added to opencore for FakeAti.

If both doesn't work try to put "not swapped" values.

 

Values should be not the real ones but the spoofed ones.

@0,compatible should inject the Eulemur framebuffer.

Link to comment
  • 2 weeks later...

First I want to thank everyone here for their work and contributions.  

 

I was FINALLY able to get my Catalina up and running stable.  Everything works, including passed through GPU, except the audio.  I have Lilu and WhateverGreen kexts installed, which helped with passing through the GPU.

 

I have also set the code correctly, i think to allow multifuction to work, and changed the bus for the GPU/Audio to be on the same bus:

<hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
      </source>
      <alias name='hostdev0'/>
      <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0' multifunction='on'/>

</hostdev>
<hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x04' slot='0x00' function='0x1'/>
      </source>
      <alias name='hostdev1'/>
      <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x1'/>
    </hostdev>

 

I also installed the AppleALC kext, but it seemed to have no effect.  I am seeing the HDMI audio out in the sound preferences, but I am not getting any sound coming through the VM via NoMachine.  The server running the VM is headless, so there is no monitor or HDMI hookup directly.  I'm using a headless ghost HDMI device to initiate the graphics adapter to work.

 

The GPU I'm using is an AMD WX 4100 4 GB, and is correctly seen by the system.  

 

No matter which audio output choice I select, HDMI2K, or NoMachine Audio, I do not get any audio.

 

image.png.3ad830eb7a446dba3113c083e751a67e.pngimage.thumb.png.79e4cc0e66acf470a6f735155b338db0.pngimage.png.0b669abf1e5beb4a5f7aebce6193c852.png 

 

  • Like 1
Link to comment

You have it working but you are not going to get audio out thru nomachine, the hdmi2k has to be selected. Also the audio is going to come directly from the HDMI so a monitor or sound out from that monitor is where the sound is going to come from. Is the hdmi2k a dummy plug or something?

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.