Die Art und Weise, wie die Frage im Titel formuliert ist, könnte von allgemeinem Interesse sein.
Das konkrete Problem oder Beispiel, auf das diese Frage angewendet werden sollte, lautet: Die optimale Lösung finden, um ein ansonsten totes MacBook Pro (ausgebrannter diskreter AMD-Grafikchip) wieder in einen brauchbaren Zustand zu hacken.
Hintergrund:
Aktuelle Situation: Gebratene dGPU, Booten muss immer in iGPU erzwungen werden. Mit den Standard-Hardwareeinstellungen und der Standard-Systeminstallation startet die Maschine einfach nicht.
Unerwünschter Nebeneffekt für das Deaktivieren der dGPU in Software: AMDRadeonX3000.kext darf nicht sofort geladen werden, wenn doch – Boot hängt auf Yosemite, friert in Sierra ein und führt zu schnellen erzwungenen Neustarts aufgrund von Überhitzung in High Sierra, bevor die GUI hochgefahren ist. In Sierra beobachtbare Symptome, letzte Zeile im ausführlichen Boot ist:IOConsoleUsers IOScreenLockState 3.
Kext wird überhaupt nicht geladen: Das Wärmemanagement für den AMD-Chip gerät außer Kontrolle. Die Temperatur sinkt nie unter 65 °C und steigt leicht an, obwohl der Chip nicht verwendet wird.
Verspätete Beladung: Auf der Temperaturseite ist alles in Ordnung. Die GPU läuft nicht mit voller Leistung im Leerlauf, sondern mit einem viel niedrigeren Leistungszustand. Je nach OS-Version melden die Sensoren Temperaturen im Bereich von 0°C–60°C. Obwohl diese Anzeige nicht wirklich realistisch oder vertrauenswürdig erscheint, fühlt sich die gesamte Einheit auch kühler an.
Aber "alles ist gut" nur meistens. Hin und wieder gibt es sehr seltene Schlafprobleme auf Sierra und leider: jedes Mal auf Yosemite.
Wenn Sie feststellen, dass der kext geladen werden muss, um die Maschine zu betreiben, aber besser nicht (zumindest verzögert) geladen wird, um die Maschine in den Ruhezustand zu versetzen: Ein Versuch, den scheinbar kextunload
verantwortlichen kext zu lesen, führt zu einer sofortigen Panik. Dieser eine Absatz ist hauptsächlich in Yosemite von Bedeutung, aber nicht so sehr in Sierra.
Darüber hinaus ist es möglicherweise nicht die optimale Lösung. Das Wärmemanagement benötigt in der aktuellen Konfiguration 1-2 Minuten nach dem Laden des kext, um sich auf einem akzeptablen Niveau zu stabilisieren. Daher der Wunsch, die Kexte zu drehen und zu sehen, was die besten Ergebnisse liefern könnte.
Bisherige Schritte:
Einer der Grafiktreiber-Kexte in Sierra muss automatisch, aber später beim/um/nach dem Booten geladen werden.
Sie sind natürlich voneinander abhängig und werden alle so geladen, wie es das System unter normalen Umständen als notwendig erachtet.
Aber das System bleibt beim Booten hängen, wenn der betreffende Kext zu früh geladen wird, und das System läuft genau wie gewünscht, wenn es später geladen wird.
In diesem Fall habe ich bestätigt, dass das Laden entweder manuell oder zusammen mit einem GUI-Login über Hooks funktioniert.
Dies bedeutet jedoch, dass das Platzieren des kext in /System/Library/Extensions
oder /Library/Extensions
zum Hängenbleiben am Boot führt, da sie zu früh konsultiert werden.
Was auch nicht funktioniert, ist die Verwendung von systemweiten Launchd-Agenten oder Daemons, da diese ebenfalls zu früh konsultiert werden. Dieselben Daemons unter Benutzerhierarchien haben anscheinend nicht die erforderlichen Berechtigungen, um einen Kext zu laden.
Wohin soll dieser eine Kext aus /System/Library/Extensions gehen? Wie kann eine Verzögerung erzwungen werden, dass dieser Kext erst geladen wird, nachdem alle seine Up- oder Down-Abhängigkeiten geladen wurden?
"Welcher Text?" Sie könnten fragen. Bei dieser Frage geht es um alle AMD-Kexte, die jeweils einzeln getestet werden müssen.
Dies ist ein Versuch, diesen Leitfaden weiter zu verbessern .
Fragen
Hauptfrage: Wie kann einer dieser Grafiktexte zu einem verzögerten Laden gezwungen werden? (Andere als die LoginHook-Methode.)
Wenn sich dies für das erklärte Ziel als suboptimal erweist, wäre es auch schön oder sogar besser zu wissen:
Gibt es andere Möglichkeiten in der Software, die deaktivierte dGPU unter den Wärme- und Energieverwaltungsregeln des Systems zu halten? (Je weniger Strom durch diesen unbenutzten Chip geht, desto besser.)
Dieser Fall kann auch andere Kernel-Erweiterungen betreffen.
Die einfachste Lösung besteht wahrscheinlich darin, die störende Kernel-Erweiterung direkt aus /System/Library/Extensions zu entfernen, in Ihrem Fall AMDRadeonX3000.kext. Du brauchst:
Deaktivieren Sie den Systemintegritätsschutz. Es gibt viele Anleitungen im Internet, wie das geht, aber die Kurzversion lautet: Starten Sie den Wiederherstellungsmodus neu, öffnen Sie das Terminal und geben Sie csrutil disable
.
Kopieren Sie /System/Library/Extensions/AMDRadeonX3000.kext an einen anderen sicheren Ort auf Ihrem Computer, falls etwas schief geht und Sie wiederherstellen müssen.
Löschen Sie AMDRadeonX3000.kext aus /System/Library/Extensions.
Löschen Sie Ihren Kext-Cache. Öffnen Sie das Terminal und führen Sie Folgendes aus: sudo touch /System/Library/Extensions && sudo kextcache -u /
. Dann neu starten.
Der Kext wird möglicherweise nach dem Aktualisieren von macOS erneut angezeigt. In diesem Fall müssen Sie die Schritte 3 und 4 wiederholen. Aus diesem Grund kann ich SIP zwar wieder aktivieren, sobald der Kext entfernt wurde, aber ich empfehle, ihn einfach auszulassen.
Die Hackintosh-Community verfügt über beständigere Methoden zum Deaktivieren bestimmter Kernel-Erweiterungen. Wenn Sie möchten, können Sie den Clover-Bootloader installieren, der sich an Hackintosh-Benutzer richtet, aber auch auf offizieller Hardware funktionieren sollte. Für Ihre Bedürfnisse denke ich jedoch, dass das einfache Löschen des Kext die beste Lösung ist.
Bearbeiten : Diese Methode führt dazu, dass die dedizierte GPU weiterhin Strom erhält, wodurch die Batterie verschwendet wird. Um zu verhindern, dass die GPU Strom erhält, müssen Sie Clover installieren und dann eine benutzerdefinierte SSDT erstellen , die die GPU ausschaltet.
Es gibt keine dokumentierte Möglichkeit für einen Benutzer (oder einen Administrator), das Laden von KEXTs zu verzögern. Systemkernel-Erweiterungen werden laut seiner Seite von geladen kextd
, dem „Kernel-Erweiterungsserver“ man
. kextd
wird über launchd
einen hier sitzenden LaunchDaemon gestartet:
/System/Library/LaunchDaemons/com.apple.kextd.plist
Zusätzlich zu diesem Verzeichnis launchd
konsultiert auch /Library/LaunchDaemons
. Es gibt keine definierte Reihenfolge der Ausführung von LaunchDaemon-Plists und es gibt auch keine Verzögerungsoption. Das reicht für Ihre Optionen, fürchte ich.
/Library
LaunchDaemon im kanonischen Format unter 10.6 gelingt, den Kext spät genug zu laden. Ist 10.6 allein langsam genug oder haben sie die Verarbeitung / Parallelisierung zwischen 10.6 und 10.12 geändert?<Nice>
Definition in der kext .plist "sorta" planen. Z.B. <key>Nice</key><integer>20</integer>
Die Werte reichen von -20 bis 20. Niedrigere Werte haben eine günstigere Planung.
Allan
Benutzer3439894
LangLаngС