Meine USB Ports funktionieren nicht korrekt... Was jetzt?
Seit El Capitan häufen sich die Probleme mit USB 2.0 und vorallem 3.0 Ports auf Hackintoshs. Apple hat seit El Capitan ein Port-Limit in ihr OS eingebaut welches die Nutzung von mehr als 15 USB-Schnittstellen gleichzeitig verbietet. Manche Kexte sollen dieses Problem beheben aber keiner kann eine 100% Erfolgsrate versprechen. Ein bisschen Probieren und Testen ist hier gefragt.
Es gibt verschiedene Herangehensweisen an das Problem. Die meist verbauten USB Controller in Hackintoshs sind wahrscheinlich die Intel USB3 Controller. Die genannten Möglichkeiten beziehen sich deshalb auch auf diesen Controller.
1. Bios Settings:
Im Bios müssen folgende Settings gesetzt sein:
-Der XHCI Mode muss auf Enabled oder Auto stehen (nicht Smart-Auto)
-XHCI und EHCI Hand-off müssen aktiviert sein
2. DSDT Veränderungen:
Solltet ihr euch mit DSDT Patches nicht auskennen, überspringt diesen Teil vorerst und probiert eine der Methoden (unten) aus, vielleicht funktionierts auch ohne DSDT-Edits.
Im Optimalfall sollten in der DSDT folgende Veränderungen vorgenommen werden: (Renames/Device umbenennen)
- EHC1 --> EH01
- EHC2 --> EH02
- XHC1 --> XHC
Eventuell bei älteren Boards:
- EUSB --> EH01
- USBE --> EH02
Dies könnt ihr beim bearbeiten einer DSDT auch einfach mit dem "USB - Device Renames for OSX 10.11" Patch aus der Reposititory "General" von "Pjalm" (http://pjalm.com/repos/general) machen.
Oder auch mittels Find and Replace, einfach die oben aufgeführten Veränderungen eintragen...
3. Strom über USB Ports
Häufig wird per Default nicht genug Strom über die USB Ports eines Hackintoshs ausgegeben, um beispielsweise ein iPhone zu laden.
Häufig sind Meldungen wie
"Ein USB Gerät benötigt mehr Strom",
"Da ein USB-Gerät zu viel Strom von Ihrem Computer abzieht, wurden ein oder mehrere USB-Geräte deaktiviert",
"USB device needs more power", etc.
Hierbei hilft die Installation einer kleinen Helfer-SSDT. Diese Add-ON SSDT wird einfach nach EFI/Oz/ACPI/Load gelegt, unabhängig davon, was dort bereits liegt (es können hier mehrere SSDTs liegen).
- Für SMBios kleiner < als iMac17,1 und < MacBookPro14,3 ist dies: SSDT-EC.aml
- Für SMBios größer gleich ≥ iMac17,1 und ≥ MacBookPro14,3 (also einschließlich iMac17,1 und MacBookPro14,3) ist dies: SSDT_EC-USBX.aml
Nach einem Neustart das USB Gerät nochmals ausprobieren und die Stromversorgung testen.
USB Port-Patch Methoden:
Patchen der USB Ports mit der Kext USBInjectAll:
In beiden dieser Anleitungen wird erklärt wie sich der USBInjectAll.kext nutzen lässt. Zudem wird gezeigt, wie jeder einen "Custom-Port-Injector" für seine Ports im 15-Port Limit erstellen kann. Diese Methode ist eine der sichersten und übersteht ebenfalls Updates ohne Probleme, es sollte sich so jedes USB-Problem an einem Intel USB3 Hackintosh fixen lassen. Der oben aufgeführte DSDT Patch wird hierfür nicht zwingend benötigt. Alle anderen USB Kexts außer USBInjectAll.kext sollten vom Hacky entfernt werden.
1. Anleitung: USB 3.0 mit USBInjectAll
2. Anleitung: USB 3.0 mit USBInjectAllPatchen der USB Ports mit der FakePCIID und FakePCIID_XHCIMux Kext-Kombi:
Diese beiden Kexte werden ganz einfach installiert, indem sie entweder nach EFI/Oz/Darwin/Extensions/Common oder /L/E kopiert werden. Sie verteilen die verschiedenen Ports auf mehrere USB-Controller und umgehen somit das USB Limit (Welches nur für einen Controller gilt). Manchmal sind alle USB Ports nach dem einfachen installieren des Kexts bereits voll funktionstüchtig.
6. Port Limit Patch
Vorwort:
Seit Sierra häuft sich die Benutzung eines KextPatches von RehabMan welcher das gegebene USB Limit anhebt. Der Patch funktioniert, doch RehabMan selber warnt vor der Benutzung.
Hier seine Worte:
IMPORTANT! The port limit patch should not be used as a permanent solution. There is now clear evidence that using it causes other data beyond what is evidently a fixed size array to be clobbered. The result is strange behavior by the USB drivers when the port limit is exceeded.
Trotzdem sei diese Methode aufgrund der häufigen Benutzung hier aufzuführen.
Der Patch entfernt das seit El Capitan vorhandene USB Port Limit, wodurch alle verfügbaren, ob real oder unbelegte Ports, aktiviert werden.
Für das Anheben der USB-Port-Bergrenzung unter macOS Sierra in Verbindung mit Rehabman's USBInjectAll.kext ist ein KextToPatch Eintrag notwendig. Dieser verändert sich mit den macOS Versionen, wird aber nach Release einer neuen macOS Version meist ziemlich zügig bekannt gegeben.
Um den aktuellsten Patch herauszufinden wird am besten Google bemüht. Eine Suche nach "Remove 15 port limit completely in 10.14..." bringt meistens schnelle Ergebnisse. Der Patch muss dann in die KernextPatcher.plist eingetragen, oder per Perl ausgeführt werden.
Diese Methode beeinhaltet eine SSDT und einen DSDT Patch und richtet sich ausschließlich an fortgeschrittene User!
In manchen Fällen sind USB Ports nicht erreichbar, da sie aufgrund einer OS-Erkennung deaktiviert werden.
_OSI in der DSDT erkennt welches Betriebssystem auf dem PC läuft und passt dementsprechend den ACPI-Code an. Die im folgenden benutzte SSDT definiert verschiedene Windows Versionen für die sog. _OSI Methode in der DSDT. _OSI ist ein Vorgang beim Systemstart und wird vom ACPI-Host bereitgestellt (zB OS X, Windows, Linux usw.) Es wird dann aus dem vom OEM bereitgestellten ACPI-Code aufgerufen, um festzustellen, welches Betriebssystem läuft. Das Betriebssystem wird erkannt, was wiederum der Firmware erlaubt, anders auf bestimmte ACPI-Methoden zu reagieren. Dies kann auch einen Einfluss auf das USB Verhalten haben. Beispiel: Für einen alten Computer, kann durch die _OSI Methode, die DSDT USB3.0-Ports deaktivieren und alle USB2.0-Ports an EHCI (über Chipsatzkonfiguration) weiterleiten. Die Methode ermöglicht dadurch zudem Abwärtskompatibilität mit beispielsweise einem System das keine XHCI-Treiber hat, wodurch ein USB3.0-Gerät in einen USB3.0-Anschluss eingesteckt und als USB2.0 Gerät erkannt werden kann, wie als gäbe es keinen XHCI-Controller sondern nur EHCI.
Was wir also versuchen, ist dem ACPI Code vorzugaukeln, dass wir ein anderes Betriebssystem benutzen um so den ACPI-Code beim Systemstart zu beeinflussen. (Beispielsweise Windows 7) Dazu muss erst einmal XOSI definiert werden. Dies passiert mittels einer einfachen SSDT, die in den Ordner EFI/Efi/Oz/ACPI/Load gelegt wird. Sie sollte danach mittels eines Neustarts und eines NVRam resets (zur Sicherheit), eingebunden werden. Downloaden könnt ihr die SSDT.aml und .dsl (zur Erklärung) hier: XOSI SSDT.zip
Jetzt brauchen wir nur noch einen DSDT Patch mit dem wir auf die SSDT verweisen. Dafür müssen wir _OSI in XOSI umbenennen.
Wir öffnen also unsere DSDT in MaciASL, gehen oben auf Edit-->Find und dann "Find and Replace". Bei Find geben wir
_OSI
und bei Replace
XOSI
ein. Jetzt nur noch alle Stellen in der DSDT ersetzen und wir sind fertig. Die DSDT jetzt noch einbinden (EFI/Efi/Oz/ACPI/Load) und _OSI Windows 7 sollte nach einem Neustart erfolgreich simuliert werden und somit möglicherweise gesperrte USB Ports, eventuell verfügbar sein.