>

instant-thinking.de

just enough to get you started and leave you confused

Apple MacBook Pro 2011 und die kaputte AMD GPU

| Kommentare

Mein MacBook Pro wurde im Jahre 2011 gebaut. Das ist für einen Computer ein durchaus beeindruckendes Alter. Das MBP befindet sich laut Apple schon eine Weile im Abgekündigt-Status. Es gibt also offiziell keine Ersatzteile und keinen Support mehr. Es läuft mit macOS 10.13.6 High Sierra unter dem für seine Hardware letzten offiziell unterstützen Betriebssystem1. In 2019 wird bereits macOS 10.15 Catalina erwartet, dann ist das Gerät zwei Major-Versionen hinter dem aktuellsten OS.

Seitdem 2014 die Festplatte gegen eine SSD getauscht wurde war die Performance für meine Anforderungen aber immer vollkommen ausreichend und auf der Tastatur funktioniert jede Taste2.

Den einzigen Hardware-Defekt hatte es in 2015. Damals nahm das MBP am im selben Jahr aufgelegten Video Issues Repair Program von Apple teil, weil der Bildschirm solche Sachen machte:

Und nach der kostenlosen Reparatur war dann alles wieder in Ordnung.

Bis heute3.

Das MBP wurde wie üblich geweckt, der Desktop wollte aber nach der Eingabe des Passworts nicht erscheinen, der Bildschirm blieb sehr lange grau, ein Greyscreen of Death, und das Gerät rebootete. Das ließ sich ad infinitum reproduzieren.

Die Ursache hierfür ist ganz offensichtlich auch wieder die AMD GPU, also die externe GPU die zusätzlich zu der internen Intel GPU verbaut ist. Für den Login-Bildschirm wird die interne GPU verwendet und wenn das MBP dann für die Darstellung des Desktops auf die defekte, externe GPU schwenkt passiert der Reboot.

Das Video Issues Repair Program wurde für die 2011er Modelle in 2017 eingestellt, Ersatzteile hält Apple auch nicht mehr vor, das schaut also erst mal nicht gut aus. Es gibt aber einen Weg, die eGPU zu deaktivieren und das MBP nur mit der iGPU zu betreiben, es folgt meine Beschreibung wie das geht in drei Teilen.

Teil 1: SIP deaktivieren, eGPU deaktivieren, Kernel extension aus dem Weg räumen

Als erstes booten wir in den Single User Mode. Dazu beim booten die Tasten +S halten. Das MBP bootet dann in eine Shell mit root-Rechten auf der wir die eGPU über eine NVRAM-Variable abschalten:

eGPU abschalten
1
nvram fa4ce28d-b62f-4c99-9cc3-6815686e30f9:gpu-power-prefs=%01%00%00%00

Das ist aber noch keine dauerhafte Lösung weil die System Integrity Protection noch aktiv ist. Deswegen das Gerät durch die Eingabe von reboot neu starten und dieses mal die Tasten +R halten um in den Recovery Mode zu booten. Dieser ist grafisch und funktioniert erst jetzt, weil wir gerade die eGPU abgeschaltet haben.

Hier dann das Terminal aus dem Dienstprogramme Menü starten, die SIP per csrutil disable abschalten und die NVRAM variable erneut setzen:

Danach wieder per reboot neu starten und per +S zurück in den Single User Mode booten.

Hier können wir nun die Festplatte/SSD im beschreibbaren Modus mounten:

1
/sbin/mount -uw /

Ein Backup-Verzeichnis für die problematische Kernel Extension erstellen:

1
mkdir -p /System/Library/Extensions-off

Die Kernel Extension aus dem Weg räumen:

1
mv /System/Library/Extensions/AMDRadeonX3000.kext  /System/Library/Extensions-off/

Und das System über die erfolgte Änderung an dem Verzeichnis informieren:

1
touch /System/Library/Extensions/

Das war es so weit. Nun wieder wie oben beschrieben zurück in den Recovery Mode booten und SIP per csrutil enable wieder einschalten. Jetzt wieder neu starten und regulär einloggen. Die GUI läuft nun mit der integrierten Intel GPU.

Zur Sicherheit und für alle Fälle nun noch einmal die NVRAM Variable mit vorangestelltem sudo setzen:

eGPU mit sudo abschalten
1
sudo nvram fa4ce28d-b62f-4c99-9cc3-6815686e30f9:gpu-power-prefs=%01%00%00%00

Teil 2: Energiemanagement wieder aktivieren

