1
contributo
mNessun oggetto della modifica |
|||
Riga 1: | Riga 1: | ||
=Introduzione= | ==Introduzione== | ||
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 DSTD ('''Differentiated System Description Table'''). | |||
Il problema principale del supporto ad ACPI in linux risiede nella 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 aggiornare il BIOS con l�ultima versione disponibile, sperando che la nuova versione contenga una tabella DSDT con meno errori della precedente :P. | |||
==Installazione nel kernel del supporto ACPI== | |||
Per poter utilizzare ACPI � necessario disporre di un kernel in cui sia stato abilitato il supporto ACPI. Praticamente tutte le distribuzioni forniscono kernel precompilati con il supporto ACPI attivato. Nel caso, per�, vi trovaste a dover (o voler) compilare autonomamente un kernel con il supporto ACPI, le voci necessarie sono le seguenti: | |||
<pre>ACPI (Advanced Configuration and Power Interface) Support ---> | |||
ACPI Support ---> | |||
<*> AC Adapter | |||
<*> Battery | |||
<*> Button | |||
<*> Processor</pre> | |||
==Strumenti per lavorare con le DSDT== | |||
Per poter leggere e compilare una DSDT � necessario il compilatore ASL di Intel, che in debian esiste gi� precompilato a partire da etch (attuale testing), altrimenti � liberamente disponibile per il download all'indirizzo: | |||
<pre>http://developer.intel.com/technology/iapc/acpi/downloads.htm</pre> | |||
Per utilizzare la DSDT corretta sono disponibili due metodi: il primo prevede l'applicazione di una [ftp://ftp.kernel.org/pub/linux/kernel/people/lenb/acpi/patches/release/ patch per il kernel] e l'inserimento della nuova DSDT direttamente nel kernel, che quindi sar� da ricompilare ogni volta che si fanno cambiamenti alla DSDT. | |||
Il secondo inserisce la nuova DSDT all'interno dell'initrd, e quindi non necessita la ricompilazione del kernel, a patto che nel vostro kernel sia stata inclusa una [http://gaugusch.at/kernel.shtml patch apposita]. Al momento la patch menzionata � inclusa nei kernel delle maggiori distribuzioni (sicuramente in Debian, Ubuntu, Suse, e Mandriva). | |||
== | ===Installare il compilatore ASL=== | ||
Uno dei motivi per cui le DSDT sono spesso difettose � che vengono compilate con il compilatore fornito da Microsoft, invece che con quello fornito da Intel. Curiosamente i sistemi Microsoft riescono ad evitare gli errori commessi dal compilatore della stessa societ�, mentre, come si pu� immaginare, la stessa cosa non succede per Linux. | |||
Per installare il compilatore Intel sufficiente avere nel <tt>sources.list</tt> un repository per etch, e impartire, da root, il comando | |||
<pre> | <pre> | ||
# aptitude install iasl | |||
</pre> | </pre> | ||
Se invece avete scaricato i sorgenti, per avere il compilatore ASL funzionante � necessario compilarlo: | |||
<pre>$ tar -zxvf acpica-unix-20050624.tar.gz | |||
$ cd acpica-unix-20050624/compiler | |||
$ make</pre> | |||
===Ottenere una DSDT=== | |||
possibile ottenere la DSDT attualmente installata per poi correggere gli eventuali errori e problemi, copiandola da un file reso appositamente disponibile dal filesystem virtuale /proc: | |||
<pre>$ cat /proc/acpi/dsdt > dsdt.dat</pre> | |||
<pre> | Ci� creer� un file '''dsdt.dat''' che contiene la DSDT compilata. | ||
Per poterne leggere il contenuto � necessario decompilarla con il compilatore ASL appena installato: | |||
</pre> | <pre>$ iasl -d dsdt.dat</pre> | ||
Verr� generato un file di testo denominato '''dsdt.dsl''', che contiene la DSDT. Questo file pu� essere modificato 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 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. | |||
Nel codice di alcune DSDT � stato trovato un controllo (if .. then) sulla lunghezza del nome del S.O. soprastante (17 lettere, proprio come "Microsoft Windows") come requisito per l'attivazione di alcune funzioni dell'ACPI. | |||
Una volta corretti gli errori ricompilare il file '''dsdt.dsl'''. | |||
<pre>$ iasl -tc dsdt.dsl</pre> | |||
Verranno generati due file dalla compilazione: | |||
*: dsdt.hex | |||
*: DSDT.aml | |||
{{ Warningbox | � possibile scaricare una custom DSDT gi� pronta e corretta da internet per molti portatili in commercio: http://acpi.sourceforge.net/dsdt/tables }} | |||
==Aggiornare il Kernel== | |||
Come abbiamo gi� detto, � possibile inserire la tabella DSDT generata in modo statico nel kernel, oppure renderla disponibili tramite initrd. | |||
*:Il primo metodo prevede di includere la DSDT nel kernel. Questo comporta la ricompilazione del kernel al termine della procedura. Se usate questo metodo avete bisogno del file '''dsdt.hex'''. | |||
*:Il secondo metodo prevede di passare la DSDT al kernel durante il caricamento nella fase di boot tramite initrd. Se usate questo metodo avete bisogno del file '''DSDT.aml'''. | |||
Il metodo initrd � probabilmente preferibile, particolarmente se dovete fare diversi cambiamenti alla vostra DSDT, perch� non richiede la ricompilazione del kernel per ogni nuova DSDT generata. | |||
== | ===Installazione Metodo statico=== | ||
per | � necessario applicare una patch al kernel per far s� che sia in grado di leggere la nuova DSDT. | ||
Per fare questo ci spostiamo nella directory dove sono presenti i sorgenti: | |||
<pre> | <pre> | ||
/ | $ cd /usr/src/linux-2.6.8 | ||
$ patch -p1 < /percorso_dove_avete_salvato_la_patch | |||
</pre> | </pre> | ||
Se non appaiono errori, significa che la patch � stata applicata correttamente. | |||
Copiamo il file dsdt.hex, rinominandolo in dsdt_table.h, nella directory dei sorgenti del kernel: | |||
<pre> | <pre> | ||
$ cp dsdt.hex /usr/src/linux-2.8.6/include/acpi/dsdt_table.h | |||
</pre> | </pre> | ||
Infine ricompiliamo il kernel. Se non ci sono errori al prossimo avvio del PC il supporto ACPI � caricato correttamente senza alcun problema. | |||
===Installazione Metodo initrd=== | |||
Se usate un kernel standard Debian non � necessario ricompilare il kernel: � sufficiente posizionare la tabella DSDT nel posto giusto e ricreare l'initrd o l'initramfs. | |||
Per fare questo dovete prima verificare se il vostro kernel usa l'initrd o l'initramfs: i kernel Debian standard usano l'initramfs a partire dalla versione 2.6.14 compresa. | |||
Se usate l'initrd (da root): | |||
<pre> | <pre> | ||
# cp dsdt.asl /etc/mkinitrd/DSDT | |||
# mkinitrd -o initrd-<versione> <versione> | |||
</pre> | </pre> | ||
in cui <tt><versione</tt> � il nome della directory che contiene i moduli, e che trovate in <tt>/lib/modules/</tt>. | |||
Se usate l'initramfs (sempre da root): | |||
<pre> | <pre> | ||
# cp dsdt.asl /etc/mkinitrd/DSDT.asl | |||
# mkinitrd -o initrd-<versione> <versione> | |||
</pre> | </pre> | ||
con le stesse avvertenze di prima. | |||
Se il vostro kernel non comprende la patch che gli permette di leggere la DSDT nell'initrd, dovete ricompilarlo. Prima per� applicate la patch, spostandovi nella directory dove sono presenti i sorgenti: | |||
<pre>$ cd /usr/src/linux-2.6.8 | |||
$ patch -p1 < / percorso_dove_avete_salvato_la_patch</pre> | |||
Al momento in cui si scrive, se usate l'initramfs vi serve anche una seconda patch che trovate allo stesso indirizzo della prima (in futuro verranno probabilmente unificate). | |||
Prima di compilare necessario assicurarsi che i seguenti moduli (ramdisk and initrd ) siano compilati staticamente nel kernel: | |||
<pre> | <pre> | ||
Device Drivers ---> | |||
Block Devices ---> | |||
<*> RAM disk support | |||
[*] Initial RAM disk (initrd) support | |||
</pre> | </pre> | ||
Inoltre � necessario controllare che l�opzione '''Read DSDT from initrd''' sia selezionata nel menu delle opzioni ACPI: | |||
<pre> | |||
Power management options (ACPI, APM) ---> | |||
ACPI (Advanced Configuration and Power Interface) Support ---> | |||
[*] Read DSDT from initrd | |||
</pre> | |||
Se queste opzioni non sono abilitate, abilitarle e ricompilare il kernel. Se sono gi� abilitate non � necessario ricompilare il kernel ;-). | |||
Ora il kernel � pronto ad accettare la DSDT con initrd. | |||
Se non avete a disposizione i tool mkinitrd e/o mkinitramfs che Debian mette a disposizione � necessario modificare l'initrd che avete, ma prima di farlo � fortemente consigliato di farne una copia di backup: | |||
<pre> | |||
# cp /boot/initrd-kernel-2.6.8.img /boot/initrd-kernel-2.6.8.img.bak | |||
# echo "INITRDDSDT123DSDT123" >> /boot/initrd-kernel-2.6.8.img | |||
# cat DSDT.aml >> /boot/initrd-kernel-2.6.8.img | |||
</pre> | |||
Riavviare e controllare se il supporto ACPI funziona. Ricordarsi di aggiornare i bootloader! | |||
= | ==Siti ufficiali dei progetti== | ||
* http://acpi.sourceforge.net | |||
* http://www.acpi.info/ | |||
---- | |||
Autore: [[Utente:Net deity|Net deity]] | |||
Rivisto e corretto: [[Utente:Tindal|Tindal]] 17:37, Gen 27, 2006 (EST) | |||
contributo