Jump to content

[Guida] Caricare AppleLPC.kext via DSDTinject AUTOMATICA!


  • Please log in to reply
31 replies to this topic

#1
scrax

scrax

    InsanelyMac Deity

  • Members
  • PipPipPipPipPipPipPipPipPipPip
  • 1,704 posts
  • Gender:Male
Questa patch permette di avere un device LPC appropriato con OSX.
Permette di ridurre la temperatura Usando lo Speedstep nativo del sistema (Appleintelcpupowermanagement.kext).

Necessario:

Update!
  • 19-02-2011
    corretto riconoscimento patch da applicare
    sostituzione metodo DTGP con MCDP (codice migliore)
    iniziato a inserire prima parte automatizzare la scelta del id da inserire
    aggiunte opzioni -i e-z e mini help
  • 17-02-2011 Aggiunti SMBus fix e download automatico iasl in caso mancasse
Al post #12 uno script per controllare in automatico il giusto caricamento di LPC ed in caso contrario correggere il dsdt in automatico ;)
Qua l'ultima versione aggiornata in tempo reale (possibili errori a ondate)
Qui invece uno zip con li ultime modifiche o aggiunte stabili

  • Iaslme per de/compilare il file dsdt da modificare;
  • TextEdit per modificare dsdt.dsl
  • lspci per conoscere i nostri device id

OTTENERE DSDT.DSL
  • DA Terminale postate questo codice:
    perl -e 'open(CMD, "ioreg -lw0 \| grep DSDT|") or die; while(<CMD>) { chomp; if($_ =~ /\"DSDT\.?\d?\"=<([^>]*)>/) { $buff = $1; open(PIP, "|xxd -r -p > ~/Desktop/dsdt.aml") or die; print PIP "$1"; } }'
  • avrete un nuovo file dsdt.aml sul desktop
  • Trascinate il file sull'icona di IaslMe e vi apparirà dsdt.dsl sul desktop
  • Apritelo con un text editor per effettuare le patch
MODIFICARE DSDT.DSL
Prima cosa verificate se nel dsdt.dsl c'e questa parte (che serve per far funzionare le iniezioni tramite dsdt):
// New Method V1.3 – By Master Chief. USE: MCDP (Arg2, RefOf (Local0))\
	Method (MCDP, 2, NotSerialized) {If (LEqual (Arg0, Zero)) /*Function index: 0*/\
		{Return (Buffer (One) { 0x03 })} Return (DeRefOf (Arg1))}// Modified return value!\
Se non c'è aggiungetela prima dell'ultima parentesi grafa }

Poi cercate nel vostro dsdt.dsl:
Name (_ADR, 0x001F0000)

E nella linea subito sotto incollate:
Method (_DSM, 4, NotSerialized)
				{
					Store (Package (0x02)
						{
							"device-id",
							Buffer (0x04)
							{
								/*SOSTITUIRE_CON_ID_VOLUTO*/
							}
						}, Local0)
					MCDP (Arg2, RefOf (Local0))
					Return (Local0)
				}


Ora la parte importante, otteniamo il nostro device id da terminale con
lspci -nn

dopo aver installato il pacchetto lspci.

Quindi dobbiamo sceglierne uno il più simile possibile tra questi (cioè quelli riconosciuti da AppleLPC.kext):

