Come ritardare il caricamento di un Kext?

1

Il modo in cui viene inquadrata la domanda nel titolo potrebbe essere di interesse generale.

Il problema concreto o l'esempio a cui questa domanda dovrebbe essere applicata è: Trovare la soluzione ottimale per hackerare un MacBook Pro altrimenti guasto (chip grafico discreto AMD masterizzato) in condizioni utilizzabili.

Sfondo:

Situazione attuale: dGPU fritto, l'avvio deve essere forzato in iGPU sempre. Con le impostazioni hardware predefinite e l'installazione di sistema predefinita, la macchina non si avvia semplicemente.

Effetto collaterale indesiderato per disabilitare il dGPU nel software: AMDRadeonX3000.kext non deve caricarsi immediatamente, se lo fa - l'avvio si blocca su Yosemite, si blocca in Sierra e si traduce in riavvii forzati rapidamente a causa del surriscaldamento in High Sierra prima della GUI è su. Sintomi osservabili in Sierra, l'ultima riga nel boot dettagliato è: IOConsoleUsers IOScreenLockState 3.

Non si carica affatto il kext: la gestione termica del chip AMD sfugge. La temperatura non scende mai sotto i 65 ° C e si gonfia facilmente anche se il chip non viene utilizzato.

Caricamento ritardato: tutto va bene per il lato temperatura. GPU non è inattivo a pieno regime, ma è inattivo a un powerstate molto più basso. A seconda della versione del sistema operativo, i sensori riportano temperature comprese tra 0 ° C e 60 ° C. Sebbene questa lettura non sia realmente realistica o affidabile, l'intera unità rimane anche più fresca al tatto.

Ma "tutto va bene" solo la maggior parte delle volte. Ogni tanto ci sono problemi di sonno molto rari su Sierra e, ahimè: ogni volta su Yosemite.

Trovando che il kext deve essere caricato per far funzionare la macchina ma è meglio non caricare (almeno in ritardo) per dormire nella macchina: un tentativo di kextunload del kext apparentemente responsabile provoca un panico immediato. Questo paragrafo riguarda principalmente Yosemite ma non tanto Sierra.

Inoltre potrebbe non essere la soluzione ottimale. La gestione termica richiede 1-2 minuti nella configurazione corrente dopo aver caricato il kext per stabilizzarlo in livelli accettabili. Quindi il desiderio di ruotare i kexts e vedere cosa potrebbe dare i migliori risultati.

Passaggi compiuti finora:

Uno dei driver di grafica kexts in Sierra deve essere caricato in / intorno / dopo l'avvio, automaticamente, ma successivamente.

Sono ovviamente interdipendenti e tutti caricati come ritenuto necessario dal sistema in circostanze normali.

Ma il sistema si bloccherà all'avvio se il kext in questione viene caricato troppo presto e il sistema funziona esattamente come desiderato se viene caricato in seguito.

In questo caso ho confermato che il caricamento è manuale o insieme a un accesso GUI tramite hooks.

Tuttavia, questo significa che posizionare il kext in /System/Library/Extensions o /Library/Extensions determina il blocco all'avvio poiché vengono consultati troppo presto.

Inoltre, ciò che non funziona è l'uso di agent o demoni systemd launch poiché questi vengono anche consultati troppo presto. Gli stessi demoni nelle gerarchie utente non hanno apparentemente i privilegi necessari per caricare un kext.

Allora, dov'è questo kext da / System / Library / Extensions? Come si può applicare un ritardo al fatto che questo kext viene caricato solo dopo aver caricato tutte le sue dipendenze verso l'alto o verso il basso?

"Quale kext?" potresti chiedere. Questa domanda riguarda tutti i kits AMD, ognuno dei quali deve essere testato individualmente.

Questo è nel tentativo di migliorare ulteriormente questa guida .

Domande

Domanda principale: in che modo uno di questi grafici può essere forzato a caricare in ritardo? (Oltre al metodo LoginHook.)

Se questo si rivela non ottimale per l'obiettivo dichiarato, sarebbe anche bello, o anche meglio sapere:

Esistono altri modi nel software per mantenere il dGPU disabilitato sotto le regole di gestione termica e di alimentazione del sistema? (Meno energia passa attraverso questo chip non utilizzato, meglio è.)

Questo caso potrebbe coinvolgere anche altre estensioni del kernel.

    
posta LangLangC 27.08.2017 - 19:53
fonte

2 risposte

1

La soluzione più semplice è probabilmente rimuovere a priori l'estensione del kernel offendente da / System / Library / Extensions, nel tuo caso AMDRadeonX3000.kext. Devi:

  1. Disattiva la protezione dell'integrità del sistema. Esistono molte guide su Internet su come eseguire questa operazione, ma la versione breve è: riavvia in modalità di ripristino, apri il terminale e inserisci csrutil disable .

  2. Copia /System/Library/Extensions/AMDRadeonX3000.kext in uno spazio sicuro da qualche altra parte del tuo computer, nel caso qualcosa vada storto e tu debba tornare.

  3. Elimina AMDRadeonX3000.kext da / System / Library / Extensions.

  4. Cancella la cache kext. Apri il terminale ed esegui: sudo touch /System/Library/Extensions && sudo kextcache -u / . Quindi riavvia.

Il kext potrebbe riapparire dopo l'aggiornamento di macOS, nel qual caso dovrai ripetere i passaggi 3 e amp; 4. Per questo motivo, anche se puoi riabilitare SIP una volta rimosso il kext, ti consiglio di lasciarlo spento.

La comunità di Hackintosh ha metodi più persistenti per disabilitare specifiche estensioni del kernel. Se vuoi, puoi dare un'occhiata all'installazione del bootloader Clover, che è destinato agli utenti di Hackintosh ma dovrebbe funzionare anche su hardware ufficiale. Per le tue esigenze, tuttavia, penso che semplicemente la cancellazione del kext sia la soluzione migliore.

Modifica : questo metodo farà in modo che la GPU dedicata continui a ricevere energia, sprecando la batteria. Per impedire alla GPU di ricevere alimentazione, dovrai installare Clover e quindi crea un SSDT personalizzato che spegne la GPU.

    
risposta data 28.08.2017 - 20:25
fonte
0

Non esiste un modo documentato per un utente (né un amministratore) per ritardare il caricamento di KEXT. Le estensioni del kernel di sistema vengono caricate da kextd , il "kernel extension server" in base alla sua pagina man . kextd è avviato da launchd tramite LaunchDaemon che si trova qui:

/System/Library/LaunchDaemons/com.apple.kextd.plist

Oltre a questa directory launchd consulta anche /Library/LaunchDaemons . Non esiste un ordine definito di esecuzione dei plists LaunchDaemon e non è prevista alcuna opzione di ritardo. Ho paura per le tue opzioni,

    
risposta data 28.08.2017 - 10:43
fonte

Leggi altre domande sui tag