Vorrei con il contributo di tutti riempire questo primo topic con più informazioni possibili riguardo alle varie parti che lo compongono in modo da capirne meglio il funzionamento.
Se postate delle spiegazioni più esaurienti di quelle che finora ho messo le integrerò in questo topic per renderlo più completo possibile.
INTRODUZIONE (dal wiki di www.debianizzati.org)
ACPI (Advanced Configuration and Power Interface) è uno standard industriale aperto che definisce l'interfaccia tra S.O. e BIOS per l'amministrazione e la configurazione delle risorse di un PC. ACPI prevede che le informazioni a basso livello sul sistema (batteria, luminosità LCD, pulsanti Fn, ecc.) siano contenute nella DSDT (Differentiated System Description Table).
Il problema principale del supporto ad ACPI in Linux (n.d.t. vale anche per Osx) risiede nella presenza di errori (ma anche di controlli espliciti su alcune caratteristiche peculiari del S.O. soprastante) nella tabella DSDT: purtroppo, molti fornitori di hardware non sono in grado, o non vogliono fornire tabelle DSDT completamente funzionali secondo gli standard ACPI.
Per questo motivo, per utilizzare appieno le possibilità offerte da alcuni PC, soprattutto laptop, è necessario correggere la DSDT e istruire il kernel affinché nel processo di boot carichi la tabella fornita da noi invece di quella fornita dal BIOS.
Aggiornamento del BIOS
Per cominciare è indispensabile(nota: con OsX non è sempre vero talvolta un bios più vecchio da meno problemi) aggiornare il BIOS con l’ultima versione disponibile, sperando che la nuova versione contenga una tabella DSDT con meno errori della precedente
Strumenti per lavorare con le DSDT
Per poter leggere e compilare una DSDT è necessario il compilatore ASL di Intel, per OsX esiste già precompilato nell'app IaslMe da mitch_de in questo topic.
Per utilizzare la DSDT corretta sono disponibili due metodi:
- il primo prevede l'applicazione di un bios moddato con l'inserimento della nuova DSDT, che quindi sarà da modificare e riflashare ogni volta che si fanno cambiamenti alla DSDT. Inoltre potrebbe portare a dei problemi con altri sistemi operativi se troppo differente dall'originale;
- il secondo inserisce la nuova DSDT all'avvio utilizzando un bootloader in grado di sovrascrivere la tabella passata al S.O. Non necessita la modifica del BIOS. Chameleon è uno dei bootloader in grado di fare ciò.
È possibile ottenere la DSDT attualmente installata per poi correggere gli eventuali errori e problemi.
Da Osx usando DSDTSE.app una volta aperto cliccare sul bottone "Get DSDT" e salvare il file .dsl che si ottiene.
Da Linux copiandola da un file reso appositamente disponibile dal filesystem virtuale /proc:
# cat /proc/acpi/dsdt > dsdt.dat
Ciò creerà un file dsdt.dat che contiene la DSDT compilata. Per poterne leggere il contenuto è necessario decompilarla con il compilatore ASL appena installato:
$ iasl -d dsdt.dat
Verrà generato un file di testo denominato dsdt.dsl, che contiene la DSDT.
Questo file può essere aperto con un normale editor di testi e modificato a seconda delle esigenze e dei problemi riscontrati.
Per vedere quali sono i problemi spesso è sufficiente ricompilare il file ottenuto: il compilatore ASL fornirà una serie di warning sulle ottimizzazioni che è possibile fare (e le farà automaticamente) ed, eventualmente, segnalerà degli errori, la cui soluzione può essere, ad esempio, ricercata in DSDTSE o su Internet.
Ad ogni modo una lettura del codice della DSDT può essere istruttiva. Il linguaggio è abbastanza simile al C e con qualche minima conoscenza è possibile comprendere i principali costrutti logici.
Una volta corretti gli errori ricompilare il file dsdt.dsl (trascinandolo sull'icona di IaslMe).
È possibile scaricare una custom DSDT già pronta e corretta da Internet per molti portatili in commercio: http://acpi.sourcefo...net/dsdt/tables
se la usate segnalate nel topic le vostre esperienze.
Inoltre è utile per chi vuole avvicinarsi il più possibile allo ioreg di un mac qui c'è quello del MacPro3,1 (segnalato da RASONE topic #67)
Piccole note sul significato del codice:
// - Servono per definire l'inizio di una linea di commento. Tutto ciò che viene scritto dopo non viene usato nella compilazione la fine del commento corrisponde con la fine della linea
/* - Inizio paragrafo di commenti. Servono per definire l'inizio un commento di più righe
*/ - Fine paragrafo commenti. Serve a determinare la fine di un paragrafo commentato.
{} - Definiscono l'inizio e la fine dei vari blocchi del dsdt.
Esempio di analisi del codice DSDT (topic #34)
PER NEOFITI
Questo topic è indirizzato a utenti con una certa dimestichezza nell'editing del DSDT, se volete iniziare a capire meglio di cosa si parla potete provare iniziando da queste guide di base, per neofiti, per concessione dell' EvOSX86 Team, tradotte in Italiano by thefoul:
- Modifica DSDT - 1a parte - Le Basi
- Modifica del DSDT - 2a parte - TM fix
- Modifica del DSDT - 3a parte - aggiunta di codice per le schede video
-Modifica del DSDT - 4a parte - speedstep nativo mediante DSDT
DSDT MINIMO per P5KR valido anche su P5K e P5KC con crossflash BIOS a P5KR
(se lo testate senza crossflash postate i risultati)
Scope (_PR)
Parte del dsdt che imposta i vari valori per il funzionamento della CPU. Da modificar con i propri p-state o kernel panic
// qui verranno definiti i parametri dei core (comuni per tutti)
Scope (_PR) {
// Modificare in base ai propri p-state (0x03 è il numero in esadecimale dei p-state impostati
// ad es. con 11 p-state ci vuole 0x0B)
Name (PSS, Package (0x03){
// p-state 0 (max freq)
Package (0x06){Zero,Zero,0x0A,0x0A,0x082A,Zero},
// p-state 1 (unico valore da modificare è 0724)
Package (0x06){Zero,Zero,0x0A,0x0A,0x0724,One},
// p-state 2 (061D sono i valori di Fid e Vid per questo p-state)
Package (0x06){Zero,Zero,0x0A,0x0A,0x061D,0x02}
})
//rimosso per snellire il codice in quanto sembra sene occupi AppleLPC.kext di questo
//Name (PSD, Package (0x05){0x05,Zero,Zero,0xFC,0x04})
Name (CST, Package (0x04){0x03,
Package (0x04){ResourceTemplate (){Register (FFixedHW,0x01,0x02,0x0000000000000000,,)},One,One,0x03E8},
Package (0x04){ResourceTemplate (){Register (SystemIO,0x08,0x00,0x0000000000000814,,)},0x02,One,0x01F4},
Package (0x04){ResourceTemplate (){Register (SystemIO,0x08,0x00,0x0000000000000815,,)},0x03,0x55,0xFA}
})
Processor (CPU1, 0x01, 0x00000810, 0x06){
// alias per non riscrivere i valori dei p-state per il primo core
Alias (PSS, _PSS)
//rimosso l'alias che riprendeva i valori di _PSD
//Alias (PSD, _PSD)
Alias (CST, _CST)
}
Processor (CPU2, 0x02, 0x00000810, 0x06){
// alias per non riscrivere i valori dei p-state per il secondo core
Alias (PSS, _PSS)
//rimosso l'alias che riprendeva i valori di _PSD
//Alias (PSD, _PSD)
Alias (CST, _CST)
}
/* Parte necessaria solo per i quadcore (cancellare questa linea per decommentare la parte)
Processor (CPU3, 0x03, 0x00000810, 0x06){
// alias per non riscrivere i valori dei p-state per il terzo core
Alias (PSS, _PSS)
//rimosso l'alias che riprendeva i valori di _PSD
//Alias (PSD, _PSD)
Alias (CST, _CST)
}
Processor (CPU4, 0x04, 0x00000810, 0x06){
// alias per non riscrivere i valori dei p-state per il quarto core
Alias (PSS, _PSS)
//rimosso l'alias che riprendeva i valori di _PSD
//Alias (PSD, _PSD)
Alias (CST, _CST)
}
linea da cancellare se si ha un quad core */
}
Operation Region BIOS
Parte di impostazioni legate al BIOS, senza non va lo stop, spegnimento ecc.
OperationRegion (BIOS, SystemMemory, 0xCFF8E064, 0x2D)
Field (BIOS, ByteAcc, NoLock, Preserve){SLPS, 8, Offset (0x0B), ASSB, 8}
Scope (_SB)
Definisce i Device (da vedere in dettaglio nel post #5.)
Scope (_SB){
TUTTA LA PARTE DEI DEVICE STA QUI VEDI POST N°5
}
Method (_PTS)
Legato al OperationRegion BIOS iniziale serve per lo stop
Method (_PTS, 1, NotSerialized) {
\_SB.PCI0.LPCB.SPTS () Store (Arg0, ASSB)} }
Method (_WAK)
Serve per il risveglio dei device
Method (_WAK, 1, NotSerialized){
Return (Package (0x02){Zero,Zero})}
Parte legata ai vari state S1-S3 ecc.
Name (_S0, Package (0x04){Zero,Zero,Zero,Zero})
Name (_S1, Package (0x04){One,Zero,Zero,Zero})
Name (_S3, Package (0x04){0x05,Zero,Zero,Zero})
Name (_S4, Package (0x04){0x06,Zero,Zero,Zero})
Name (_S5, Package (0x04){0x07,Zero,Zero,Zero})
Method (MDCP)
Per iniettare codici nel dsdt
Method (MCDP, 2, NotSerialized){
If (LEqual (Arg0, Zero)){Store (Buffer (One){0x03}, Arg1)}}
Method (MCID)
Per iniettare id device se non si usano le EFI string
Name (IDB0, Buffer (0x04){0x00, 0x00, 0x00, 0x00})
Name (IDB1, Buffer (0x04){0x00, 0x00, 0x00, 0x00})
Method (MCID, 2, NotSerialized){
If (Arg1){
Store (And (Arg1, 0xFF), Index (IDB0, Zero))
Store (ShiftRight (And (Arg1, 0xFF00), 0x08), Index (IDB0,
One))
If (LEqual (And (Arg1, 0xFFFF0000), Zero)){Store (Package (0x02){"device-id",IDB0}, Local0)}
Else{ShiftRight (Arg1, 0x10, Arg1)
Store (And (Arg1, 0xFF), Index (IDB1, Zero))
Store (ShiftRight (And (Arg1, 0xFF00), 0x08), Index (IDB1,One))
Store (Package (0x04){"vendor-id",IDB0,"device-id",IDB1}, Local0)
}MCDP (Arg0, RefOf (Local0))Return (Local0)
}
Return (Zero)
}



Sign In
Create Account












