Old:ACPI e DSDT
Introduzione
ACPI (Advanced Configuration and Power Interface)
Il problema del supporto delle ACPI in linux risiede nella parziale compatibilità della tabella DSDT inclusa nel kernel. La DSTD (Differentiated System Description Table) è una tabella che contiene e fornisce un blocco di informazioni sul sistema a basso livello (batteria, luminosità LCD, pulsanti Fn, …). Purtroppo, molti fornitori di hardware non sono capaci di fornire le tabelle completamente funzionali secondo gli standart ACPI.
Aggiornamento del BIOS
Per cominciare è indispensabile aggiornare il BIOS con l’ultima versione disponibile, sperando che la nuova versione contenga una tabella DSDT compatible con il kernel di linux.
Installazione nel kernel del supposto ACPI
Per prima cosa è necessario compilare il kernel con il supporto ACPI. Le sezioni del kernel necessarie per la compilazione sono le seguenti:
ACPI (Advanced Configuration and Power Interface) Support ---> ACPI Support ---> <*> AC Adapter <*> Battery <*> Button <*> Processor
Strumenti per lavorare con le DSDT
Per potere leggere e compilare una DSDT è necessario scaricare il compilatore ASL della Intel da:
http://developer.intel.com/technology/iapc/acpi/downloads.htm
A dipendenza del metodo di integrazione delle nuove tabelle DSDT è possibile scegliere di inserirle:
DSDT da compilare staticamente con il kernel da: ftp://ftp.kernel.org/pub/linux/kernel/people/lenb/acpi/patches/release/ DSDT da inserire nell’initrd: http://gaugusch.at/kernel.shtml
Installare il compilatore ASL
Per installare il compilatore ASL eseguire i seguenti passi:
$: tar -zxvf acpica-unix-20050624.tar.gz $: cd acpica-unix-20050624/compiler $: make
Ottenere una DSDT
È possibile modificare la DSDT attualmente installata e correggere gli errori e i problemi rilevati, estraendola da:
$: cat /proc/acpi/dsdt > dsdt.dat
Ciò creerà un file dsdt.dat che conterrà la DSDT compilata. Ora è necessario decompilarla con il compilatore ASL appena installato:
$: iasl -d dsdt.dat
Verrà generato un file denominato dsdt.dsl, che conterrà la DSDT. Questo file può essere tranquillamente editato con un editor di testi e modificato a seconda delle esigenze e dei problemi riscontrati. Una volta corretti gli errori ricompilare il file dsdt.dsl.
$: iasl -tc dsdt.dsl
Verranno generati due file dalla compilazione:
- dsdt.hex
- DSDT.aml
ATTENZIONE È 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
Ci sono due modi per incorporare la nuova DSDT nel kernel. È possibile implementare i file dsdt.hex e DSDT.aml generati in modo statico o tramite initrd.
- Il primo modo è includere la DSDT staticamente nel kernel. Questo comporterà una ricompilazione del kernel al termine della procedura. Se usate questo metodo avete bisogno del file dsdt.hex.
- Il secondo modo è di passare la DSDT al kenel 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
È necessario installare una patch al kernel per far si che legga la nuova DSDT senza problemi. Una volta eseguita questa operazione copiate la nuova DSDT (.hex file) nella directory dei sorgenti del kernel.
Scaricare la patch a questo indirizzo:
ftp://ftp.kernel.org/pub/linux/kernel/people/lenb/acpi/patches/release
Patchate il kernel, spostandovi nella directory dove sono presenti i sorgenti:
$: cd /usr/src/linux-2.6.8 $: patch -p1 < /percorso_dove_avete_salvato_la_patch
Se non appaiono errori, significa che il kernel è stato patchato correttamente.
Copiare il file dsdt.hex rinominandolo in dsdt_table.h nella directory dei sorgenti del kernel:
$: cp dsdt.hex /usr/src/linux-2.8.6/include/acpi/dsdt_table.h
Infine ricompilare il kernel. Se non ci sono errori al prossimo avvio del PC il supporto ACPI è caricato correttamente senza alcun problema.
Installazione Metodo initrd
Questo metodo permette di modificare la DSDT senza dover ricompilare il kernel. Questo metodo risulta efficace nel caso dovessimo modificare diverse volte la DSDT.
Scaricare la patch a questo indirizzo:
http://gaugusch.at/kernel.shtml
Patchate il kernel, spostandovi nella directory dove sono presenti i sorgenti:
$: cd /usr/src/linux-2.6.8 $: patch -p1 < / percorso_dove_avete_salvato_la_patch
È necessario assicurarsi che i seguenti moduli (ramdisk and initrd ) siano compilati staticamente nel kernel:
Device Drivers ---> Block Devices ---> <*> RAM disk support [*] Initial RAM disk (initrd) support
Inoltre è necessario controllare che l’opzione Read DSDT from initrd è selezionata nel menu delle opzioni ACPI:
Power management options (ACPI, APM) ---> ACPI (Advanced Configuration and Power Interface) Support ---> [*] Read DSDT from initrd
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. È necessario preparare initrd:
$: echo "INITRDDSDT123DSDT123" >> /boot/initrd-kernel-2.8.6.img $: cat DSDT.aml >> /boot/initrd-kernel-2.6.8.img
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: Net deity