Jump to content

[Guida di base]Estrarre il DSDT e correggere gli errori

DSDT; Fix Errors

  • Please log in to reply
277 replies to this topic

#1
carbo178

carbo178

    InsanelyMac V.I.P.

  • Local Moderators
  • 6,315 posts
  • Gender:Male
  • Location:Dalle paludi della Pianura Padana

Salve a tutti,

lo scopo di questa guida è imparare a risolvere autonomamente le più frequenti anomalie di compilazione del DSDT, facilitando al contempo la comprensione dei codici e l'uso dei programmi di decompilazione-compilazione.

 

E' anche un'occasione per creare un "database" degli errori più o meno comuni che si riscontrano durante il processo di compilazione.

 

Ideale per chi si vuole cimentare nell'impresa di costruirsi il DSDT su misura per il proprio Hardware e per chi vuole approcciare l'argomento da neofita senza rischiare danni al PC (in effetti usare un DSDT "trovato su internet" è molto più pericoloso).

 

A chi serve?

A tutti gli utenti che hanno problemi col riconoscimento di alcune periferiche, che siano audio, schede di rete o wifi, schede video, USB3 etc..., velocizzare l'avvio del sistema, far funzionare in modo appropriato lo stop, il riavvio, lo spegnimento ed altro.

 

E' indispensabile avere un DSDT?

No, generalmente se ne può fare a meno e raggiungere lo scopo usando altre strade (ma non sempre è possibile).

 

Dove metto il DSDT?

Dipende dal bootloader:

  • Se usiamo Chameleon o Enoch lo mettiamo nella cartella Extra, che si trova nella root del disco.
  • Se usiamo Clover in modalità Legacy lo inseriamo in Clover/ACPI/Patched, nella root del disco.
  • Se Clover è in modalità UEFI troveremo la cartella nella partizione nascosta EFI (da montare da terminale o con EFI Mounter.app), in questo caso il percorso sarà EFI/Clover/ACPI/Patched

Nota: questa mini guida vi aiuterà ad avere un DSDT privo di errori, l'implementazione di periferiche e patches varie deve essere fatta in un secondo momento, in base alle esigenze di ciascun utente.

 

Cosa serve:

  1. DSDT Editor, oppure DSDT SE, oppure MacIASL (o qualsiasi altro software equivalente)
  2. Pazienza e voglia di imparare

Estrazione del DSDT

Procediamo con l'estrazione del DSDT "vergine" (se già usate un DSDT per il vostro Hack dovete avviare con DSDT=No oppure DSDT=/aaaaaaaaa per evitarne il caricamento).

Per fare questo potete avvalervi di uno dei programmi sopracitati oppure aprendo il terminale e fare un copia-incolla del seguente 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"; } }'

 

In quest'ultimo caso vi troverete il file sul desktop, pronto per essere aperto col vostro compilatore preferito.

Personalmente uso DSDT Editor, lo trovo di facile comprensione ed immediato nell'individuare le linee soggette ad errori, quindi quello che scriverò si baserà su questo software.

 

Compilazione del DSDT

  1. Aprite il file con DSDT Editor e compilatelo (IASL-Compile); sicuramente nella finestrella di compilazione appariranno degli errori, dei warnings e dei Remarks: il nostro scopo è eliminare tali anomalie in modo di avere 0 Errors, 0 Warnings, 0 Remarks,  XX Optimizations (XX è un numero variabile che dipende dall’hardware, non è influente sul risultato finale).
  2. In base agli errori, warnings e remarks che avremo dovremo man mano correggerli: la prima mossa è cliccare su “Fix Errors”, questo correggerà gli errori conosciuti e presenti nel database del programma, quindi molto probabilmente se alla prima compilazione avevate 2 Errors dopo questa operazione ne troverete 1 oppure 0; rimarranno comunque warnings e remarks, per procedere alla correzione cliccate sul testo dell’errore e il programma visualizzerà la linea interessata dal problema.

