|
|
Riga 1: |
Riga 1: |
| ==Introduzione==
| | Spesso abbiamo la necessit� di installare la nuova versione di un pacchetto di cui proprio non possiamo fare a meno, che non � disponibile per il rilascio di Debian che abbiamo installato. |
|
| |
|
| 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 caso pi� frequente � probabilmente quello di un' installazione di Sarge con la necessit� di installare anche pacchetti presenti solo in Unstable o in Experimental, oppure di voler usare un repository con pacchetti particolari, ma compilati per una release di Debian diversa dalla nostra. |
|
| |
|
| 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.
| | APT � nostro fido alleato anche in questi frangenti, permettendoci di utilizzare fonti per pacchetti di releases diverse (e soddisfarne le dipendenze) senza costringerci ad un upgrade dell' intera distribuzione e senza dover impazzire per risolvere conflitti e incosistenze. |
|
| |
|
| 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.
| | In questo how-to mostrer� come utilizzare pacchetti Debian provenienti da Sarge, Unstable, Experimental, Marillat (multimedia/video) e Rarewares.org (multimedia/audio), ma le istruzioni sono facilmente riportabili anche ad altre situazioni (unstable + experimental, woody + sarge, woody + unstable, woody + sarge + sid, ecc...). |
|
| |
|
| ==Aggiornamento del BIOS==
| | Assicuriamoci di essere l' utente root e procediamo. |
| 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 prima cosa editiamo il file '''/etc/apt/sources.list''' ed inseriamo gli archivi dei pacchetti Debian che utilizzeremo: |
| 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> |
| | | ### Debian Ufficiale -- Sarge |
| <pre>ACPI (Advanced Configuration and Power Interface) Support ---> | | deb http://ftp2.it.debian.org/debian/ testing main non-free contrib |
| ACPI Support --->
| |
| <*> AC Adapter
| |
| <*> Battery
| |
| <*> Button
| |
| <*> Processor</pre>
| |
|
| |
|
| ==Strumenti per lavorare con le DSDT==
| | ### Debian Ufficiale -- Sarge Sicurezza |
| 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:
| | deb http://security.debian.org/ testing/updates main contrib non-free |
| <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.
| | ### Debian Ufficiale -- Sid |
| | deb http://ftp2.it.debian.org/debian/ unstable main non-free contrib |
|
| |
|
| 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).
| | ### Debian Ufficiale -- Experimental |
| | deb http://ftp.debian.org/debian/ ../project/experimental main |
|
| |
|
| ===Installare il compilatore ASL===
| | ### Multimedia -- Audio -- Rarewares |
| 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.
| | deb http://www.rarewares.org/debian/packages/unstable ./ |
|
| |
|
| Per installare il compilatore Intel � sufficiente avere nel <tt>sources.list</tt> un repository per etch, e impartire, da root, il comando
| | ### Multimedia -- Video -- Marillat |
| <pre>
| | deb ftp://ftp.nerim.net/debian-marillat/ testing main |
| # aptitude install iasl
| | deb ftp://ftp.nerim.net/debian-marillat/ unstable main |
| </pre> | | </pre> |
|
| |
|
| Se invece avete scaricato i sorgenti, per avere il compilatore ASL funzionante � necessario compilarlo:
| | A questo punto dobbiamo preparare due files normalmente non presenti sulla nostra debianbox: si tratta dei file '''preferences''' e '''apt.conf'''. |
| <pre>$ tar -zxvf acpica-unix-20050624.tar.gz
| | Questi due file istruiranno APT su come gestire le dipendenze dei pacchetti, informandolo su come comportarsi in caso di conflitti e altri problemi. |
| $ 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>
| |
| | |
| 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>$ 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.
| | Creiamo il file preferences: |
| | |
| 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===
| |
| � 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
| | # touch /etc/apt/preferences |
| $ patch -p1 < /percorso_dove_avete_salvato_la_patch
| |
| </pre> | | </pre> |
| | | editiamolo col nostro editor di fiducia e inseriamo queste direttive: |
| 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
| | Package: * |
| </pre>
| | Pin: release o=xmixahlx |
| | Pin-Priority: 950 |
|
| |
|
| Infine ricompiliamo il kernel. Se non ci sono errori al prossimo avvio del PC il supporto ACPI � caricato correttamente senza alcun problema.
| | Package: * |
| | Pin: release o=Christian Marillat |
| | Pin-Priority: 900 |
|
| |
|
| ===Installazione Metodo initrd===
| | Package: * |
| 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.
| | Pin: release a=testing |
| 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.
| | Pin-Priority: 850 |
|
| |
|
| Se usate l'initrd (da root):
| | Package: * |
| <pre>
| | Pin: release a=unstable |
| # cp dsdt.asl /etc/mkinitrd/DSDT
| | Pin-Priority: 800 |
| # mkinitrd -o initrd-<versione> <versione>
| |
| </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):
| | Package: * |
| <pre>
| | Pin: release a=experimental |
| # cp dsdt.asl /etc/mkinitrd/DSDT.asl
| | Pin-Priority: 750 |
| # 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).
| | Ora creiamo il file apt-conf |
|
| |
|
| Prima di compilare necessario assicurarsi che i seguenti moduli (ramdisk and initrd ) siano compilati staticamente nel kernel:
| |
| <pre> | | <pre> |
| Device Drivers --->
| | # touch /etc/apt/apt.conf |
| 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:
| | editiamolo inserendo quanto segue: |
| | |
| <pre> | | <pre> |
| Power management options (ACPI, APM) --->
| | APT::Default-Release "testing"; |
| ACPI (Advanced Configuration and Power Interface) Support --->
| | APT::Cache-Limit 10000000; |
| [*] Read DSDT from initrd
| | Apt::Get::Purge; |
| | APT::Clean-Installed; |
| | APT::Get::Fix-Broken; |
| | APT::Get::Fix-Missing; |
| | APT::Get::Show-Upgraded "true"; |
| </pre> | | </pre> |
|
| |
|
| Se queste opzioni non sono abilitate, abilitarle e ricompilare il kernel. Se sono gi� abilitate non � necessario ricompilare il kernel ;-).
| | Ora non ci resta che aggiungere i repository necessari al file '''/etc/apt/sources.list''' assicurandoci di avere un repository per Sarge ed uno per Sid. |
| | |
| 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>
| |
|
| |
|
| Nel caso in cui si stia usando un kernel privo di initrd o initramfs, � ugualmente possibile passare al kernel la nuova tabella DSDT semplicemente specificando come initrd la tabella stessa (il file .aml), tramite il bootloader.
| | Facciamo l' update del database dei pacchetti: |
|
| |
|
| ==Debug==
| |
| Riavviare e controllare se il supporto ACPI funziona. ;-)
| |
| Per leggere in dmesg i messaggi relativi al caricamento della DSDT necessario che nel kernel sia abilitata l'opzione CONFIG_ACPI_DEBUG, cosa che potete controllare con un veloce grep:
| |
| <pre> | | <pre> |
| $ grep CONFIG_ACPI_DEBUG /boot/config-2.6.8-ecc.
| | # apt-get update |
| </pre> | | </pre> |
|
| |
|
| Ricordarsi di aggiornare il bootloader!
| | D'ora in avanti avremo due possibilit� per installare un nuovo pacchetto: il metodo che usiamo di solito e cio� |
| | <pre># apt-get install nome_pacchetto</pre> |
| | che utilizzer� pacchetti proveniente dalla versione impostata come '''Default-Release''' in '''apt.conf''', oppure il comando |
| | <pre>apt-get install -t versione_di_debian nome_pacchetto</pre> |
| | che provveder� a installare il pacchetto da noi richiesto per la versione specificata (versione_debian), risolvendo automaticamente le dipendenze. |
|
| |
|
| ==Siti ufficiali dei progetti==
| | Happy debian! |
| * 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)
| | Autore: [[User:Keltik|Keltik]] |