INTEL :
pci8086,2811 -> 0x11, 0x28, 0x86, 0x80
pci8086,2815 -> 0x15, 0x28, 0x86, 0x80
pci8086,27b9 -> 0xb9, 0x27, 0x86, 0x80
pci8086,27bd -> 0xbd, 0x27, 0x86, 0x80
pci8086,2670 -> 0x70, 0x26, 0x86, 0x80
pci8086,8119 -> 0x19, 0x81, 0x86, 0x80
pci8086,2916 -> 0x16, 0x29, 0x86, 0x80
pci8086,3a18 -> 0x18, 0x3a, 0x86, 0x80
pci8086,3b00 -> 0x00, 0x3b, 0x86, 0x80
pci8086,3b01 -> 0x01, 0x3b, 0x86, 0x80
pci8086,3b02 -> 0x02, 0x3b, 0x86, 0x80
pci8086,3b09 -> 0x09, 0x3b, 0x86, 0x80
NVIDIA
pci10de,aac -> 0x0C, 0xAA, 0xDE, 0x10
pci10de,aae -> 0x0E, 0xAA, 0xDE, 0x10
pci10de,aaf -> 0x0F, 0xAA, 0xDE, 0x10
pci10de,d80 -> 0x80, 0x0d, 0xDE, 0x10
pci10de,d81 -> 0x81, 0x0d, 0xDE, 0x10
pci10de,d82 -> 0x82, 0x0d, 0xDE, 0x10
pci10de,d83 -> 0x83, 0x0d, 0xDE, 0x10

ad esempio per un LPC che ha come ID pci10de,aab useremo pci10de,aac

deciso che id vogliamo usare sostituiamo nella parte appena incollata nel dsdt
/*SOSTITUIRE_CON_ID_VOLUTO*/
con l'id che vogliamo iniettare ma scritto così:
0x0C, 0xAA, 0xDE, 0x10

Altro es. ID pciABCD,EFGH -> 0xGH 0xEF 0xCD 0xAB

COMPILAZIONE DSDT.AML
salvate dsdt.dsl e trascinatelo sull'icona di IaslMe, otterrete una cartella sessions con dentro un'altra cartella contenete il dsdt.aml compilato
Trascinate dsdt.aml in /Extra sostituendolo se già presente (avete già un backup vero?)

Riavviando dovrebbe venir caricato AppleLPC.kext
Usate da terminale
kextstat -k | grep LPC

per verificarlo, se non ottenete nulla vuol dire che non c'è nessun driver caricato e quindi LPC non è riconosciuto
Se viene riconosciuto il driver viene caricato e otteniamo un messaggio tipo:
76 0 0x5d4e4000 0x3000 0x2000 com.apple.driver.AppleLPC (1.4.12) <14 5 4 3>
I numeri posson cambiare l'importante è che com.apple.driver.AppleLPC sia visualizzato e quindi caricato

SPIEGAZIONE COMANDO:
kextstat -k | grep LPC
kextstat serve per visualizzare i kext caricati dal sistema, mentre grep cerca (nel risultato di kextstat che gli passiamo con il carattere "|") una linea che contenga LPC e se la trova la visualizza (-k serve per non includere info sul kernel che non ci interessano)

#2
buoo

buoo

    The Prodigal Son

  • Moderators
  • 4,532 posts
  • Gender:Male
  • Location:Italy
Un'altra magnifica guida by scrax, grazie ;)

#3
ErmaC

ErmaC

    127.0.0.1

  • Supervisors
  • 4,631 posts
  • Gender:Male
  • Location:Canary Islands
Bene scrax semplice e preciso.

Ho aggiunto l'equivalente LPCB in 2 esempi per le SSDT, nella miniguida.

Fabio

#4
lunamis

lunamis

    InsanelyMac Protégé

  • Members
  • Pip
  • 26 posts
Non ho parole, non posso dire che le tue guide mi stupiscono: ) vai avanti, spero solo di essere capace di seguirti

#5
Alex//3oo1

Alex//3oo1

    Cheesecake Destroyer

  • Pandora Team
  • 11,618 posts
  • Gender:Male
  • Location:Lodi
quindi se dopo il
kextstat -k | grep LPC
il terminale risponde
76	0 0x5d4e4000 0x3000	 0x2000	 com.apple.driver.AppleLPC (1.4.12) <14 5 4 3>
è tutto ok! no??

#6
mrmojorisin17

mrmojorisin17

    InsanelyMacaholic

  • Members
  • PipPipPipPipPipPipPipPipPipPipPip
  • 3,942 posts
  • Gender:Male