Ora esaminiamo le anomalie più frequenti:

 

  • "Use of compiler reserved name (_T_0)"
Spoiler
  • "Not all control paths return a value (_BCM)"
Spoiler

Nota: questo rimedio è valido per la maggior parte delle anomalie “Not all control paths return a value”, tranne la seguente...

  • "Not all control paths return a value (_HID)"
Spoiler
  • "Reserved method must return a value (Integer/String/Buffer/Package/Reference required for _DSM)"
Spoiler
  • "_HID suffix must be all hex digits (GH)"
Spoiler
  • "Resource Tag larger than Field (Tag: 64 bits, Field: 32 bits)"
Spoiler

 

  • "Result is not used, possible operator timeout will be missed"

Spoiler

 

  • "Effective AML package length is zero"
Spoiler

 

  • "Effective AML buffer length is zero"

Spoiler

 

Al termine di ogni modifica è necessario cliccare "Fix Errors" per verificare l'efficacia dell'azione.

 

 

 

IN CONTINUO AGGIORNAMENTO

Questa è una guida "aperta", chiunque può contribuire postando le soluzioni ad altre anomalie, o postando il proprio DSDT che presenta errori non compresi nella lista



#2
carlo_67

carlo_67

    InsanelyMac Deity

  • Local Moderators
  • 1,973 posts
  • Gender:Male
  • Location:Roma

Grazie Carbo :thumbsup_anim:

speriamo che con questa guida mi entri nella testa

 

Ottima guida



#3
HackMan85

HackMan85

    InsanelyMac Geek

  • Members
  • PipPipPipPip
  • 195 posts
  • Gender:Male
  • Location:napoli
  • Interests:Computer e sapere informatico.

Buona idea, infatti tempo fà per capire come fixare alcuni errori ho buttato il sangue, anche se a me per esempio anche se applico i fix per (_T_0), (_HID), Tag: 64 bits, Field: 32 bits), operator timeout will be missed,

non mi cambia assolutamente nulla. Si possono postare i propri dsdt corretti senza errori?



#4
carbo178

carbo178

    InsanelyMac V.I.P.

  • Local Moderators
  • 6,315 posts
  • Gender:Male
  • Location:Dalle paludi della Pianura Padana

Buona idea, infatti tempo fà per capire come fixare alcuni errori ho buttato il sangue, anche se a me per esempio anche se applico i fix per (_T_0), (_HID), Tag: 64 bits, Field: 32 bits), operator timeout will be missed,

non mi cambia assolutamente nulla. Si possono postare i propri dsdt corretti senza errori?

Meglio il dsdt con gli errori, anche perchè il dsdt è meglio averlo personalizzato per il proprio sistema, a volte stesa mobo ma con bios di versione diversa può causare KP.

Se hai un dsdt da correggere e non riesci postalo, vedo se riesco e metto il risultato nelle soluzioni



#5
HackMan85

HackMan85

    InsanelyMac Geek

  • Members
  • PipPipPipPip
  • 195 posts
  • Gender:Male
  • Location:napoli
  • Interests:Computer e sapere informatico.

Il mio dsdt è privo di errori ma volevo contribuire postandolo, ma potresti aiutarmi ad abilitare le porte frontali della mia scheda audio tramite dsdt?



#6
carbo178

carbo178

    InsanelyMac V.I.P.

  • Local Moderators
  • 6,315 posts
  • Gender:Male
  • Location:Dalle paludi della Pianura Padana

Non è il topic adatto, la scheda è quella in  firma con alc662?



#7
HackMan85

HackMan85

    InsanelyMac Geek

  • Members
  • PipPipPipPip
  • 195 posts
  • Gender:Male
  • Location:napoli
  • Interests:Computer e sapere informatico.

Aggiungo il fix all'errore "Reserved method must return a value (Integer/String/Buffer/Package/Reference required for _DSM)

