Old:ACPI e DSDT

Versione del 24 gen 2006 alle 12:23 di Net deity (discussione | contributi)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

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