quindi se dopo il

kextstat -k | grep LPC
il terminale risponde
76	0 0x5d4e4000 0x3000	 0x2000	 com.apple.driver.AppleLPC (1.4.12) <14 5 4 3>
è tutto ok! no??


:D

#7
Alex//3oo1

Alex//3oo1

    Cheesecake Destroyer

  • Pandora Team
  • 11,618 posts
  • Gender:Male
  • Location:Lodi
Grazie Boss e grazie scrax

#8
cili0

cili0

    InsanelyMacaholic

  • FAQ Team
  • 3,008 posts
  • Gender:Male
  • Location:Italy
ora ne vogliamo una per il southbridge :)

complimenti per la guida ovviamente!
ciao!

#9
scrax

scrax

    InsanelyMac Deity

  • Members
  • PipPipPipPipPipPipPipPipPipPip
  • 1,704 posts
  • Gender:Male

quindi se dopo il

kextstat -k | grep LPC
il terminale risponde
76	0 0x5d4e4000 0x3000	 0x2000	 com.apple.driver.AppleLPC (1.4.12) <14 5 4 3>
è tutto ok! no??

Esatto, aggiungo l' es. nel primo post per evitare dubbi, grazie.

ora ne vogliamo una per il southbridge :P

complimenti per la guida ovviamente!
ciao!

:P

Per ora accontentiamoci, LPC è nel southbridge... :gun: :P


Le funzionalità di un southbridge attuale includono
Bus PCI - Include le tradizionali specifiche, ma anche quelle per PCI-X e PCI-Express
Bus ISA - L' ISA bus è ancora integrato nei moderni southbridge anche se nei PC consumer non è più utilizzato. Lo si adopera però ancora nei PC industriali, specie nel formato PC/104.
Bus SM - È usato per comunicare con altre periferiche della scheda madre (p.e. ventole)
Controller DMA - Permette alle periferiche sotto al southbridge di accedere direttamente alla memoria principale senza ricorrere alla CPU
Controller Interrupt - Permette alle periferiche collegate di ottenere attenzione dalla CPU
Controller IDE, SATA o PATA - Consentono una connessione diretta delle periferiche di archiviazione al sistema
LPC Bridge- Fornisce il data e il control path per il Super IO (SIO)
Real Time Clock - Orologio in tempo reale, alimentato da una batteria a tampone
Gestione dell'alimentazione elettrica (APM e ACPI) - Forniscono metodi e segnali per permettere al computer di andare in stand-by o spegnersi per risparmiare energia
CMOS - Aiutato dalla batteria tampone, crea un'area limitata di memoria non volatile per le configurazioni di sistema (BIOS)
Inoltre il southbridge include anche il supporto per Ethernet, RAID, USB, codec audio e firewire. Può anche includere, anche se raramente, il supporto per tastiere, mouse e porte seriali, ma normalmente queste periferiche sono connesse tramite un'altra periferica chiamata Super IO.

da wikipedia

#10
Alex//3oo1

Alex//3oo1

    Cheesecake Destroyer

  • Pandora Team
  • 11,618 posts
  • Gender:Male
  • Location:Lodi

Esatto, aggiungo l' es. nel primo post per evitare dubbi, grazie.


grazie a te......

#11
cili0

cili0

    InsanelyMacaholic

  • FAQ Team
  • 3,008 posts
  • Gender:Male
  • Location:Italy

Esatto, aggiungo l' es. nel primo post per evitare dubbi, grazie.


:P

Per ora accontentiamoci, LPC è nel southbridge... :P :P