Method (_DSM, 4, Serialized)
            {
                Name (DRET, Buffer (0x04)
                {
                     0x00
                })
                If (LEqual (Arg0, Buffer (0x10)
                        {
                            /* 0000 */   0xE1, 0x75, 0x39, 0x6F, 0x82, 0x7A, 0x67, 0x4F,
                            /* 0008 */   0x8B, 0x97, 0x15, 0xBE, 0xE0, 0x60, 0xBE, 0xDF
                        }))
                {
                    If (LEqual (Arg2, Zero))
                    {
                        CreateWordField (DRET, Zero, F0SS)
                        Store (0x02, F0SS)
                        Return (DRET)
                    }
                    If (LEqual (Arg2, One))
                    {
                        If (LEqual (^^PEG0.PEGP.LNKV, 0x03))
                        {
                            Return (Zero)
                        }
                        Return (One)
                    }
                }
            }
        }
    }

Alla fine sotto la seconda parentesi Graffa si deve aggiungere un Return (Zero) Quindi,

Method (_DSM, 4, Serialized)
            {
                Name (DRET, Buffer (0x04)
                {
                     0x00
                })
                If (LEqual (Arg0, Buffer (0x10)
                        {
                            /* 0000 */   0xE1, 0x75, 0x39, 0x6F, 0x82, 0x7A, 0x67, 0x4F,
                            /* 0008 */   0x8B, 0x97, 0x15, 0xBE, 0xE0, 0x60, 0xBE, 0xDF
                        }))
                {
                    If (LEqual (Arg2, Zero))
                    {
                        CreateWordField (DRET, Zero, F0SS)
                        Store (0x02, F0SS)
                        Return (DRET)
                    }
                    If (LEqual (Arg2, One))
                    {
                        If (LEqual (^^PEG0.PEGP.LNKV, 0x03))
                        {
                            Return (Zero)
                        }
                        Return (One)
                    }
                }
                Return (Zero) <-------Ecco dove aggiungere. 
            }
        }
    }


#8
Aigors

Aigors

    InsanelyMac Legend

  • Members
  • PipPipPipPipPipPipPip
  • 510 posts
  • Gender:Male
  • Location:Italy
  • Interests:RC Model, pc, networking, mechanic electronic

Ottima guida, ma mi manca un pezzo, anzi piu' di uno :D 

perche' dovrei avere un dsdt pulito? 

Come faccio a farmi il dsdt specifico per il mio hardware? 

faccio queste domande perche' mi mancano dei pezzi e anche perche' sto cercando di capire tutto il giro per modificare il bios della mia macchina in modo che possa effettuare una installazione liscia di oszx senza passare da clover, chemeleon o atri bootloader, cio' e' possibile usando un bootloader da caricare direttamente nel bios, ma questo prevede che nello stesso bios siano presenti sia il dsdt corretto e privo di errori, sia le eventuali kext, questa e' la ragione per cui chiedo come fare a farsi il dsdt specifico per il proprio hardware.



#9
carbo178

carbo178

    InsanelyMac V.I.P.

  • Local Moderators
  • 6,315 posts
  • Gender:Male
  • Location:Dalle paludi della Pianura Padana

Il dsdt viene estratto dal bios della mobo e presenta tutte le informazioni sulle periferiche della mobo stessa; tali informazioni sono a volte mancanti, altre volte incomplete, ma spesso fanno riferimento ad altre informazioni non presenti, e qui si generano gli errori.

Pulirlo dagli errori lo rende performante per il sistema, mentre l'aggiunta di patches a volte evita l'installazione di kext superflui (ad esempio la patch per shutdown sostituisce il kext Evoreboot, la patch per i dischi arancio sostituisce IOAHCIBlockStorageInjector.kext, etc..).

Personalizzare il dsdt per il proprio Hardware non è impossibile, bisogna conoscere le caratteristiche delle periferiche ed applicare le patches necessarie in base a ciò che non funziona come dovrebbe, ad esempio per riuscire a far funzionare lo stop o l'audio.