Nun haben wir ein lauffähiges System aber die eGPU läuft nun einfach so weiter vor sich hin obwohl sie nicht benutzt wird und verbraucht Energie und produziert Wärme. Damit macOS die eGPU wieder als Teilnehmerin am Energiemanagement erkennt, muss die Kernel Extension nach dem Boot geladen werden. Das geschieht händisch per:

eGPU kext nach dem Boot laden
1
sudo kextload /System/Library/Extensions-off/AMDRadeonX3000.kext

Um das nicht jedes mal von Hand machen zu müssen wird so ein LoginHook erstellt:

1
2
sudo mkdir -p /Library/LoginHook
sudo vim /Library/LoginHook/LoadX3000.sh

In der Datei LoadX3000.sh ist dann das folgende Shellscript enthalten:

1
2
3
4
#!/bin/bash
kextload  /System/Library/Extensions-off/AMDRadeonX3000.kext
pmset -a force gpuswitch 0    # undocumented/experimental
exit 0

Das Script wird nun lediglich noch ausführbar gemacht und an das Login-Fenster angehangen:

1
2
sudo chmod a+x /Library/LoginHook/LoadX3000.sh
sudo defaults write com.apple.loginwindow LoginHook /Library/LoginHook/LoadX3000.sh

Teil 3: Einbußen und Vorsichtsmaßnahmen

Das System läuft nun nur noch mit der deutlich schwächeren internen GPU. Das ist blöd, wenn man viel Grafikleistung benötigt. Potenzielle Kandidaten sind vor allem Spiele, aber das findet hier bei mir eher selten bis nie statt. Deutlich schmerzhafter ist der Verlust der Möglichkeit einen externen Monitor anzuschließen.

Dennoch werde ich das MBP zunächst einmal weiter betreiben. Die aktuell möglichen Optionen für einen Ersatz wären:

  • 2019er MacBook Pro
  • 2019er MacBook Air
  • 2015er MacBook Pro (gebraucht)

Die ersten beiden Möglichkeiten kosten mindestens 1500 € zuzüglich Peripherie und haben womöglich ein bereits jetzt obsoletes Keyboard.

Die dritte Möglichkeit kostet auch immer noch ab 700 € auf den einschlägigen Marktplätzen und hat eben auch schon geraume Zeit keine Garantie mehr. Also bleibt das jetzt so, ich sitze das aus, Apple wird schon wieder zu Sinnen kommen.

Die beschriebene Lösung ist in Software durchgeführt worden und kann durch Software wieder rückgängig gemacht werden. Etwa durch möglicherweise kommende Apple Updates oder einen NVRAM-Reset aus anderen Gründen.

Um für diesen Fall nicht immer das NVRAM-Kommando von Hand eingeben zu müssen kann man das in ein Script kippen. Die Datei anlegen:

1
 sudo vim /force-iGPU-boot.sh

Und mit folgendem Inhalt füllen:

1
2
3
#/bin/sh
sudo nvram fa4ce28d-b62f-4c99-9cc3-6815686e30f9:gpu-power-prefs=%01%00%00%00
exit 0

Und ausführbar machen:

1
sudo chmod a+x /force-iGPU-boot.sh

So kann dann einfach wie folgt dieses Script im Single User Mode gestartet werden wenn es erforderlich werden sollte:

1
sh /force-iGPU-boot.sh

Alternativ könnte man sich auch mit einem Reflash der Firmware beschäftigen wenn man 20 $ für eine DeMux-Software übrig hat, einen Lattice HW-USBN-2A ICSP FPGA Programmer rumliegen sowie ein 64-bittiges Windows zur Hand hat. Sehr gute Lötskills und ein temperaturgeregelter Lötkolben wären auch gut um den Programmer an den korrekten Stellen mit dem LogicBoard zu verbinden… Aber das schließe ich hier erst einmal aus.

Die Lösung fand ich in diesem ausgezeichneten und umfangreichen Post auf apple.stackexchange.com. Wie man unter High Sierra Single und Recovery Modus kombiniert fand ich ebendort in einem anderen Post.

Mit diesem Blogpost will ich diesen Fix in der deutschsprachigen Blogosphäre weiter verbreiten und hoffe, dass hierdurch noch weitere Menschen länger Freude an ihren Geräten haben können.

  1. Sicherheitsupdates bekommt High Sierra noch, neue Features nicht.

  2. Das ist bei aktuellen MBPs mit Butterfly-Keyboards nicht unbedingt der Fall

  3. Also, kürzlich…

Comments