SlideShare ist ein Scribd-Unternehmen logo
1 von 10
Finalità
Viste le tante domande che si stanno ponendo in quasi tutti i forum su questa nuova modalità di hacking, ci siamo decisi a creare una serie di guide il cui scopo è semplicemente quello di cercare
di spiegare in modo chiaro e semplice tutte le possibilità offerte da questo nuovo metodo.


1. Cos'è DSDT?.
2. Quale file di "boot" utilizzare per caricare il DSDT.
3. Caratteristiche del patcher.
4. Utilizzo del patcher.
5. Warnings ed errori.
6. Editing del codice di base.
7. Come verificare se il nostro DSDT funziona
Annex : Elenco dei dispositivi ACPI


1. Cos'è DSDT?
DSDT (dall'Inglese : Descrizione Tabella Differentiated System) è una serie di tabelle che forniscono informazioni sulla configurazione dei diversi dispositivi per il sistema operativo. Da queste
sono ad esempio definiti il tipo di chip audio, uscite video, gli step di ibernazione, riavvio, arresto, sospensione, il numero di processori, ecc ...
Tutto questo deve seguire le linee guida dello standard ACPI, ma come vedremo nel corso di questa breve guida queste tabelle non sono sempre scritte in un modo adeguato e questo può portare
a diversi problemi...
E' stata aggiunta a Chamaeleon bootloader la possibilità di leggere un DSDT modificato: in sostanza ciò che rende questo possibile è il precaricamento tramite bootloader, di un DSDT prestabilito
che si è prima modificato.
Lo scopo è dunque quello di estrarre il DSDT, editarlo e modificarlo per cercare di creare un sistema il più "compatibile" e stabile possibile.
Come primo esempio (ne vedremo di più man mano che procederemo) c'è il tipico caso di uno degli errori più comuni nei DSDT mal programmati (o incompatibili con OSX) il quale altro non è che
la voce che definisce il processore / processori.
In questa viene utilizzato del codice aggiuntivo per la definizione di un alias della CPU, che OSX (per l'esattezza il driver ACPIPlatform.kext) non può interpretare, e quindi ci rende il tipico errore:

using 10485 buffer headers and 4096 cluster IO buffer headers

….che fa arrestare il processo di boot.

Le righe di codice incriminate:

Scope (_PR) {
}
Processor (P001, 0x01, 0x00000810, 0x06) {}
Alias (P001, CPU1)

Le stesse righe corrette:

Scope (_PR) {
Processor (P001, 0x01, 0x00000810, 0x06) {}
}


2. Quale file di "boot" utilizzare per caricare il DSDT.
Partiamo dal presupposto che abbiamo installato il bootloader Chameleon.
Una volta che lo abbiamo installato dobbiamo sostituire il file di "boot" che è stato creato nella directory principale del nostro sistema con il file di avvio che permette il precaricamento del DSDT
modificato.
Esistono diversi tipi di file ma parleremo principalmente del file originariamente creato da Mackerintel e di quello sviluppato poi da netkas.


Caratteristiche del bootloader di Mackerintel
Supporta il caricamento del file DSDT.aml dalla root del disco
Non supporta il caricamento da /Extra
Non supporta il caricamento di Initrd.img da bootCD
Non supporta il boot da partizione di boot EFI
E' fondamentalmente la versione ufficiale di Chameleon patchata in modo tale da far caricare DSDT.aml dalla root del disco di avvio.


Caratteristiche del bootloader di Netkas
Supporta il caricamento del file DSDT.aml da root
Supporta il caricamento da /Extra
Non supporta il caricamento di initrd.img dal CD di boot
Non supporta il boot da partizione EFI
Supporta l'ibernazione.
Supporta 64-kernel bit (leo Snow)


3. Caratteristiche del patcher.
Fassl ha creato un patcher che corregge gli errori più comuni nella DSDT delle nostre macchine come segue:
# Aggiusta l'alias nel nome della CPU
Risolve perciò il problema per cui il sistema non si avvia con 2 CPU ma ci sono segnalazioni (nei casi di processori quad-core) di DSDT in cui bisogna eliminare manualmente alcuni alias ....


# Patcha l' HPET
Permette di caricare il file appleintelcpupowermanagement.kext, senza più kernel panic quando si aggiorna il sistema.
Se dopo aver provato il file DSDT sulla nostra macchina, ci sono degli errori con il file, è necessario eseguire il patcher passandogli il parametro
-newHPET
per forzare l'introduzione di codice nel nostro DSDT.


# Patcha l' RTC
Permette dunque di caricare il file AppleRTC.kext che a quanto pare rovina un sacco di Hackintosh durante l'aggiornamento da 10.5.5 a 10.5.6.


Il patcher include nella cartella Tools una utility di Intel (denominata IASL) per la compilazione e decompilazione del file DSDT, che può essere di grande utilità quando dobbiamo correggere
manualmente la DSDT (spiegheremo poi come eseguire i comandi).


4. Utilizzo del patcher.
Una volta scaricato e scompattato il patcher, apriamo un terminale, accediamo alla cartella in cui è contenuto ed eseguiamolo: ci verrà chiesto il tipo di emulazione OSI.


L' Emulazione OSI
Con questo termine si indicano poche righe di codice aggiunto sotto le voci del nostro processore, per renderlo più compatibile con diversi sistemi operativi (Linux, Windows 2000, Windows XP,
Vista).
Ci saranno sempre queste righe nel nostro DSDT (a seconda del modello e produttore).


Selezioniamo quindi una Emulazione OSI:
1-Darwin             (non aggiunge nulla),
2-Windows XP         (aggiunge tabelle per Windows XP),
3-Vista              (aggiunge tabella per Windows Vista).


Come sapere quale selezionare?
Questo è facile, per prima cosa selezioniamo il Darwin, in modo che il codice non venga alterato.
Una volta che avremo terminato tutto, potremo dare un'occhiata al DSDT.dsl e cercare le voci iniziali circa il processore. Di seguito dovremmo vedere se le voci OSI per le righe di codice relative
ai diversi sistemi sono incluse, e, se non lo sono, potremo ri-patchare scegliendo l'opzione per XP o Vista a seconda del computer in uso.


Dopo aver scelto il tipo di emulazione, il programma creerà un dsdt.dat file, lo disassemblera', lo patchera', lo ri-assemblera' e lo depositera' nella root della cartella che ospita il patcher.


Se il patcher incontra degli errori, allora non creerà alcun file.
Se gli errori sono pochi è possibile forzare il patcher per la creare del file in questo modo:
- Aprire Terminale
- trascinare il patcher dentro al Terminale per fargli scrivere il path
- aggiungere il parametro -f
- dare Enter
Ciò richiederà al patcher la creazione di un file DSDT.aml, la qual cosa non è fortemente raccomandata, ma alle volte può funzionare.
La raccomandazione qui sarebbe quella di modificare il codice dentro al file (guardando la linea dove si verifica l'errore e cercando di risolvere il problema).
Questo sarà spiegato meglio nel capitolo 6.
Una volta creato il file, rinominiamo il file dsdt.aml in DSDT.aml e collochiamolo nella directory principale (root) del disco.
Se tutto va bene, potremo avviare il sistema e potremo anche aggiornarlo senza problemi con Apple Software Update.
Si consiglia comunque di testare prima il DSDT patchato (capitolo 7).


5. Warnings ed errori.
E' probabile che quando si esegue la patch, il programma non crei il file DSDT.aml a causa degli errori nel codice, la correzione dei quali si vedrà nel prossimo capitolo.
I Warnings non sono invece un problema per il corretto funzionamento della patch: sono solo un avviso da parte del compilatore Intel, che ha trovato del codice non troppo erroneo in vari punti e li
elenca, in un modo che non ci deve preoccupare troppo.


6. Editing del codice di base.
Se trova errori nel codice, il patcher non creerà' il file DSDT.aml nella cartella in cui si trova; il primo passo è quello di appuntare o copiare gli errori che ci mostra il terminale e tenerli in un file di
testo per un futuro riferimento.
In caso di errore, troveremo il file DSDT.dsl (pre-compilato) nella cartella debug, potremo quindi fare una copia di quella cartella al di fuori della cartella del patcher in modo da avere una copia di
backup.
Torniamo alla cartella di debug che si trova all'interno della cartella del patcher, e spostiamo il file DSDT.dsl in modo da metterlo accanto al file DSDT Patcher.
Apriamolo poi con un editor di testo (un buon editor di testo potrebbe essere" TextMate" in quanto questo rispetta il formato del codice, ma è anche possibile utilizzare TextEdit di OSX, anche se
questo non rispetta il formato del codice - entrambi comunque funzionano bene ai nostri fini).


Una volta terminata la revisione del codice, salviamo il file e facciamone una copia di backup, perché appena il programma cercherà di compilarlo di nuovo, non lo avremo più a disposizione.
Eseguire la patch come segue:
- aprire il Terminale
- trascinare dentro il Parcher DSDT
- lasciare uno spazio e trascinare il file DSDT.dsl rettificato
- premere invio e scegliere l'emulazione OSI desiderata
Se gli errori si verificano ancora, è anche probabile che il file DSDT.dsl sia scomparso, al che utilizzeremo la copia del DSDT.dsl fatta appena prima della compilazione: ricordiamoci sempre di
conservare una copia del file ogni volta che riproviamo.


Comuni esempi di errori nel codice che impediscono la compilazione e la loro soluzione:


# Righe di codice ridondante
./dsdt_fixed.txt
1: ACPI (Local2) Error 4095 -
^ syntax error, unexpected PARSEOP_NAMESEG, expecting PARSEOP_DEFINITIONBLOCK


Questo errore deriva dalla linea 1, è possibile utilizzare nel vostro editor di testo la funzione VAI ALLA LINEA (anche se in questo caso non è necessario) per passare rapidamente alle righe
contenenti gli errori.


Guardando il file DSDT.dsl, vedremo subito che il bug è qui:
ACPI Error (dmutils-0261): Argument count mismatch for method _SB_.VWAK 3 1 [20080926]
ACPI Error (dmutils-0261): Argument count mismatch for method _GPE.VBRE 2 1 [20080926]
/*
* Intel ACPI Component Architecture
* AML Disassembler version 20080926
Non ci dovrebbe essere alcun codice prima di:
/* * Intel ACPI Component Architecture
* AML Disassembler version 20080926


Cancellare semplicemente le prime due righe dovrebbe essere sufficiente per riprovare a compilare e vedere se insorgono nuovi bug.




# Variabili al posto di valori
./dsdt_fixed.txt 408: Store (Local0, Local0)
Error 4050 - ^ Method local variable is not initialized (Local0)
Se ci spostiamo tra il codice e guardare la linea 408, troviamo questo errore:

Scope (_SI)
{
Method (_MSG, 1, NotSerialized)
     {
     Store (Local0, Local0)
     }
     Method (_SST, 1, NotSerialized)
     {
     Store (Local0, Local0)
     }
}

Come faccio a sapere ciò che il codice si aspetta di trovare?
Be ' se cerchiamo col menu Trova dell'editor la parola "Store" troveremo appena sotto l'errore che cerchiamo, visto che il codice è come questo:


Store (0xFF, RSR0)
Store (0x80, PMC0)

Il primo valore di Store e' un valore esadecimale mentre il secondo è una variabile.
Qui è l'errore: nel codice (Local0,local0) si presume che il primo valore sia esadecimale e non una variabile.
Potremmo quindi anche mettere 0x00 o pari a zero, lasciando il codice come segue:

Scope (_SI)
{
   Method (_MSG, 1, NotSerialized)
   {
   Store (zero, Local0)
   }
   Method (_SST, 1, NotSerialized)
   {
   Store (zero, Local0)
   }
}


Qui di seguito invece c'e' la soluzione usata da Gigabyte su questo tema:

Scope (_SI)
{
   Method (_MSG, 1, NotSerialized)
   {
        Store ("Local0", Local0)
   }

     Method (_SST, 1, NotSerialized)
     {
        Store ("Local0", Local0)
     }
}
Si noti come Gigabyte usi le virgolette sul valore Local0 per risolvere il problema.


# Errori di sintassi
Maximum error count (200) exceeded
./dsdt_fixed.txt 24: External (^CPU0._PPC)

Qui quello che accade è che ciò che trova il compilatore non è come segue:
External (^CPU0._PPC) <---- attenzione al simbolo di colore rosso.

Si risove utilizzando la sintassi corretta nel codice:
External (_PR.CPU0._PPC)


# Errori di sintassi
./dsdt_fixed.txt 233: If (LOr (_OSI ("Darwin"), _OSI ("Windows 2001")))
Error 4063 - Object does not exist ^ (LOR)

Soluzione:
If (LOr (_OSI ("Darwin"), _OSI ("Windows 2001")))
oppure
If (LOr (_OSI ("Darwin"), _OSI ("Windows 2001")))


# Errata inizializzazione delle variabili
./dsdt_fixed.txt 3964: Field (ECRM, AnyAcc, Lock, Preserve)
Error    4075 - ^ Host Operation Region requires ByteAcc access

./dsdt_fixed.txt 4192: Return (Local1)
Error    4050 - Method local variable is not initialized ^ (Local1)


Che succede qui?
OperationRegion (ECRM, EmbeddedControl, Zero, 0xFF)
    Field (ECRM, AnyAcc, Lock, Preserve)

Il compilatore ci avverte che AnyAcc non è corretto in quanto si aspetta un ByteAcc e pertanto cambiamo:
OperationRegion (ECRM, EmbeddedControl, Zero, 0xFF)
     Field (ECRM, ByteAcc, Lock, Preserve)


Il secondo errore:
./dsdt_fixed.txt 4192: Return (Local1)
Error     4050 - Method local variable is not initialized ^ (Local1)

….E' simile al precedente errore variabile non inizializzata, giusto?

Method (PKTW, 1, NotSerialized)
        {
        Store (Arg0, EPKT)
        Return (Local1)

E quindi correggeremo così:

Method (PKTW, 1, NotSerialized)
        {
        Store (Arg0, EPKT)
        Return (Zero)
7. Come verificare se il nostro DSDT funziona
Aggiungere il driver Appleintelcpupowermanagement.kext per la nostra versione, rimuovere eventuali "disabler" che abbiamo nelle kext e riavviare il sistema.
Se all' avvio con -v troviamo:
localhost kernel [0]: AppleIntelCPUPowerManagement: inizialization complete
vuol dire che il driver viene caricato correttamente e siamo protetti contro gli aggiornamenti da Apple.
A questo punto, è possibile rimuovere il driver dal sistema una volta che questo si e' dimostrato funzionante.

Cosa fare se al caricamento del sistema si verifica l'errore HPET?
Avviamo con il DVD di installazione, dopo aver superato il benvenuto, consultare il menu in alto e cerchiamo "Utilities" nel menu.
Selezioniamo poi "Terminale".
Una volta nel Terminale scriviamo questo:
# mount -uw /VOLUMES/Nome del volume
# rm -R /VOLUMES/Nome del volume/System/Library/Extensions/AppleIntelCPUPowerManagement.kext
# exit

Questo comando cancellerà la kext.
Chiudere il programma di installazione e riavviare.

Questa volta quando riusiamo la patch, dobbiamo forzare il programma, per fare la qual cosa:
- Apriamo il Terminale
- trasciniamo il Parcher DSDT dentro al Terminale
- lasciare uno spazio e scriviamo:
# -newHPET
- Premiamo Invio
...e questo costringerà l'inserimento della patch nel vostro DSDT.


********Basato sulla versione del patcher 1.0.1e**************

Creatore della guida originale in lingua spagnola : EvOSX86 Team.
Traduzione ed adattamento in lingua italiana : th3f0ul


Annex : Elenco dei dispositivi ACPI
Guida alla modifica del dsdt   1a parte - le basi
Guida alla modifica del dsdt   1a parte - le basi
Guida alla modifica del dsdt   1a parte - le basi
Guida alla modifica del dsdt   1a parte - le basi
Guida alla modifica del dsdt   1a parte - le basi
Guida alla modifica del dsdt   1a parte - le basi

Weitere ähnliche Inhalte

Was ist angesagt?

PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxPIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxMarco Ferrigno
 
Il dual boot scolastico perfetto (2012)
Il dual boot scolastico perfetto (2012)Il dual boot scolastico perfetto (2012)
Il dual boot scolastico perfetto (2012)Marcello Missiroli
 
Understanding Linux: 20 anni di kernel tra storia e tecnica
Understanding Linux: 20 anni di kernel tra storia e tecnicaUnderstanding Linux: 20 anni di kernel tra storia e tecnica
Understanding Linux: 20 anni di kernel tra storia e tecnicaMarco Ferrigno
 
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slidesLinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slidesMaurizio Antonelli
 
Introduzione User Mode Linux
Introduzione User Mode LinuxIntroduzione User Mode Linux
Introduzione User Mode LinuxMajong DevJfu
 
Data hiding - metodologie e strumenti open source
Data hiding - metodologie e strumenti open sourceData hiding - metodologie e strumenti open source
Data hiding - metodologie e strumenti open sourceMarco Ferrigno
 
Hacks windows8.1
Hacks windows8.1Hacks windows8.1
Hacks windows8.1BLOGGER
 
Presentazione sulle caratteristiche di Windows
Presentazione sulle caratteristiche di WindowsPresentazione sulle caratteristiche di Windows
Presentazione sulle caratteristiche di WindowsGianRobaFresh
 
Lezione corso Base GNU/Linux
Lezione corso Base GNU/LinuxLezione corso Base GNU/Linux
Lezione corso Base GNU/LinuxAlex Palesandro
 

Was ist angesagt? (14)

Modulo 1 - Lezione 1
Modulo 1 - Lezione 1Modulo 1 - Lezione 1
Modulo 1 - Lezione 1
 
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxPIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
 
Lezione tre
Lezione treLezione tre
Lezione tre
 
Modulo 1 - Lezione 2
Modulo 1 - Lezione 2Modulo 1 - Lezione 2
Modulo 1 - Lezione 2
 
Il dual boot scolastico perfetto (2012)
Il dual boot scolastico perfetto (2012)Il dual boot scolastico perfetto (2012)
Il dual boot scolastico perfetto (2012)
 
Understanding Linux: 20 anni di kernel tra storia e tecnica
Understanding Linux: 20 anni di kernel tra storia e tecnicaUnderstanding Linux: 20 anni di kernel tra storia e tecnica
Understanding Linux: 20 anni di kernel tra storia e tecnica
 
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slidesLinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
 
CCleaner
CCleanerCCleaner
CCleaner
 
Introduzione User Mode Linux
Introduzione User Mode LinuxIntroduzione User Mode Linux
Introduzione User Mode Linux
 
Data hiding - metodologie e strumenti open source
Data hiding - metodologie e strumenti open sourceData hiding - metodologie e strumenti open source
Data hiding - metodologie e strumenti open source
 
Hacks windows8.1
Hacks windows8.1Hacks windows8.1
Hacks windows8.1
 
Presentazione sulle caratteristiche di Windows
Presentazione sulle caratteristiche di WindowsPresentazione sulle caratteristiche di Windows
Presentazione sulle caratteristiche di Windows
 
Cpu
CpuCpu
Cpu
 
Lezione corso Base GNU/Linux
Lezione corso Base GNU/LinuxLezione corso Base GNU/Linux
Lezione corso Base GNU/Linux
 

Ähnlich wie Guida alla modifica del dsdt 1a parte - le basi

Installazione ambientepython ubuntumate
Installazione ambientepython ubuntumateInstallazione ambientepython ubuntumate
Installazione ambientepython ubuntumateMarco Buttolo
 
Raspberry pi per tutti (workshop presso Warehouse Coworking Pesaro)
Raspberry pi per tutti (workshop presso Warehouse Coworking Pesaro)Raspberry pi per tutti (workshop presso Warehouse Coworking Pesaro)
Raspberry pi per tutti (workshop presso Warehouse Coworking Pesaro)Gabriele Guizzardi
 
Linux Device Drivers
Linux Device DriversLinux Device Drivers
Linux Device DriversFabio Nisci
 
Guida al Computer - Lezione 51 - Il Sistema Operativo Parte 1
Guida al Computer - Lezione 51 - Il Sistema Operativo Parte 1Guida al Computer - Lezione 51 - Il Sistema Operativo Parte 1
Guida al Computer - Lezione 51 - Il Sistema Operativo Parte 1caioturtle
 
Linux & Open Source : Lezione Cinque
Linux & Open Source : Lezione CinqueLinux & Open Source : Lezione Cinque
Linux & Open Source : Lezione CinqueDario Mazza
 
Linux & Open Source : Lezione 1
Linux & Open Source : Lezione 1Linux & Open Source : Lezione 1
Linux & Open Source : Lezione 1Dario Mazza
 
Arduino prima spiegazione
Arduino  prima spiegazioneArduino  prima spiegazione
Arduino prima spiegazioneFlaviano Fior
 
Presentazione Linux
Presentazione LinuxPresentazione Linux
Presentazione LinuxMatteo
 
KDE Plasma widgets
KDE Plasma widgetsKDE Plasma widgets
KDE Plasma widgetsPietro Lerro
 
Moduli del kernel - Boot del sistema
 Moduli del kernel - Boot del sistema Moduli del kernel - Boot del sistema
Moduli del kernel - Boot del sistemaFulvio Corno
 
Con Aruba, a lezione di cloud #lezione 16 - parte 2: 'Centralino VoIP nel cloud'
Con Aruba, a lezione di cloud #lezione 16 - parte 2: 'Centralino VoIP nel cloud'Con Aruba, a lezione di cloud #lezione 16 - parte 2: 'Centralino VoIP nel cloud'
Con Aruba, a lezione di cloud #lezione 16 - parte 2: 'Centralino VoIP nel cloud'Aruba S.p.A.
 
NON ESISTONO COMPUTER VECCHI (Da xp a linux - Treviso 15/4/2014)
NON ESISTONO COMPUTER VECCHI (Da xp a linux - Treviso 15/4/2014)NON ESISTONO COMPUTER VECCHI (Da xp a linux - Treviso 15/4/2014)
NON ESISTONO COMPUTER VECCHI (Da xp a linux - Treviso 15/4/2014)Stefano Dall'Agata
 
Chakra_recensione
Chakra_recensioneChakra_recensione
Chakra_recensioneandreazube
 
Osiris Operating system
Osiris Operating systemOsiris Operating system
Osiris Operating systemDiego
 
TYPO3 CMS 6.2 LTS - Le Novità
TYPO3 CMS 6.2 LTS - Le NovitàTYPO3 CMS 6.2 LTS - Le Novità
TYPO3 CMS 6.2 LTS - Le NovitàRoberto Torresani
 
Guida al computer - Lezione 71 - Il Sistema Operativo: L'Installazione dei pr...
Guida al computer - Lezione 71 - Il Sistema Operativo: L'Installazione dei pr...Guida al computer - Lezione 71 - Il Sistema Operativo: L'Installazione dei pr...
Guida al computer - Lezione 71 - Il Sistema Operativo: L'Installazione dei pr...caioturtle
 

Ähnlich wie Guida alla modifica del dsdt 1a parte - le basi (20)

Installazione ambientepython ubuntumate
Installazione ambientepython ubuntumateInstallazione ambientepython ubuntumate
Installazione ambientepython ubuntumate
 
LUG - Ricompilazione kernel
LUG - Ricompilazione kernelLUG - Ricompilazione kernel
LUG - Ricompilazione kernel
 
Raspberry pi per tutti (workshop presso Warehouse Coworking Pesaro)
Raspberry pi per tutti (workshop presso Warehouse Coworking Pesaro)Raspberry pi per tutti (workshop presso Warehouse Coworking Pesaro)
Raspberry pi per tutti (workshop presso Warehouse Coworking Pesaro)
 
Linux Device Drivers
Linux Device DriversLinux Device Drivers
Linux Device Drivers
 
Guida al Computer - Lezione 51 - Il Sistema Operativo Parte 1
Guida al Computer - Lezione 51 - Il Sistema Operativo Parte 1Guida al Computer - Lezione 51 - Il Sistema Operativo Parte 1
Guida al Computer - Lezione 51 - Il Sistema Operativo Parte 1
 
Ecm ita
Ecm itaEcm ita
Ecm ita
 
Linux & Open Source : Lezione Cinque
Linux & Open Source : Lezione CinqueLinux & Open Source : Lezione Cinque
Linux & Open Source : Lezione Cinque
 
Linux & Open Source : Lezione 1
Linux & Open Source : Lezione 1Linux & Open Source : Lezione 1
Linux & Open Source : Lezione 1
 
Arduino prima spiegazione
Arduino  prima spiegazioneArduino  prima spiegazione
Arduino prima spiegazione
 
Presentazione Linux
Presentazione LinuxPresentazione Linux
Presentazione Linux
 
KDE Plasma widgets
KDE Plasma widgetsKDE Plasma widgets
KDE Plasma widgets
 
Moduli del kernel - Boot del sistema
 Moduli del kernel - Boot del sistema Moduli del kernel - Boot del sistema
Moduli del kernel - Boot del sistema
 
Con Aruba, a lezione di cloud #lezione 16 - parte 2: 'Centralino VoIP nel cloud'
Con Aruba, a lezione di cloud #lezione 16 - parte 2: 'Centralino VoIP nel cloud'Con Aruba, a lezione di cloud #lezione 16 - parte 2: 'Centralino VoIP nel cloud'
Con Aruba, a lezione di cloud #lezione 16 - parte 2: 'Centralino VoIP nel cloud'
 
NON ESISTONO COMPUTER VECCHI (Da xp a linux - Treviso 15/4/2014)
NON ESISTONO COMPUTER VECCHI (Da xp a linux - Treviso 15/4/2014)NON ESISTONO COMPUTER VECCHI (Da xp a linux - Treviso 15/4/2014)
NON ESISTONO COMPUTER VECCHI (Da xp a linux - Treviso 15/4/2014)
 
Chakra_recensione
Chakra_recensioneChakra_recensione
Chakra_recensione
 
Osiris Operating system
Osiris Operating systemOsiris Operating system
Osiris Operating system
 
TYPO3 CMS 6.2 LTS - Le Novità
TYPO3 CMS 6.2 LTS - Le NovitàTYPO3 CMS 6.2 LTS - Le Novità
TYPO3 CMS 6.2 LTS - Le Novità
 
Introduzione ros
Introduzione rosIntroduzione ros
Introduzione ros
 
Cell Programming 1
Cell Programming 1Cell Programming 1
Cell Programming 1
 
Guida al computer - Lezione 71 - Il Sistema Operativo: L'Installazione dei pr...
Guida al computer - Lezione 71 - Il Sistema Operativo: L'Installazione dei pr...Guida al computer - Lezione 71 - Il Sistema Operativo: L'Installazione dei pr...
Guida al computer - Lezione 71 - Il Sistema Operativo: L'Installazione dei pr...
 

Guida alla modifica del dsdt 1a parte - le basi

  • 1. Finalità Viste le tante domande che si stanno ponendo in quasi tutti i forum su questa nuova modalità di hacking, ci siamo decisi a creare una serie di guide il cui scopo è semplicemente quello di cercare di spiegare in modo chiaro e semplice tutte le possibilità offerte da questo nuovo metodo. 1. Cos'è DSDT?. 2. Quale file di "boot" utilizzare per caricare il DSDT. 3. Caratteristiche del patcher. 4. Utilizzo del patcher. 5. Warnings ed errori. 6. Editing del codice di base. 7. Come verificare se il nostro DSDT funziona Annex : Elenco dei dispositivi ACPI 1. Cos'è DSDT? DSDT (dall'Inglese : Descrizione Tabella Differentiated System) è una serie di tabelle che forniscono informazioni sulla configurazione dei diversi dispositivi per il sistema operativo. Da queste sono ad esempio definiti il tipo di chip audio, uscite video, gli step di ibernazione, riavvio, arresto, sospensione, il numero di processori, ecc ... Tutto questo deve seguire le linee guida dello standard ACPI, ma come vedremo nel corso di questa breve guida queste tabelle non sono sempre scritte in un modo adeguato e questo può portare a diversi problemi... E' stata aggiunta a Chamaeleon bootloader la possibilità di leggere un DSDT modificato: in sostanza ciò che rende questo possibile è il precaricamento tramite bootloader, di un DSDT prestabilito che si è prima modificato. Lo scopo è dunque quello di estrarre il DSDT, editarlo e modificarlo per cercare di creare un sistema il più "compatibile" e stabile possibile. Come primo esempio (ne vedremo di più man mano che procederemo) c'è il tipico caso di uno degli errori più comuni nei DSDT mal programmati (o incompatibili con OSX) il quale altro non è che la voce che definisce il processore / processori. In questa viene utilizzato del codice aggiuntivo per la definizione di un alias della CPU, che OSX (per l'esattezza il driver ACPIPlatform.kext) non può interpretare, e quindi ci rende il tipico errore: using 10485 buffer headers and 4096 cluster IO buffer headers ….che fa arrestare il processo di boot. Le righe di codice incriminate: Scope (_PR) { } Processor (P001, 0x01, 0x00000810, 0x06) {} Alias (P001, CPU1) Le stesse righe corrette: Scope (_PR) { Processor (P001, 0x01, 0x00000810, 0x06) {} } 2. Quale file di "boot" utilizzare per caricare il DSDT. Partiamo dal presupposto che abbiamo installato il bootloader Chameleon. Una volta che lo abbiamo installato dobbiamo sostituire il file di "boot" che è stato creato nella directory principale del nostro sistema con il file di avvio che permette il precaricamento del DSDT modificato. Esistono diversi tipi di file ma parleremo principalmente del file originariamente creato da Mackerintel e di quello sviluppato poi da netkas. Caratteristiche del bootloader di Mackerintel Supporta il caricamento del file DSDT.aml dalla root del disco Non supporta il caricamento da /Extra Non supporta il caricamento di Initrd.img da bootCD Non supporta il boot da partizione di boot EFI E' fondamentalmente la versione ufficiale di Chameleon patchata in modo tale da far caricare DSDT.aml dalla root del disco di avvio. Caratteristiche del bootloader di Netkas Supporta il caricamento del file DSDT.aml da root Supporta il caricamento da /Extra Non supporta il caricamento di initrd.img dal CD di boot Non supporta il boot da partizione EFI Supporta l'ibernazione. Supporta 64-kernel bit (leo Snow) 3. Caratteristiche del patcher. Fassl ha creato un patcher che corregge gli errori più comuni nella DSDT delle nostre macchine come segue: # Aggiusta l'alias nel nome della CPU Risolve perciò il problema per cui il sistema non si avvia con 2 CPU ma ci sono segnalazioni (nei casi di processori quad-core) di DSDT in cui bisogna eliminare manualmente alcuni alias .... # Patcha l' HPET Permette di caricare il file appleintelcpupowermanagement.kext, senza più kernel panic quando si aggiorna il sistema. Se dopo aver provato il file DSDT sulla nostra macchina, ci sono degli errori con il file, è necessario eseguire il patcher passandogli il parametro -newHPET per forzare l'introduzione di codice nel nostro DSDT. # Patcha l' RTC Permette dunque di caricare il file AppleRTC.kext che a quanto pare rovina un sacco di Hackintosh durante l'aggiornamento da 10.5.5 a 10.5.6. Il patcher include nella cartella Tools una utility di Intel (denominata IASL) per la compilazione e decompilazione del file DSDT, che può essere di grande utilità quando dobbiamo correggere manualmente la DSDT (spiegheremo poi come eseguire i comandi). 4. Utilizzo del patcher. Una volta scaricato e scompattato il patcher, apriamo un terminale, accediamo alla cartella in cui è contenuto ed eseguiamolo: ci verrà chiesto il tipo di emulazione OSI. L' Emulazione OSI
  • 2. Con questo termine si indicano poche righe di codice aggiunto sotto le voci del nostro processore, per renderlo più compatibile con diversi sistemi operativi (Linux, Windows 2000, Windows XP, Vista). Ci saranno sempre queste righe nel nostro DSDT (a seconda del modello e produttore). Selezioniamo quindi una Emulazione OSI: 1-Darwin (non aggiunge nulla), 2-Windows XP (aggiunge tabelle per Windows XP), 3-Vista (aggiunge tabella per Windows Vista). Come sapere quale selezionare? Questo è facile, per prima cosa selezioniamo il Darwin, in modo che il codice non venga alterato. Una volta che avremo terminato tutto, potremo dare un'occhiata al DSDT.dsl e cercare le voci iniziali circa il processore. Di seguito dovremmo vedere se le voci OSI per le righe di codice relative ai diversi sistemi sono incluse, e, se non lo sono, potremo ri-patchare scegliendo l'opzione per XP o Vista a seconda del computer in uso. Dopo aver scelto il tipo di emulazione, il programma creerà un dsdt.dat file, lo disassemblera', lo patchera', lo ri-assemblera' e lo depositera' nella root della cartella che ospita il patcher. Se il patcher incontra degli errori, allora non creerà alcun file. Se gli errori sono pochi è possibile forzare il patcher per la creare del file in questo modo: - Aprire Terminale - trascinare il patcher dentro al Terminale per fargli scrivere il path - aggiungere il parametro -f - dare Enter Ciò richiederà al patcher la creazione di un file DSDT.aml, la qual cosa non è fortemente raccomandata, ma alle volte può funzionare. La raccomandazione qui sarebbe quella di modificare il codice dentro al file (guardando la linea dove si verifica l'errore e cercando di risolvere il problema). Questo sarà spiegato meglio nel capitolo 6. Una volta creato il file, rinominiamo il file dsdt.aml in DSDT.aml e collochiamolo nella directory principale (root) del disco. Se tutto va bene, potremo avviare il sistema e potremo anche aggiornarlo senza problemi con Apple Software Update. Si consiglia comunque di testare prima il DSDT patchato (capitolo 7). 5. Warnings ed errori. E' probabile che quando si esegue la patch, il programma non crei il file DSDT.aml a causa degli errori nel codice, la correzione dei quali si vedrà nel prossimo capitolo. I Warnings non sono invece un problema per il corretto funzionamento della patch: sono solo un avviso da parte del compilatore Intel, che ha trovato del codice non troppo erroneo in vari punti e li elenca, in un modo che non ci deve preoccupare troppo. 6. Editing del codice di base. Se trova errori nel codice, il patcher non creerà' il file DSDT.aml nella cartella in cui si trova; il primo passo è quello di appuntare o copiare gli errori che ci mostra il terminale e tenerli in un file di testo per un futuro riferimento. In caso di errore, troveremo il file DSDT.dsl (pre-compilato) nella cartella debug, potremo quindi fare una copia di quella cartella al di fuori della cartella del patcher in modo da avere una copia di backup. Torniamo alla cartella di debug che si trova all'interno della cartella del patcher, e spostiamo il file DSDT.dsl in modo da metterlo accanto al file DSDT Patcher. Apriamolo poi con un editor di testo (un buon editor di testo potrebbe essere" TextMate" in quanto questo rispetta il formato del codice, ma è anche possibile utilizzare TextEdit di OSX, anche se questo non rispetta il formato del codice - entrambi comunque funzionano bene ai nostri fini). Una volta terminata la revisione del codice, salviamo il file e facciamone una copia di backup, perché appena il programma cercherà di compilarlo di nuovo, non lo avremo più a disposizione. Eseguire la patch come segue: - aprire il Terminale - trascinare dentro il Parcher DSDT - lasciare uno spazio e trascinare il file DSDT.dsl rettificato - premere invio e scegliere l'emulazione OSI desiderata Se gli errori si verificano ancora, è anche probabile che il file DSDT.dsl sia scomparso, al che utilizzeremo la copia del DSDT.dsl fatta appena prima della compilazione: ricordiamoci sempre di conservare una copia del file ogni volta che riproviamo. Comuni esempi di errori nel codice che impediscono la compilazione e la loro soluzione: # Righe di codice ridondante ./dsdt_fixed.txt 1: ACPI (Local2) Error 4095 - ^ syntax error, unexpected PARSEOP_NAMESEG, expecting PARSEOP_DEFINITIONBLOCK Questo errore deriva dalla linea 1, è possibile utilizzare nel vostro editor di testo la funzione VAI ALLA LINEA (anche se in questo caso non è necessario) per passare rapidamente alle righe contenenti gli errori. Guardando il file DSDT.dsl, vedremo subito che il bug è qui: ACPI Error (dmutils-0261): Argument count mismatch for method _SB_.VWAK 3 1 [20080926] ACPI Error (dmutils-0261): Argument count mismatch for method _GPE.VBRE 2 1 [20080926] /* * Intel ACPI Component Architecture * AML Disassembler version 20080926 Non ci dovrebbe essere alcun codice prima di: /* * Intel ACPI Component Architecture * AML Disassembler version 20080926 Cancellare semplicemente le prime due righe dovrebbe essere sufficiente per riprovare a compilare e vedere se insorgono nuovi bug. # Variabili al posto di valori ./dsdt_fixed.txt 408: Store (Local0, Local0) Error 4050 - ^ Method local variable is not initialized (Local0) Se ci spostiamo tra il codice e guardare la linea 408, troviamo questo errore: Scope (_SI) {
  • 3. Method (_MSG, 1, NotSerialized) { Store (Local0, Local0) } Method (_SST, 1, NotSerialized) { Store (Local0, Local0) } } Come faccio a sapere ciò che il codice si aspetta di trovare? Be ' se cerchiamo col menu Trova dell'editor la parola "Store" troveremo appena sotto l'errore che cerchiamo, visto che il codice è come questo: Store (0xFF, RSR0) Store (0x80, PMC0) Il primo valore di Store e' un valore esadecimale mentre il secondo è una variabile. Qui è l'errore: nel codice (Local0,local0) si presume che il primo valore sia esadecimale e non una variabile. Potremmo quindi anche mettere 0x00 o pari a zero, lasciando il codice come segue: Scope (_SI) { Method (_MSG, 1, NotSerialized) { Store (zero, Local0) } Method (_SST, 1, NotSerialized) { Store (zero, Local0) } } Qui di seguito invece c'e' la soluzione usata da Gigabyte su questo tema: Scope (_SI) { Method (_MSG, 1, NotSerialized) { Store ("Local0", Local0) } Method (_SST, 1, NotSerialized) { Store ("Local0", Local0) } } Si noti come Gigabyte usi le virgolette sul valore Local0 per risolvere il problema. # Errori di sintassi Maximum error count (200) exceeded ./dsdt_fixed.txt 24: External (^CPU0._PPC) Qui quello che accade è che ciò che trova il compilatore non è come segue: External (^CPU0._PPC) <---- attenzione al simbolo di colore rosso. Si risove utilizzando la sintassi corretta nel codice: External (_PR.CPU0._PPC) # Errori di sintassi ./dsdt_fixed.txt 233: If (LOr (_OSI ("Darwin"), _OSI ("Windows 2001"))) Error 4063 - Object does not exist ^ (LOR) Soluzione: If (LOr (_OSI ("Darwin"), _OSI ("Windows 2001"))) oppure If (LOr (_OSI ("Darwin"), _OSI ("Windows 2001"))) # Errata inizializzazione delle variabili ./dsdt_fixed.txt 3964: Field (ECRM, AnyAcc, Lock, Preserve) Error 4075 - ^ Host Operation Region requires ByteAcc access ./dsdt_fixed.txt 4192: Return (Local1) Error 4050 - Method local variable is not initialized ^ (Local1) Che succede qui? OperationRegion (ECRM, EmbeddedControl, Zero, 0xFF) Field (ECRM, AnyAcc, Lock, Preserve) Il compilatore ci avverte che AnyAcc non è corretto in quanto si aspetta un ByteAcc e pertanto cambiamo: OperationRegion (ECRM, EmbeddedControl, Zero, 0xFF) Field (ECRM, ByteAcc, Lock, Preserve) Il secondo errore: ./dsdt_fixed.txt 4192: Return (Local1) Error 4050 - Method local variable is not initialized ^ (Local1) ….E' simile al precedente errore variabile non inizializzata, giusto? Method (PKTW, 1, NotSerialized) { Store (Arg0, EPKT) Return (Local1) E quindi correggeremo così: Method (PKTW, 1, NotSerialized) { Store (Arg0, EPKT) Return (Zero)
  • 4. 7. Come verificare se il nostro DSDT funziona Aggiungere il driver Appleintelcpupowermanagement.kext per la nostra versione, rimuovere eventuali "disabler" che abbiamo nelle kext e riavviare il sistema. Se all' avvio con -v troviamo: localhost kernel [0]: AppleIntelCPUPowerManagement: inizialization complete vuol dire che il driver viene caricato correttamente e siamo protetti contro gli aggiornamenti da Apple. A questo punto, è possibile rimuovere il driver dal sistema una volta che questo si e' dimostrato funzionante. Cosa fare se al caricamento del sistema si verifica l'errore HPET? Avviamo con il DVD di installazione, dopo aver superato il benvenuto, consultare il menu in alto e cerchiamo "Utilities" nel menu. Selezioniamo poi "Terminale". Una volta nel Terminale scriviamo questo: # mount -uw /VOLUMES/Nome del volume # rm -R /VOLUMES/Nome del volume/System/Library/Extensions/AppleIntelCPUPowerManagement.kext # exit Questo comando cancellerà la kext. Chiudere il programma di installazione e riavviare. Questa volta quando riusiamo la patch, dobbiamo forzare il programma, per fare la qual cosa: - Apriamo il Terminale - trasciniamo il Parcher DSDT dentro al Terminale - lasciare uno spazio e scriviamo: # -newHPET - Premiamo Invio ...e questo costringerà l'inserimento della patch nel vostro DSDT. ********Basato sulla versione del patcher 1.0.1e************** Creatore della guida originale in lingua spagnola : EvOSX86 Team. Traduzione ed adattamento in lingua italiana : th3f0ul Annex : Elenco dei dispositivi ACPI