Il progetto che hai in mente tu non so se sarà mai fattibile, certo sarebbe il massimo avviare il PC come se fosse un Mac "vero", non preoccuparsi di malfunzionamenti e della reinstallazione di kext e quant'altro dopo l'aggiornamento...



#10
Aigors

Aigors

    InsanelyMac Legend

  • Members
  • PipPipPipPipPipPipPip
  • 510 posts
  • Gender:Male
  • Location:Italy
  • Interests:RC Model, pc, networking, mechanic electronic

Ti ringrazio delle informazioni, diciamo che non e' semplicissimo ma ho beccato un thread dove pare sia possibile fare cio' proprio su questo forum, mi accingo a fare qualche prova, fortunatamente ho una piastra che ha il doppio bios, quindi anche facessi danni, posso sempre tornare indietro.



#11
Aigors

Aigors

    InsanelyMac Legend

  • Members
  • PipPipPipPipPipPipPip
  • 510 posts
  • Gender:Male
  • Location:Italy
  • Interests:RC Model, pc, networking, mechanic electronic

Ancora io, ho scaricato maciasl e ho provato a caricare il dsdt facendoglielo leggere direttamente dall hardware senza caricaste alcunché' ( DSDT=No)  ho visto diversi syntax error e altri warning, ma cambiando linguaggio in acpi 5 scompare quasi tutto e rimangono dei syntax error che non capisco, lamentano las mancanza di un ")" ma questa c'e' 

la mia mb e' una gigabyte z87n-wifi



#12
marco.pisellonio80

marco.pisellonio80

    InsanelyMac Sage

  • Donators
  • 442 posts
  • Gender:Male
  • Interests:Libri, musica e natura

Questa guida arriva come il pane per me che voglio approfondire la conoscenza dell'hackintosh. Qualche domanda per Carbo:

ma le patches sono indipendenti dal sistema operativo? A che serve ogni specifica patch? Mi spiego meglio.

L'utente giofrida mi ha corretto e patchato il DSDT del portatile in firma che ora è perfetto. Mi ha messo le seguenti patches:

 

_T_x rename / DTGP / EHCI / FN KEYS / FPED / IRQs / New HPET / RTC / SHUTDOWN / SMBUS / UHCI

 

Ora, a parte quelle a cui ci si arriva intuitivamente come le FN KEYS, che abilitano i tasti funzione del portatile e la SHUTDOWN che spegne e riavvia, le altre cosa sono e a che servono? Ho provato a cercare in google e non c'è niente, al massimo mi escono post in cui qualcuno consiglia di mettere la patch da me cercata nel dsdt, ma guide non ce ne sono. Il pandora team è così gentile da inserire, per chi installa OSX col metodo pandora, una cartella con le patches in /Applicazioni/Utility e già sfogliando si capisce che alcune sono divise per processori, altre per marca di mobo, altre servono per desktop, per notebook ecc., ma se uno vuole cercare una guida in cui si spiega cos'è una patch, a che serve e dove si inserisce non c'è niente. Anche maciasl, che è il programma più facile, si limita a farti selezionare online il repository con le patches interessate divise per mobo e ad applicarle, ma pur essendo facilissimo questo metodo non spiega niente su come e dove le patches vengono applicate. Mi è capitato di chiedere ad utenti esperti e o non ricevo risposta o mi si dice di cercare in rete "che ci sono tantissime guide". L'impressione che ho ricevuto (ma mi sbaglierò) è che ci sia una certa ritrosia a parlarne, anche se non riesco a capirne il motivo. Oppure può darsi che ci si metta molto più tempo a spiegare che ad agire, così chi è più esperto preferisce farsi mandare il DSDT e rimandarlo corretto e patchato, piuttosto che mettersi a spiegarne il metodo.

 

Quindi spero che il buon Carbo, dopo aver spiegato cos'è il DSDT, come si compila e come si correggono gli errori più comuni, guida utilissima, prosegua con la spiegazione e applicazione delle patch, che è quello che alla fine rende un hackintosh meno problematico e più compatibile possibile. :)



