Old:Compilazione Kernel 2.6.11 con Bootsplash: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
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, �) siano contenute nella DSTD ('''Differentiated System Description Table''').  
Questo how-to spiegher� il procedimento da seguire per compilare (alla debian-way) un kernel 2.6.11 con la patch bootsplash.


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.
== Software richiesto ==
In ambiente Debian, ci viene in aiuto il tool '''[[APT]]''' (Advanced Package Tool), che ci fornir� tutto (o quasi) ci� di cui abbiamo bisogno.
Anzitutto, editiamo il nostro '''/etc/apt/sources.list''' aggiungendo il [[I_repository_ed_il_loro_utilizzo | repository]] bootsplash:


==Aggiornamento del BIOS==
<pre>deb http://www.bootsplash.de/files/debian/ unstable main</pre>
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.


==Installazione nel kernel del supporto ACPI==
Abbiamo poi bisogno delle librerie e/o programmi che utilizzeremo per la compilazione vera e propria:
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 --->
<pre>
    ACPI Support --->
PACCHETTO          VERSIONE        COMANDO
        <*> AC Adapter
binutils            2.12            ld -v
        <*> Battery
e2fsprogs          1.29            tune2fs
        <*> Button
gcc                2.95.3          gcc --version
        <*> Processor</pre>
make                3.78            make --version
module-init-tools  0.9.10          depmod -V
procps              3.1.13          ps --version
util-linux          2.10o          fdformat --version
kernel-package
initrd-tools
libncurses-dev
</pre>
 
Ora possiamo procedere al download dei sorgenti del kernel:
 
<pre># apt-get install kernel-source-2.6.11</pre>
 
Con questo comando, [[APT]] scaricher� un archivio .tar.bz2 in '''/usr/src/''', contenente proprio il sorgente del [[kernel]].
 
&Egrave; inoltre necessario scaricare una patch apposita da applicare al kernel:
 
