Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[HOWTO][ACPI][risolto] Aspire 1652 e le mani sulla DSDT
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Risorse italiane (documentazione e tools)
View previous topic :: View next topic  
Author Message
theRealMorpheu5
l33t
l33t


Joined: 26 Feb 2004
Posts: 841
Location: Vicenza, IT

PostPosted: Tue Mar 21, 2006 11:21 am    Post subject: [HOWTO][ACPI][risolto] Aspire 1652 e le mani sulla DSDT Reply with quote

Me lo sento che mi odierete per questo post che forse avrei dovuto appiccicare al vecchio ma siccome ho fatto qualche progresso e l'argomento non e' "come mai non si avvia?" bensì "perché la prima volta va e le altre no?", mi è sembrato più giusto aprire un altro topic.

Dunque, la questione è la seguente: visto che nessuna delle DSDT che potevo scaricare da acpi.sourceforge.net pareva funzionare, ho deciso di mettermi di lena e correggere la mia. Ho installato iasl, il compilatore Intel per questo genere di cose, e ho disassemblato e ricompilato la DSDT caricata di default. A manina e con l'aiuto di gùgl sono riucito a compilare correttamente il file, l'ho sostituito al default via initrd e ho riavviato. Magia, tutto ha preso a funzionare, riuscivo a leggere lo stato della batteria, finalmente! Allora ho pensato, bene, è la volta che lo pubblico, ci faccio un howto e contribuisco ad aumentare di qualche punto percentuale la felicità nel mondo.

No. Vado a vedere dove ho messo i sorgenti, cancello quello che non mi serve (perlopiù dump della DSDT Acer) e tengo il sorgente della mia DSDT custom. Faccio una prova per scrupolo, compilo e mi escono duecento e passa errori (ma a duecento il compilatore si ferma, pietosamente :) ) la cui maggior parte consta in roba tipo "Object is missing" o simili... errori che conosco già ma insomma, l'altra volta ha funzionato, mi dico. Riavvio la macchina con la DSDT Acer e riprovo a compilare la mia (chissà per quale motivo pensavo che avrebbe funzionato) e infatti non funziona.

Ora, siccome è ora di pranzo vado a mangiare, ma mi appresto a ripetere le correzioni che ho già fatto, magari questa volta in modo un po' meno incasinato. Se voi avete qualche esperienza in merito, ditemelo perché non so più da che parte sbattere la testa! o_O


Last edited by theRealMorpheu5 on Tue Mar 21, 2006 8:44 pm; edited 2 times in total
Back to top
View user's profile Send private message
Cazzantonio
Bodhisattva
Bodhisattva


Joined: 20 Mar 2004
Posts: 4477
Location: In giro

PostPosted: Tue Mar 21, 2006 11:33 am    Post subject: Reply with quote

Moved from Forum italiano (Italian) to Forum di discussione italiano.
_________________
Any man's death diminishes me, because I am involved in mankind, and therefore never send to know for whom the bell tolls; it tolls for thee
-John Donne
Back to top
View user's profile Send private message
theRealMorpheu5
l33t
l33t


Joined: 26 Feb 2004
Posts: 841
Location: Vicenza, IT

PostPosted: Tue Mar 21, 2006 12:58 pm    Post subject: Reply with quote