#13
carbo178

carbo178

    InsanelyMac V.I.P.

  • Local Moderators
  • 6,315 posts
  • Gender:Male
  • Location:Dalle paludi della Pianura Padana

@marco.pisellonio80

Le patches sono indipendenti dal sistema operativo, le tabelle ACPI si basano sull'hardware, non sul software che poi le farà funzionare (tranne l'HPET che in base all'anzianità del SO può essere più o meno utilizzata).

Le patches possono essere usate per correggere degli errori (_T_x rename, Possible operator... etc...) oppure per aggiungere periferiche (in molti casi manca l'HDEF per l'audio, oppure è incompleta) e migliorare (nonostante non siano segnalati errori) il supporto ad altre periferiche come le USB, o l'smbus, ottimizzare gli interrupt o l'rtc.

 

Nel tuo caso l'unica patch di correzione vera e propria è il _T_X rename, il DTGP serve per implementare le patches aggiunte in seguito (ad esempio l'audio o le FN keys), EHCI e UHCI sono per le USB e firewire, IRQ sono gli interrupt di sistema, RTC è il Real Time Clock, in alcuni casi se non si procede alla patch via DSDT o dell'apposito kext si verifica il reset del bios ad ogni riavvio; HPET e SMBUS sono delle ottimizzazioni, la prima riguarda la parte relativa al Power Management e l'altra è il Bus di Sistema ed ovviamente Shutdown è una correzione per evitare che il PC faccia un riavvio invece dello spegnimento.

 

Non sono un esperto, questo è quanto ho "capito" da autodidatta, quindi posso sbagliare; se qualcuno più esperto vuole integrare è il benvenuto.

 

@ Aigors

puoi postare il tuo dsdt vergine?



#14
marco.pisellonio80

marco.pisellonio80

    InsanelyMac Sage

  • Donators
  • 442 posts
  • Gender:Male
  • Interests:Libri, musica e natura

Grazie delle info, carbo. Spero che la guida continui, dopo la correzione degli errori e la ricompilazione, con le patch...



#15
Aigors

Aigors

    InsanelyMac Legend

  • Members
  • PipPipPipPipPipPipPip
  • 510 posts
  • Gender:Male
  • Location:Italy
  • Interests:RC Model, pc, networking, mechanic electronic

Ciao Carbo in allegato c'e' il mio dsdst

Attached Files



#16
carbo178

carbo178

    InsanelyMac V.I.P.

  • Local Moderators
  • 6,315 posts
  • Gender:Male
  • Location:Dalle paludi della Pianura Padana

Ciao Carbo in allegato c'e' il mio dsdst

Ti avevo chiesto quello vergine, appena estratto e ancora da correggere, questo è perfetto.



#17
Aigors

Aigors

    InsanelyMac Legend

  • Members
  • PipPipPipPipPipPipPip
  • 510 posts
  • Gender:Male
  • Location:Italy
  • Interests:RC Model, pc, networking, mechanic electronic

Ciao Carbo, scusami, ora allego l'archivio originale ossia col flag DSDT No

Attached Files



#18
rambo77

rambo77

    InsanelyMac Protégé

  • Members
  • Pip
  • 49 posts

Come si fa a capire se il proprio sistema possiede un dsdt?



#19
carbo178

carbo178

    InsanelyMac V.I.P.

  • Local Moderators
  • 6,315 posts
  • Gender:Male
  • Location:Dalle paludi della Pianura Padana

Come si fa a capire se il proprio sistema possiede un dsdt?

Tutti i sistemi hanno un bios, il dsdt è una tabella estratta dal bios, successivamente corretta e messa in una posizione dalla quale il bootloader può caricarla in avvio



#20
rambo77

rambo77

    InsanelyMac Protégé

  • Members
  • Pip
  • 49 posts

ma se lo estraggo x leggerlo si hanno problemi sul sistema operativo?







Also tagged with one or more of these keywords: DSDT;, Fix Errors


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