[http://www.bootsplash.de/files/bootsplash-3.1.4-2.6.11.diff Patch per Kernel 2.6.11]
 
In caso si tenti questa procedura con altri kernel, &egrave; possibile scaricare la patch relativa, basta cercare in http://www.bootsplash.de/files/.
 
 
== Compilazione ==
 
=== Scompattazione e Patch del Sorgente ===
 
Bene, prima di procedere con la compilazione, &egrave; necessario applicare la patch bootsplash (vedi sopra) al nostro kernel.
 
Prima di tutto, scompattiamo l'archivio contenente i sorgenti.


==Strumenti per lavorare con le DSDT==
Per fare ci�, spostiamoci in '''/usr/src/''', e procediamo con la scompattazione':
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 patch al kernel e l'inserimento della nuova DSDT direttamente nel kernel successivamente compilato; il secondo non necessita la ricompilazione del kernel, ma inserisce la nuova DSDT all'interno dell'initrd.
<pre>
<pre>DSDT da compilare staticamente con il kernel da:
# cd /usr/src/
ftp://ftp.kernel.org/pub/linux/kernel/people/lenb/acpi/patches/release/
# tar -jxvf kernel-source-2.6.11.tar.bz2
</pre>


DSDT da inserire nell�initrd:
A questo punto verr&agrave; creata una nuova directory, '''/usr/src/kernel-source-2.6.11/'''.
http://gaugusch.at/kernel.shtml</pre>


===Installare il compilatore ASL===
Spostiamoci dunque nella nuova directory e applichiamo la patch che abbiamo scaricato:
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
# cd /usr/src/kernel-source-2.6.11
# patch -p1 < /usr/src/bootsplash-3.1.4-sp3-2.6.8.1.diff
</pre>
</pre>


Se invece avete scaricato i sorgenti, per avere il compilatore ASL funzionante � necessario compilarlo:
Non dovrebbe essere segnalato alcun errore nella patch a questo punto. In caso contrario, rimuoviamo la directory dei sorgenti e ripetiamo la procedura dall'inizio. &Egrave; importante applicare la patch bootsplash prima di qualunque altra patch, cio&egrave; sul kernel debian originale preso da APT.
<pre>$ tar -zxvf acpica-unix-20050624.tar.gz
 
$ cd acpica-unix-20050624/compiler
A questo punto, possiamo procedere con la compilazione del kernel.
$ make</pre>


===Ottenere una DSDT===
=== Configurazione del Kernel ===
� 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.
Anzitutto, configuriamo il kernel stesso:
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.
<pre># make menuconfig</pre>


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.
Vediamo cosa selezionare, brevemente.


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.
Selezioniamo il nostro modello di processore:
<pre>
| Processor type and features
|--- Processor family (Athlon/Duron/K7)
</pre>


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'''.
Attiviamo qualche altra opzione per il boot:
       
<pre>$ iasl -tc dsdt.dsl</pre>


Verranno generati due file dalla compilazione:
<pre>
*:dsdt.hex
| Device Drivers
*:DSDT.aml
|--- Block devices
|------ <*> Loopback device support
|------ <*> RAM disk support
|------ (8192) Default RAM disk size (kbytes)
|------ [*]  Initial RAM disk (initrd) support
</pre>


{{ 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==
Attiviamo le opzioni necessarie a mostrare la schermata di boot:
Come abbiamo gi� detto, � possibile inserire i file '''dsdt.hex''' e '''DSDT.aml''' generati in modo statico nel kernel, oppure renderli disponibili tramite initrd.


*:Il primo metodo prevede di includere la DSDT nel kernel. Questo comporter� una ricompilazione del kernel al termine della procedura. Se usate questo metodo avete bisogno del file '''dsdt.hex'''.
<pre>
| Device Drivers
|--- Graphics support
|------ <M>  VGA 16-color graphics support
|------ <*>  VESA VGA graphics support
|------ Console display driver support
|--------- [*] VGA text console
|--------- [*]  Video mode selection support
|--------- <*> Framebuffer Console support
|------ Bootsplash configuration
|--------- [*] Bootup splash screen
</pre>


*: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'''.
Ricordiamoci ovviamente di indicare, tra i [http://it.wikipedia.org/wiki/Filesystem Filesystem], quelli che utilizziamo sulla nostra macchina in aggiunta a quello ''ROM'', che viene utilizzato per le immagini initrd, le schede che abbiamo, etc...


Se stiamo ricompilando un kernel ovviamente sono cose che non si dovrebbero dimenticare!!!


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.
=== Compilazione con make-kpkg (debian-way) ===


===Installazione Metodo statico===
Ora che il kernel � compilato, possiamo procedere alla compilazione (debian-way):
� 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:
<pre>
<pre>ftp://ftp.kernel.org/pub/linux/kernel/people/lenb/acpi/patches/release</pre>
# make-kpkg clean
# make-kpkg --initrd --append-to-version -splash binary
</pre>


Patchate il kernel, spostandovi nella directory dove sono presenti i sorgenti:
Prendiamo in considerazione l'ultimo comando:
<pre>$ cd /usr/src/linux-2.6.8
$ patch -p1 < /percorso_dove_avete_salvato_la_patch</pre>


Se non appaiono errori, significa che la patch � stata applicata correttamente.
'''make-kpkg''' � uno strumento che ci aiuta a creare kernel pacchettizzati in file binari, con estensione *.deb.
: --initrd - Crea il RAMDisk iniziale per mostrare l'immagine al boot;
: --append-to-version -splash - Aggiunge la stringa '-splash' alla versione del kernel che stiamo creando. In questo modo, se stiamo gi� utilizzando un kernel 2.6.11, il nostro nuovo kernel sar� il '2.6.11-splash', cos� in caso di problemi al boot potremo sempre tornare al kernel ''funzionante''.
: binary - Questo argomento specifica il ''target'' della nostra compilazione:


Copiare 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>
binary          specifica che vogliamo compilare kernel_image, kernel_doc, kernel_headers e kernel_source
kernel_source    questo target produce un pacchetto .deb contenente i sorgenti del nuovo kernel che stiamo compilando
kernel_headers  questo target produce un pacchetto .deb contenente gli header inclusi nel nuovo kernel
kernel_doc      questo target produce un pacchetto .deb contenente la documentazione relativa al nuovo kernel
kernel_image    questo target produce un pacchetto .deb contenente il kernel in formato binario, con tutti i moduli specificati nella configurazione
</pre>


Infine ricompilare il kernel. Se non ci sono errori al prossimo avvio del PC il supporto ACPI � caricato correttamente senza alcun problema.
Una volta terminata la compilazione, troveremo in /usr/src un pacchetto il cui nome sar&agrave; qualcosa di molto simile a '''kernel-image-2.6.11-splash_10.00.Custom_i386.deb'''.


===Installazione Metodo initrd===
A questo punto possiamo installare il nostro nuovo kernel!
Questo metodo permette di utilizzare la nuova DSDT senza dover ricompilare il kernel. Questo metodo risulta efficace nel caso dovessimo modificare diverse volte la DSDT.


Scaricare la patch a questo indirizzo:
<pre>
<pre>http://gaugusch.at/kernel.shtml</pre>
# dpkg -i /usr/src/kernel-image-2.6.11-splash_10.00.Custom_i386.deb
</pre>


Patchate il kernel, spostandovi nella directory dove sono presenti i sorgenti:
Controlliamo la presenza del RAMDisk iniziale. Per fare ci&ograve; eseguiamo questo comando:
<pre>$ cd /usr/src/linux-2.6.8
$ patch -p1 < / percorso_dove_avete_salvato_la_patch</pre>


� necessario assicurarsi che i seguenti moduli (ramdisk and initrd ) siano compilati staticamente nel kernel:
<pre>
<pre>Device Drivers --->  
# ls /boot/initrd.img-2.6.11*
    Block Devices --->
</pre>
        <*> RAM disk support
        [*] Initial RAM disk (initrd) support</pre>


Inoltre � necessario controllare che l�opzione '''Read DSDT from initrd''' sia selezionata nel menu delle opzioni ACPI:
Se il comando restituisce un errore, creiamo il nostro RAMDisk:
<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. � necessario preparare initrd:
<pre>
<pre>$ echo "INITRDDSDT123DSDT123" >> /boot/initrd-kernel-2.8.6.img
# cd /boot/
$: cat DSDT.aml >> /boot/initrd-kernel-2.6.8.img</pre>
# mkinitrd -o /boot/initrd.img-2.6.11-splash 2.6.11-splash
</pre>
 
== Installazione di Bootsplash ==
 
In questa fase ci viene in aiuto quel repository che abbiamo aggiunto all'inizio al nostro '''/etc/apt/sources.list'''.
 
Aggiorniamo i nostri archivi APT ed installiamo Bootsplash:
 
<pre>
# apt-get update
# apt-get install bootsplash sysv-rc-bootsplash bootsplash-theme-tuxinfo-debian
</pre>
 
Attenzione! L'ultimo pacchetto (bootsplash-theme-tuxinfo-debian) &egrave; il '''tema che vedremo al boot'''. Per vedere quali temi sono disponibili, diamo il seguente comando:
 
<pre>
# apt-cache search bootsplash-theme
</pre>
 
(Suggerimento: conviene inviare l'output in pipe a ''more'' o ''less'', dato che esistono numerosi temi!)
 
Scegliamo in questo caso il tema "tuxinfo-debian".
 
Durante l'installazione comparir&agrave; una finestra per la configurazione, che ci chieder&agrave; quale immagine utilizzare per il nostro boot.
 
Selezioniamo l'immagine creata in precedenza, cio&egrave; '''initrd.img-2.6.11-splash'''.
 
=== Configurazione del Bootloader ===
 
A questo punto siamo pronti per modificare il nostro bootloader. Facciamo un esempio per i due bootloader pi&ugrave; comuni: GRUB e LiLO:
 
Configurazione per GRUB ('''/boot/grub/menu.lst''')
<pre>
title          Debian GNU/Linux, kernel 2.6.11-splash
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.11-splash root=/dev/hda1 ro bootkbd=it
initrd          /boot/initrd.img-2.6.11-splash
savedefault
boot
</pre>
 
Configurazione per LiLO ('''/etc/lilo.conf''')
<pre>
image=/boot/vmlinuz-2.6.11-splash
        label="2.6.11-splash"
        initrd=/boot/initrd.img-2.6.11-splash
        append="splash=silent"
</pre>
 
Attenzione! Se usate LiLO come bootloader, &egrave; necessario aggiornare la sua configurazione con il seguente comando (dopo la modifica di /etc/lilo.conf):
<pre>
# lilo
</pre>
 
 
== Conclusioni ==
 
Bene, adesso siamo in grado di riavviare la nostra macchina e gustarci un bel bootsplash!
Nel caso vogliate cambiare tema, dopo aver installato il relativo pacchetto '''bootsplash-theme-*''', basta fare:
 
<pre>
# dpkg-reconfigure bootsplash
</pre>


Riavviare e controllare se il supporto ACPI funziona. Ricordarsi di aggiornare i bootloader!
Bisogna poi selezionare il nuovo tema che abbiamo installato, di nuovo initrd.img-2.6.11-splash come initrd, ricontrolliamo LiLO / GRUB e riavviamo...


==Siti ufficiali dei progetti==
Happy Debian!
* http://acpi.sourceforge.net
* http://www.acpi.info/


----
----
Autore: [[Utente:Net deity|Net deity]]
[[User:Hanska|Hanska]] 20:32, 14 May 2005 (CEST)
6

contributi

Menu di navigazione