Jump to content
Leoyzen

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

669 posts in this topic Last Reply

Recommended Posts

5 hours ago, Max said:

did it work oob or u used some special kext or ssdt of some kind to make it work.

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.

Share this post


Link to post
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).

Share this post


Link to post
Posted (edited)
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

Share this post


Link to post

Updated Opencore to 0.5.8. Added the new apfs changes and made new changes from the difference.pdf and it all booted up OK. Happy updating. 

Share this post


Link to post

are the new versions of opencore (0.5.7 onwards) compatible with nvidia web drivers, i think i have read somewhere that nvdadrv wasn't needed anymore or it doesn't work or its deprecated or something like that.

Share this post


Link to post
13 hours ago, Max said:

are the new versions of opencore (0.5.7 onwards) compatible with nvidia web drivers

Yes, just enable the nvda_drv in NVRAM section in the config plist.

Share this post


Link to post
Posted (edited)

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

Share this post


Link to post
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.

Share this post


Link to post
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...

 

Share this post


Link to post

Is it possible to expose system temperatures (CPU, NVMe, etc) to macOS? My main concern is the NVMe temp readings, as I'm passing through the entire device and can't see temp info in Unraid.

Share this post


Link to post
On 5/9/2020 at 8:18 PM, chrisjenx said:

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...

 

 

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

Share this post


Link to post
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?

Share this post


Link to post

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 :) ?

Share this post


Link to post
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.

 

Share this post


Link to post

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.
 

Share this post


Link to post
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.

Share this post


Link to post
4 minutes ago, david279 said:

10.15.5 is out make your backup and be safe out there. 

If y'all haven't already I would setup TimeMachine to a different box. I've had to restore twice already! 

Share this post


Link to post

I've had that setup for since forever but making a backup a vdisk is dead easy.

Share this post


Link to post

Any successful update to 10.15.5 yet? Making a backup now but I'm still on Opencore 0.5.7, I was waiting on next Monday's release.

Share this post


Link to post

Smooth update here too, opencore 0.5.9 (master branch).

Thanks david279, faster than apple notifier :D

Share this post


Link to post

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 

 

Share this post


Link to post

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?

Share this post


Link to post

Headless will not get any sound without using some kinda fancy audio software to route the sound. So you have a little hill to climb. 

Share this post


Link to post

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.