[size="1"][/size da wikipedia


uh che nubbone, ero sicuro fosse il NB :gun:

#12
scrax

scrax

    InsanelyMac Deity

  • Members
  • PipPipPipPipPipPipPipPipPipPip
  • 1,704 posts
  • Gender:Male
eccovi una sorpresina...
ma mi serve aiuto per testarla bene.

eccovi un Autopatcher per LPC e SMBUS ,
in pratica fa in automatico guello cho dice la guida, manca solo la parte per decidere che id usare (chiede a noi di scegliere)
se vi funziona proverò a espanderlo con altre patch e soprattutto vorrei renderlo totalmente automatico.

Per ora eliminiamo LPC e SMBUS dalla lista :D

Bus PCI - Include le tradizionali specifiche, ma anche quelle per PCI-X e PCI-Express
Bus ISA - L' ISA bus è ancora integrato nei moderni southbridge anche se nei PC consumer non è più utilizzato. Lo si adopera però ancora nei PC industriali, specie nel formato PC/104.
Bus SM - È usato per comunicare con altre periferiche della scheda madre (p.e. ventole)
Controller DMA - Permette alle periferiche sotto al southbridge di accedere direttamente alla memoria principale senza ricorrere alla CPU
Controller Interrupt - Permette alle periferiche collegate di ottenere attenzione dalla CPU
Controller IDE, SATA o PATA - Consentono una connessione diretta delle periferiche di archiviazione al sistema
LPC Bridge- Fornisce il data e il control path per il Super IO (SIO)
Real Time Clock - Orologio in tempo reale, alimentato da una batteria a tampone
Gestione dell'alimentazione elettrica (APM e ACPI) - Forniscono metodi e segnali per permettere al computer di andare in stand-by o spegnersi per risparmiare energia
CMOS - Aiutato dalla batteria tampone, crea un'area limitata di memoria non volatile per le configurazioni di sistema (BIOS)
Inoltre il southbridge include anche il supporto per Ethernet, RAID, USB, codec audio e firewire. Può anche includere, anche se raramente, il supporto per tastiere, mouse e porte seriali, ma normalmente queste periferiche sono connesse tramite un'altra periferica chiamata Super IO.


ROSSO: In implementazione
ARANCIO: In test
VERDE: Testato (poco per ora. serve il vostro aiuto.)
USO:
Spacchettate e eseguite il file .commad
la cartella Tools con all'interno iasl non va spostata o iasl verrà scaricato ogni volta che non viene trovato dallo script per poter funzionare. :)

STRUTTURA FILE:
/qualsiasi cartella/LPCBFix.command
/qualsiasi cartella/Tools/iasl

risultato:
/qualsiasi cartella/dsdt.aml
o
/Extra/dsdt.aml (rinomina il precedente come dsdt.backup.aml)

NOTA: Può servire anche semplicemente come controllo. Se LPC e SMBUS sono ok vi avverte e si ferma


EDIT: DOWNLOAD AGGIORNATO NEL PRIMO TOPIC

#13
buoo

buoo

    The Prodigal Son

  • Moderators
  • 4,532 posts
  • Gender:Male
  • Location:Italy
Si potrebbe provare a strutturarlo in modo che determini automaticamente qual è il miglior id da usare.
Hai qualche idea in mente?

#14
scrax

scrax

    InsanelyMac Deity

  • Members
  • PipPipPipPipPipPipPipPipPipPip
  • 1,704 posts
  • Gender:Male

Si potrebbe provare a strutturarlo in modo che determini automaticamente qual è il miglior id da usare.
Hai qualche idea in mente?


si è quello che intendevo qui, per ora non so ancora

in pratica fa in automatico guello cho dice la guida, manca solo la parte per decidere che id usare (chiede a noi di scegliere)
se vi funziona proverò a espanderlo con altre patch e soprattutto vorrei renderlo totalmente automatico


Pensavo a convertire gli id in numero decimale e poi vedere matematicamente quale è il più simile, però forse c'è un comando che lo fa già.

Si accettano suggerimenti e modifiche.

Da aggiungere:
  • Automatizzare completamente LPC con scelta codec-id più simile
  • Cercare nella cartella di avvio eventuali dsdt.aml o .dsl e usare questi se presenti invece che quello in uso dal sistema.

buoo l'hai provato? ti funziona?

#15
buoo

buoo

    The Prodigal Son

  • Moderators
  • 4,532 posts
  • Gender:Male
  • Location:Italy
Ho provato a realizzare un piccolo algoritmo che determina il corretto id per il Device LPC

A=   //Assegnata  di dimensione ( 4 X 19 )

1 1 2 8
1 5 2 8
b 9 2 7
b d 2 7
7 0 2 6
1 9 8 1
1 6 2 9
1 8 3 a
0 0 3 b
0 1 3 b
0 2 3 b
0 9 3 b
0 c a a
0 e a a
0 f a a
8 0 0 d
8 1 0 d
8 2 0 d
8 3 0 d

B= //Proprio id di dimensione ( 4 )

1
6
3
a


For i = 1,19

C ( i ) = 0

For j = 1,4

If

A ( i , j ) = B ( j )

Then

C ( i ) = C ( i ) + 1 // Vettore di dimensione 19 , l'i-sima componente può avere un valore minore o uguale a 4
// Questo numero sta per il numero di elementi dell'i-sma riga che coincidono con gli elementi del vettore B
EndIf

EndFor

C ( 1 ) = Max

r = 1

For i = 2,19

If

C ( i ) > Max

Then

Max = C ( i )

r = i // i-sima riga della matrice ( Corretto id da usare )
// Alla fine del ciclo For l'elemento r conterrà l'indice riga della matrice A
EndIf

EndFor

_linenums:0'><strong class='bbc'>A= //Assegnata di dimensione ( 4 X 19 )1 1 2 81 5 2 8b 9 2 7b d 2 77 0 2 61 9 8 11 6 2 91 8 3 a0 0 3 b0 1 3 b0 2 3 b0 9 3 b 0 c a a0 e a a0 f a a8 0 0 d8 1 0 d8 2 0 d8 3 0 dB= //Proprio id di dimensione ( 4 )163aFor i = 1,19 C ( i ) = 0 For j = 1,4 If A ( i , j ) = B ( j ) Then C ( i ) = C ( i ) + 1 // Vettore di dimensione 19 , l'i-sima componente può avere un valore minore o uguale a 4 // Questo numero sta per il numero di elementi dell'i-sma riga che coincidono con gli elementi del vettore B EndIf EndFor C ( 1 ) = Maxr = 1 For i = 2,19 If C ( i ) > Max Then Max = C ( i ) r = i // i-sima riga della matrice ( Corretto id da usare ) // Alla fine del ciclo For l'elemento r conterrà l'indice riga della matrice A EndIfEndFor </strong>


Non l'ho ancora testato, stasera lo provo.
Ho testato lo script con i giusti id nel dsdt, la risposta è stata SMBus : OK
Poi avviato senza dsdt ed ha risposto ancora SMBus : OK , nella cartella temp ho trovato un dsdta.dsl contenente il method dtgp ma non ha aggiunto id.

#16
scrax

scrax

    InsanelyMac Deity

  • Members
  • PipPipPipPipPipPipPipPipPipPip
  • 1,704 posts
  • Gender:Male

Ho provato a realizzare un piccolo algoritmo che determina il corretto id per il Device LPC

A=   //Assegnata  di dimensione ( 4 X 19 )

1 1 2 8
1 5 2 8
b 9 2 7
b d 2 7
7 0 2 6
1 9 8 1
1 6 2 9
1 8 3 a
0 0 3 b
0 1 3 b
0 2 3 b
0 9 3 b
0 c a a
0 e a a
0 f a a
8 0 0 d
8 1 0 d
8 2 0 d
8 3 0 d

B= //Proprio id di dimensione ( 4 )

1
6
3
a


For i = 1,19

C ( i ) = 0

For j = 1,4

If

A ( i , j ) = B ( j )

Then

C ( i ) = C ( i ) + 1 // Vettore di dimensione 19 , l'i-sima componente può avere un valore minore o uguale a 4
// Questo numero sta per il numero di elementi dell'i-sma riga che coincidono con gli elementi del vettore B
EndIf

EndFor

C ( 1 ) = Max

r = 1

For i = 2,19

If

C ( i ) > Max

Then

Max = C ( i )

r = i // i-sima riga della matrice ( Corretto id da usare )
// Alla fine del ciclo For l'elemento r conterrà l'indice riga della matrice A
EndIf

EndFor

_linenums:0'><strong class='bbc'>A= //Assegnata di dimensione ( 4 X 19 )1 1 2 81 5 2 8b 9 2 7b d 2 77 0 2 61 9 8 11 6 2 91 8 3 a0 0 3 b0 1 3 b0 2 3 b0 9 3 b 0 c a a0 e a a0 f a a8 0 0 d8 1 0 d8 2 0 d8 3 0 dB= //Proprio id di dimensione ( 4 )163aFor i = 1,19 C ( i ) = 0 For j = 1,4 If A ( i , j ) = B ( j ) Then C ( i ) = C ( i ) + 1 // Vettore di dimensione 19 , l'i-sima componente può avere un valore minore o uguale a 4 // Questo numero sta per il numero di elementi dell'i-sma riga che coincidono con gli elementi del vettore B EndIf EndFor C ( 1 ) = Maxr = 1 For i = 2,19 If C ( i ) > Max Then Max = C ( i ) r = i // i-sima riga della matrice ( Corretto id da usare ) // Alla fine del ciclo For l'elemento r conterrà l'indice riga della matrice A EndIfEndFor </strong>


Non l'ho ancora testato, stasera lo provo.
Ho testato lo script con i giusti id nel dsdt, la risposta è stata SMBus : OK
Poi avviato senza dsdt ed ha risposto ancora SMBus : OK , nella cartella temp ho trovato un dsdta.dsl contenente il method dtgp ma non ha aggiunto id.

Grazie!

Avviando senza dsdt vuol dire che Osx ha caricato quello originale, che avrebbe dovuto esser patchato?
Puoi postare il dsdt.dsl originale e il dsdta.dsl che hai ottenuto?

Senza dsdt.aml cosa ottieni con:

kextstat -k | grep SMBusController


#17
buoo

buoo

    The Prodigal Son

  • Moderators
  • 4,532 posts
  • Gender:Male
  • Location:Italy
Test #1

Utilizzando in Extra un dsdt patchato con questi ID

Posted Image

e dando il comando al terminale ottengo

Posted Image

lancio lo script ed ottengo questo

Posted Image

Questa è la cartella temp che ottengo Attached File  temp.zip   13.1KB   4 downloads



------------------------------------------------------------------------------


Test #2

Avviando con il dsdt originale del mio bios e dando il comando al terminale ottengo

Posted Image

lancio lo script ed ottengo questo

Posted Image

Questa è la cartella temp che ottengo Attached File  temp2.zip   76.12KB   3 downloads

#18
Smith@@™

Smith@@™

    InsanelyMac LOL

  • Retired
  • 2,928 posts
  • Gender:Male
  • Location:Somewhere over the rainbow...ITALIA!
  • Interests:Dark matter and dark energy. E basta. HD3000. E basta.
Una GUIDA per l' lpc? ;)

#19
Alex//3oo1

Alex//3oo1

    Cheesecake Destroyer

  • Pandora Team
  • 11,618 posts
  • Gender:Male
  • Location:Lodi
perchè no?

#20
mrmojorisin17

mrmojorisin17

    InsanelyMacaholic

  • Members
  • PipPipPipPipPipPipPipPipPipPipPip
  • 3,942 posts
  • Gender:Male
Semplice, coincisa, utile.





0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

© 2014 InsanelyMac  |   News  |   Forum  |   Downloads  |   OSx86 Wiki  |   Mac Netbook  |   PHP hosting by CatN  |   Designed by Ed Gain  |   Logo by irfan  |   Privacy Policy