(noticina: capirei l'unione con l'altro topic ma perche' spostarlo nel forum di discussione? Mi sono perso qualche nuova linea guida?)

Ce l'ho fatta, parrebbe funzionare. Adesso, appena ho la sbatta necessaria, pubblico l'howto e la DSDT funzionante.
Back to top
View user's profile Send private message
theRealMorpheu5
l33t
l33t


Joined: 26 Feb 2004
Posts: 841
Location: Vicenza, IT

PostPosted: Tue Mar 21, 2006 8:44 pm    Post subject: Reply with quote

Come promesso, ecco l'HOW-TO.

Nota e disclaimer: la DSDT che io pubblico funziona sull'Aspire 1652WLMi con BIOS Phonix versione S3A33. Quello che prima non andava (la lettura dello stato della batteria) ora va epperò non mi assumo alcun genere di responsabilità su danni causati da manomissioni da parte di inesperti. Ok, poi parlo io che di DSDT e ACPI ho sentito parlare per la prima volta l'altro ieri, eh...

Cominciamo.

0. Fare il boot
Sembra una sciocchezza ma non lo è, mi sono accorto che per qualche strano motivo, usando l'APIC come gestore delle interruzioni, l'INT 0, ovvero il Real Time Clock, confligge con il sistema ACPI di questo portatile. Ora, avete due strade per fare il boot.

1. Se siete fortunati, vi basterà disabilitare la INT0 dall'APIC (suppongo che il controllo di tale IRQ venga passato al PIC o a qualche altro dispositivo, altrimenti la vedo dura per il sistema funzionare senza temporizzazioni) semplicemente passando al kernel il parametro noapictimer.

Con GRUB, editate il file /boot/grub/grub.conf (o dove ce l'avete voi)
Code:
kernel /wherever/linux-2.6.$cose <opzionivarie> noapictimer

e il sistema dovrebbe partire.

Con LiLO dovrebbe andare modificando il file di configurazione che forse è in /etc/lilo.conf ma non ci giurerei
Code:
append="<opzionivarie> noapictimer"

ma non sono sicuro perché è molto che non uso LiLO. Dovrebbe poi bastarvi reinstallare LiLO.
Code:
# lilo -v


Col vostro altro bootloader non so, ditemelo voi così posso aggiungerlo alla lista.

2. Se invece non siete fortunati vi tocca una strada che mi pare pericolosa non tanto per l'integrità del sistema, della macchina o dei vostri parenti quanto per le prestazioni del sistema. Vorrei che qualcuno mi smentisse ma si tratta di disabilitare il meccanismo di IRQ e passare all'antiquato sistema di polling. Comunque si tratta di aggiungere acpi=noirq irqpoll nei modi descritti poc'anzi.

1. I ferri del mestiere
Il perché la vostra DSDT (Differentiated System Description Table) non funziona come dovrebbe è perché è stata compilata con un compilatore fornito da Microsoft che, alla stregua di Windows, chiude non un occhio, non due occhi, perfino tre occhi su errori ed aberrazioni dei programmatori. Ovviamente due cose che chiudono gli occhi negli stessi punti funzionano abbastanza bene insieme, infatti non avete alcun genere di problemi in Windows, vero? Noticina polemica: la DSDT del mio fisso è perfetta ed è stata peraltro compilata con il compilatore Microsoft. Viene da pensare che questi errori siano introdotti di proposito nei laptop per rendere difficile la vita a Linux. Ok, ok, la smetto con i complottismi. Epperò...

Tanto per farla corta, Intel fornisce anch'essa un compilatore per il linguaggio usato da queste particolari tabelle e, guarda che coincidenza, è disponibile anche per linux. Emergerlo è molto semplice, il compilatore si chiama IASL.
Code:
# emerge iasl -av


2. Estrarre e disassemblare la DSDT del notebook
Facciamo finta che siete riusciti a fare il boot, ok? Dobbiamo passare alla fase emozionante della faccenda: smandruppare la DSDT. Per prima cosa dobbiamo localizzarla. Suppongo che per fare tutto ciò sia necessario essere root, sul mio portatile sono root di necessità virtù perché ho deciso di non completare l'installazione prima di essere riuscito almeno a far leggere la batteria a Linux, quindi non ho creato un utente. Diventiamo root, quindi. Se il sottosistema ACPI è relativamente attivo, un semplice
Code:
# ls /proc/acpi/dsdt

dovrebbe darvi conferma circa l'esistenza di tale file. Non ci resta che crearne un dump da qualche parte.
Code:
# cat /proc/acpi/dsdt > ~/default.aml
# cd

Dovreste ora essere in presenza del dump che ci interessa, non ci resta che disassemblarlo con
Code:
# iasl -d default.aml

che dovrebbe creare un file di nome default.dsl. Createne una copia su cui lavoreremo.
Code:
# cp default.dsl custom.dsl


3. Rattoppare il sorgente e ricompilarlo
Ho caricato nel mio sito i tre file salienti di tutto il procedimento. Attenzione, ancora una volta, questi li ho estratti dal mio notebook, fate attenzione, lavorate sui vostri seguendo il mio esempio. Se siete particolarmente temerari provate pure ad usare il mio già pronto e compilato ma non mi assumo responsabilità.

I tre file sono:


Ora, io non sono affatto un esperto di DSDT e DSL credevo fosse, al limite delle mie fantasie, un linguaggio a segni usato dai sub. Ho proceduto con un po' di buon senso, Google e questo sito che tratta di un modello diverso (il 1694WLMi) epperò simile. Il sito è http://djax.linuxbourg.ch/blog/?p=30 e si trova facilmente anche con Google.
Comunque, in teoria dovrebbe bastarvi guardare dentro al mio file dove ho messo in evidenza cosa facevo di volta in volta (i commenti li ho inseriti in stile C con un // a partire dalla prima colonna quindi sono abbastanza evidenti). Ripeto, dovrebbe anche bastarvi compilare il mio file ma... ok, l'avete capita.

Per vedere di volta in volta gli errori che spariscono, vi basta lanciare la compilazione sulla copia di lavoro.
Code:
# iasl custom.dsl


Una volta che vi sono spariti errori e warning, dovreste aver anche ottenuto un file chiamato DSDT.aml. Siamo quasi arrivati.

4. Rattoppare il kernel e cambiare la DSDT col metodo initrd
Esistono due modi per sostituire la DSDT, uno è integrarla nel kernel costringendovi a ripetere il procedimento ogni volta che cambiate kernel, l'altro è via initrd che al momento non è molto migliore perché necessita di una patch del kernel. Si potrebbe forse aprire un bugreport per includerla in genpatches (http://dev.gentoo.org/~dsd/genpatches/)? A me sembrerebbe un'idea intelligente.

Io vi descrivo qui il metodo via initrd perché è quello che ho usato e quello che mi sembra più pratico. Prendete la patch da http://gaugusch.at/kernel.shtml ed applicatela al vostro kernel. Fate riferimento a quel sito per ogni dettaglio, comunque la procedura che ho seguito io è stata questa.
Code:
# cd /usr/src/linux
# patch -p1 < /tmp/acpi-dsdt-initrd-patch-v0.x-....patch
# make menuconfig

Nel menu di configurazione del kernel dovete abilitare (ovviamente assumo che abbiate disabilitato APM e che abbiate tutto ciò che serve invece per l'ACPI, vero?)
Code:
Power Management options (ACPI, APM)  --->
   ACPI (Advanced Configuration and Power Interface) Support  --->
      [*] Read custom DSDT from initrd

Poi fate il classico
Code:
# make && make modules_install
# mount /boot
# cp arch/i386/boot/bzImage /boot/linux-2.6.$cose

Torniamo quindi al nostro file DSDT.aml. Io non uso un initrd quindi mi è stato sufficiente copiarlo in /boot e configurare GRUB in modo da caricarlo. Comunque voi potreste voler usare un initrd precedente, in questo caso dovete aggiungergli una firma che renda riconoscibile la posizione della vostra DSDT.
Code:
# echo -n "INITRDDSDT123DSDT123" >> /boot/initrd # supponendo che il vostro attuale initrd sia proprio /boot/initrd
# cat DSDT.aml >> /boot/initrd

In caso non usaste un initrd vi sarà sufficiente copiare la vostra DSDT in /boot.
Code:
# cd
# cp DSDT.aml /boot

Successivamente dovrete configurare GRUB o LiLO o chi per loro per caricarla. Con grub vi sarà sufficiente aggiungere
Code:
initrd /wherever/DSDT.aml

a /boot/grub/grub.conf nella sezione relativa al kernel Linux mentre con LiLO inserirete
Code:
initrd = /wherever/DSDT.aml

e poi reinstallerete LiLO.
Code:
# lilo -v

A quanto pare siamo pronti per riavviare. Le opzioni da passare al kernel sono le stesse che vi ho citato al principio. Se tutto va bene, dovreste almeno riuscire a vedere lo stato della batteria (ricordatevi di inserirla, mica come il sottoscritto, eh... :roll: )

Code:
# reboot


Ora godetevela. Mi raccomando, aspetto feedback. Quando sarò riuscito a far funzionare tutto, magari, pubblicherò un mega pippone nel mio sito con tutto spiegato per bene.

E ora buonanotte, ché gli esami mica aspettano me... -.-


Last edited by theRealMorpheu5 on Fri Mar 24, 2006 10:21 pm; edited 1 time in total
Back to top
View user's profile Send private message
gutter
Moderator
Moderator


Joined: 13 Mar 2004
Posts: 7160
Location: Aarau, Aargau, Switzerland

PostPosted: Wed Mar 22, 2006 10:31 am    Post subject: Reply with quote

Moved from Forum di discussione italiano to Risorse italiane (documentazione e tools).
_________________
Registered as User #281564 and Machines #163761
Back to top
View user's profile Send private message
!equilibrium
Bodhisattva
Bodhisattva


Joined: 06 Jun 2004
Posts: 2109
Location: MI/BG/LC

PostPosted: Thu Mar 23, 2006 11:16 am    Post subject: Reply with quote

ottima guida, mi è stata di aiuto per fixare il mio DSDT.

p.s.: hai scritto:

Code:
cat /prov/acpi/dsdt > ~/default.aml


credo debba essere:

Code:
cat /proc/acpi/dsdt > ~/default.aml

_________________
Arch Tester for Gentoo/FreeBSD
Equilibrium's Universe

all my contents are released under the Creative Commons Licence by-nc-nd 2.5
Back to top
View user's profile Send private message
theRealMorpheu5
l33t
l33t


Joined: 26 Feb 2004
Posts: 841
Location: Vicenza, IT

PostPosted: Fri Mar 24, 2006 10:22 pm    Post subject: Reply with quote

Grazie, corretto :)
Back to top
View user's profile Send private message
GiRa
l33t
l33t


Joined: 07 Apr 2005
Posts: 717

PostPosted: Sat Mar 25, 2006 10:01 am    Post subject: Reply with quote

Linka nel primo post l'how to oppure copialo nel primo post :D
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Risorse italiane (documentazione e tools) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum