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

Riga 1: Riga 1:
== Introduzione ==
==Introduzione==


Questo how-to spiegher� il procedimento da seguire per compilare (alla debian-way) un kernel 2.6.11 con la patch bootsplash.
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''').  


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.


== Software richiesto ==
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 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:


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


Abbiamo poi bisogno delle librerie e/o programmi che utilizzeremo per la compilazione vera e propria:
==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>
<pre>ACPI (Advanced Configuration and Power Interface) Support --->
PACCHETTO          VERSIONE        COMANDO
    ACPI Support --->
binutils            2.12            ld -v
        <*> AC Adapter
e2fsprogs          1.29            tune2fs
        <*> Battery
gcc                2.95.3          gcc --version
        <*> Button
make                3.78            make --version
        <*> Processor</pre>
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.


Per fare ci�, spostiamoci in '''/usr/src/''', e procediamo con la scompattazione':
==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>


<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.
# cd /usr/src/
<pre>DSDT da compilare staticamente con il kernel da:
# tar -jxvf kernel-source-2.6.11.tar.bz2
ftp://ftp.kernel.org/pub/linux/kernel/people/lenb/acpi/patches/release/
</pre>


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


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


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.
Se invece avete scaricato i sorgenti, per avere il compilatore ASL funzionante � necessario compilarlo:
 
<pre>$ tar -zxvf acpica-unix-20050624.tar.gz
A questo punto, possiamo procedere con la compilazione del kernel.
$ cd acpica-unix-20050624/compiler
$ make</pre>


=== Configurazione del Kernel ===
===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>


Anzitutto, configuriamo il kernel stesso:
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>


<pre># make menuconfig</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.


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


Selezioniamo il nostro modello di processore:
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.
<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.


Attiviamo qualche altra opzione per il boot:
Una volta corretti gli errori ricompilare il file '''dsdt.dsl'''.
       
<pre>$ iasl -tc dsdt.dsl</pre>


<pre>
Verranno generati due file dalla compilazione:
| Device Drivers
*:dsdt.hex
|--- Block devices
*:DSDT.aml
|------ <*> 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 }}


Attiviamo le opzioni necessarie a mostrare la schermata di boot:
==Aggiornare il Kernel==
Come abbiamo gi� detto, � possibile inserire i file '''dsdt.hex''' e '''DSDT.aml''' generati in modo statico nel kernel, oppure renderli disponibili tramite initrd.


<pre>
*: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'''.
| 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>


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...
*: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'''.


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


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


Ora che il kernel � compilato, possiamo procedere alla compilazione (debian-way):
===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.


<pre>
Scaricare la patch a questo indirizzo:
# make-kpkg clean
<pre>ftp://ftp.kernel.org/pub/linux/kernel/people/lenb/acpi/patches/release</pre>
# make-kpkg --initrd --append-to-version -splash binary
</pre>


Prendiamo in considerazione l'ultimo comando:
Patchate il kernel, 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>


'''make-kpkg''' � uno strumento che ci aiuta a creare kernel pacchettizzati in file binari, con estensione *.deb.
Se non appaiono errori, significa che la patch � stata applicata correttamente.
: --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:


<pre>
Copiare il file dsdt.hex rinominandolo in dsdt_table.h nella directory dei sorgenti del kernel:
binary          specifica che vogliamo compilare kernel_image, kernel_doc, kernel_headers e kernel_source
<pre>$ cp dsdt.hex /usr/src/linux-2.8.6/include/acpi/dsdt_table.h</pre>
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>


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'''.
Infine ricompilare il kernel. Se non ci sono errori al prossimo avvio del PC il supporto ACPI � caricato correttamente senza alcun problema.


A questo punto possiamo installare il nostro nuovo kernel!
===Installazione Metodo initrd===
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.


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


Controlliamo la presenza del RAMDisk iniziale. Per fare ci&ograve; eseguiamo questo comando:
Patchate il kernel, 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>


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


Se il comando restituisce un errore, creiamo il nostro RAMDisk:
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>


<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:
# cd /boot/
<pre>$ echo "INITRDDSDT123DSDT123" >> /boot/initrd-kernel-2.8.6.img
# mkinitrd -o /boot/initrd.img-2.6.11-splash 2.6.11-splash
$: cat DSDT.aml >> /boot/initrd-kernel-2.6.8.img</pre>
</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>


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


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


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

contributi