Lista Risorse Compatibiltà Hardware: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
aggiunti winmodem
m (categoria)
(aggiunti winmodem)
Riga 1: Riga 1:
== Introduzione ==
== Introduzione ==
Questa una breve guida su come configurare il sistema per poter eseguire applicazioni audio realtime.


Questo how-to spiegher� il procedimento da seguire per compilare (alla debian-way) un kernel 2.6.11 con la patch bootsplash.
Per chi non conoscesse il mondo dell'audio professionale su GNU/Linux consiglio questo magnifico sito introduttivo:


* [http://www.emillo.net/audio_midi emillo.net]


== Software richiesto ==
Ci sono '''due passi''' distinti illustrati nella guida: ''il primo'' � patchare un kernel 2.6 con la patch '''realtime-preemption''' di ''Ingo Molnar'' per ottenere un kernel con la pi� bassa latenza possibile; ''il secondo'' � invece permettere a normali utenti l'esecuzione di applicazioni in modalit� realtime.
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>
Il kernel 2.6 ha raggiunto ormai delle prestazioni molto buone per quanto riguarda la latenza (anni luce avanti rispetto al 2.4). Normalmente � dunque sufficiente configurare il sistema per permettere ai normali utenti di eseguire applicazioni realtime (''secondo passo'').


Abbiamo poi bisogno delle librerie e/o programmi che utilizzeremo per la compilazione vera e propria:
Se invece, si vuole non solo ridurre sotto la soglia (indicativa) dei ~ 5 ms la latenza minima ottenibile, ma soprattutto, aumentare notevolmente l'affidabilit� del sistema nel rispettare le basse latenze bisogna usare la patch realtime-preemption (''primo passo''). E' questo il caso, ad esempio, se si vuole lavorare in full-duplex su diverse tracce in realtime, ''senza correre il rischio di xrun'' (ovvero interruzioni del flusso audio). Oppure se si vuole suonare un sintetizzatore software usando la minima latenza possibile.


<pre>
La patch realtime-preemption (per quanto perfettamente usabile) continua ad essere sviluppata incessantemente, e le release sono spesso giornaliere. Il kernel a cui si applica la patch � sempre l'ultimo kernel stabile o, spesso, l'ultimo RC. Nella guida, a puro titolo esemplificativo, mi riferir� ad un kernel e ad una versione di patch specifica, anche se queste versioni diventeranno presto obsolete.  
PACCHETTO          VERSIONE MINIMA    COMANDO
 
binutils            2.12                ld -v
e2fsprogs          1.29                tune2fs
gcc                2.95.3              gcc --version
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:
{{Warningbox|Se non siete a vostro completo agio a compilare e patchare il kernel questa non � la via che fa per voi. Consiglio, in tal caso, di usare un setup per l'audio professionale pronto per l'uso, installando l'ottima [http://demudi.agnula.org/ distribuzione DeMuDi] (� una [http://wiki.debian.net/index.cgi?CustomDebian CDD]). Se volete invece informazioni dettagliate su come compilare il kernel alla ''debian-way'': [[Debian Kernel Howto]]. }}


<pre># apt-get install kernel-source-2.6.11</pre>
== Dal kernel stabile all'RC ==
Consiglio di compilare l'ultima versione stabile del kernel, configurandola e testandola fino ad ottenere una configurazione ben funzionante. Come spunto potete usare [[Esempio configurazione kernel|questa configurazione]]. Nel mio caso ho usato il kernel 2.6.13.2 e la [[Debian Kernel Howto|debian-way]] di compilare il kernel.


Con questo comando, [[APT]] scaricher� un archivio .tar.bz2 in '''/usr/src/''', contenente proprio il sorgente del [[kernel]].
La patch realtime-preemption pi� recente si applica solitamente ai kernel RC (Release Candidate). Questo perch� Ingo Molnar segue sempre il kernel pi� recente (quindi usa le RC come base di partenza per la sua patch). Quando viene rilasciato un nuovo kernel stabile Ingo Molnar rilascia pach per il nuovo kernel stabile, ma dopo alcune settimane passa nuovamente a seguire l'ultima RC uscita nel frattempo.  


&Egrave; inoltre necessario scaricare una patch apposita da applicare al kernel:
Quindi, si hanno due possibilit�:
# compilare l'ultimo kernel stabile con l'ultima patch rilasciata per quel kernel
# compilare l'ultimo kernel rc e usare la versione corrente della pacth.


[http://www.bootsplash.de/files/bootsplash-3.1.4-2.6.11.diff Patch per Kernel 2.6.11]
Attualmente l'ultimo kernel stabile, per il quale sia stata rilasciata la patch realtime preemption � il [ftp://ftp.it.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.tar.bz2 2.6.14] (non i successivi 2.6.14.x). Per tale kernel l'ultima patch disponibile � la [http://people.redhat.com/mingo/realtime-preempt/older/patch-2.6.14-rt22 2.6.14-rt22], come si pu� vedere [http://people.redhat.com/mingo/realtime-preempt/older/ qui].


In caso si tenti questa procedura con altri kernel, &egrave; possibile scaricare la patch relativa, basta cercare in http://www.bootsplash.de/files/.
Se invece si vuole usare l'[http://people.redhat.com/mingo/realtime-preempt/ ultima patch] realtime-preemption (attualmente 2.6.15-rc5-rt2) bisogna usare anche l'[ftp://ftp.it.kernel.org/pub/linux/kernel/v2.6/testing/ ultimo kernel RC].  


== Compilazione ==
Per passare da un kernel stabile ad un RC basta fare un <tt>make oldconfig</tt> in modo da configurare solo le nuove voci. Questo metodo "a due passi" permette di separare i problemi dovuti ad un eventuale errore di configurazione del kernel stabile dai problemi potenzialmente introdotti dall'uso di un kernel RC non stabile.


=== Scompattazione e Patch del Sorgente ===
== La patch realtime-preemption ==
L'archivio delle patch realtime-premption si trova a [http://people.redhat.com/mingo/realtime-preempt/ questo indirizzo]. La patch realtime-preemption usata di seguito (a puro titolo esemplificativo) � la 2.6.14-rc5-rt5, voi usate la versione pi� recente disponibile. La patch � un semplice file di testo. Il suo nome � del tipo <tt>patch-''<kernel version>''-''<patch version>''</tt>. Bisogna applicare la patch all'esatta versione del kernel indicata dal nome. Di seguito viene usata la [http://people.redhat.com/mingo/realtime-preempt/older/patch-2.6.14-rc5-rt5 versione rt5 applicata al kernel 2.6.14-rc5]. Tenete presente che nuove versioni della patch vengono rilasciate giornalmente.


Bene, prima di procedere con la compilazione, &egrave; necessario applicare la patch bootsplash (vedi sopra) al nostro kernel.
Per applicare la patch basta copiarla in <tt>/usr/src</tt>, entrare della dir del kernel e lanciare il comando, nel mio esempio:


Prima di tutto, scompattiamo l'archivio contenente i sorgenti.
  $ cat ../patch-2.6.14-rc3-rt2 | patch -p1 -t


Per fare ci�, spostiamoci in '''/usr/src/''', e procediamo con la scompattazione':
A questo punto nuovamente un <tt>make oldconfg</tt> ci permetter� di configurare le voci inserite dalla patch. Assicurarsi di scegliere '''Complete Preemption (Real-Time)''' in:


<pre>
<pre>
# cd /usr/src/
Processor type and features  --->
# tar -jxvf kernel-source-2.6.11.tar.bz2
  Preemption Mode (Complete Preemption (Real-Time))
</pre>
</pre>


A questo punto verr&agrave; creata una nuova directory, '''/usr/src/kernel-source-2.6.11/'''.
per il resto ho lasciato tutte le altre nuove voci su NO (la maggior parte di esse serve, infatti, per attivare vari strumenti di debug).


Spostiamoci dunque nella nuova directory e applichiamo la patch che abbiamo scaricato:
Non ci resta che compilare il kernel:


<pre>
  $ fakeroot make-kpkg --append-to-version -realtime --revision 0.1 kernel_image
# cd /usr/src/kernel-source-2.6.11
# patch -p1 < /usr/src/bootsplash-3.1.4-2.6.11.diff
</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.
ed installare il pacchetto, per ulteriori informazioni su questo passaggio: [[Debian Kernel Howto]].


A questo punto, possiamo procedere con la compilazione del kernel.


=== Configurazione del Kernel ===
== Modalit� realtime e realtime scheduling ==


Anzitutto, configuriamo il kernel stesso:
La modalit� realtime � un particolare privileggio di esecuzione che un'applicazione pu� avere . Questa modalit� permette ad una applicazione di avere accesso alla CPU con la massima priorita (rispetto ad ogni altra applicazione in attesa) ogni volta che venga richiesto, impedendo inoltre che un'altra applicazione possa a sua volta interrompere l'esecuzione (a meno che non sia anch'essa realtime).


<pre># make menuconfig</pre>
Questo permette di tenere in esecuzione applicazioni a bassa latenza, senza il rischio che altre applicazioni non-realtime possano disturbarle. Si capisce come questa modalit� sia importantisissima nelle applicazioni audio professionali (ad esempio una sessione di registrazione non verr� mai interrotta anche se molte applicazioni non realtime saturano la CPU!).


Vediamo cosa selezionare, brevemente.
D'altro canto, questa modalit�, pone dei seri problemi di sicurezza dato che un'applicazione potrebbe (a causa di un errore o di un comportamento malevolo) occupare la CPU per un tempo indefinito, senza poter essere interrrotta, impedendo dunque la normale applicazione degli altri programmi.


Selezioniamo il nostro modello di processore:
Normalemente, quindi, solo root ha i privileggi per lanciare applicazioni in modalit� realtime. Questo � un problema, dato che (ad esempio) Jack e tutte le applicazioni che vi si connettono dovrebbero essere lanciate da root per poter funzionare in modalit� realtime, e questo costituirebbe un ancor pi� grosso problema di sicurezza.
<pre>
| Processor type and features
|--- Processor family (Athlon/Duron/K7)
</pre>


Per risolvere il problema bisogna consentire l'uso della modalit realtime anche a normali utenti ma in maniera "controllata".


Attiviamo qualche altra opzione per il boot:
Attualmente esistono due approcci per raggiungere lo scopo:


<pre>
# Usare il modulo <code>realtime-lsm</code>
| Device Drivers
# Usare gli '''rlimits'''
|--- Block devices
|------ <*> Loopback device support
|------ <*> RAM disk support
|------ (8192) Default RAM disk size (kbytes)
|------ [*]  Initial RAM disk (initrd) support
</pre>


Entrambi gli approcci possono essere usati sia con kernel vanilla che con kernel realtime-preemption.


Attiviamo le opzioni necessarie a mostrare la schermata di boot:


<pre>
=== Il modulo <tt>realtime-lsm</tt> ===
| Device Drivers
Il modulo <code>realtime-lsm</code> permette ad un normale utente inserito nel gruppo <code>audio</code> di eseguire applicazioni in modalit� realtime. Questo � il vecchio approccio, che verr� man mano sostituito nelle varie distro dall'uso degli rlimits (vedi oltre). 
|--- 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...
Su debian l'installazione del modulo � molto semplice: basta installare il pacchetto <code>realtime-lsm-source</code> ed usare <tt>[[Pagina di manuale di module-assistant|module-assistant]]</tt> per compilare e pacchettizzare il modulo.  


Se stiamo ricompilando un kernel ovviamente sono cose che non si dovrebbero dimenticare!!!
In pratica, dopo aver fatto il boot del kernel per il quale si vuole installare il modulo, (e aver installato <code>realtime-lsm-source</code>) basta il seguente comando:


=== Compilazione con make-kpkg (debian-way) ===
  $ m-a build realtime-lsm


Ora che il kernel � compilato, possiamo procedere alla compilazione (debian-way):
per compilare e creare un pacchetto per il modulo. A questo punto non ci resta che installare il pacchetto <code>realtime-lsm</code> creato.


<pre>
Questo modulo non stato accettato (ne lo sar� mai) nel tree ufficiale del kernel per i potenziali problemi di sicurezza legati al suo utilizzo. In particolare per il suo corretto funzionamento devono essere attivate le seguenti voci di configurazione del kernel:
# make-kpkg clean
# make-kpkg --initrd --append-to-version -splash binary
</pre>
 
Prendiamo in considerazione l'ultimo comando:
 
'''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:


<pre>
<pre>
binary          specifica che vogliamo compilare kernel_image, kernel_doc, kernel_headers
Security options --->
                e kernel_source
[*] Enable different security model
 
<M>   Default Linux Capabilities
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>
</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'''.
''(l'ultima voce deve necessariamente essere un modulo!)''


A questo punto possiamo installare il nostro nuovo kernel!
Nei recenti kernel binari di Etch le precendenti condizioni non sono soddisfatte, percui il modulo '''realtime-lsm''' non funzioner� con tali kernel. Inoltre il modulo realtime-lsm � ormai ufficialmente deprecato in debian Etch.


<pre>
In questi casi bisogner� ricompilare il kernel oppure usare l'approccio tramite rlimits.
# dpkg -i /usr/src/kernel-image-2.6.11-splash_10.00.Custom_i386.deb
</pre>


Controlliamo la presenza del RAMDisk iniziale. Per fare ci&ograve; eseguiamo questo comando:
=== Usare gli rlimits ===


<pre>
E' gi� presente nel kernel un nuovo meccanismo pi� sicuro per concedere i privileggi di realtime chiamato rlimits che sostituisce completamente il modulo realtime-lsm.  
# ls /boot/initrd.img-2.6.11*
</pre>


Se il comando restituisce un errore, creiamo il nostro RAMDisk:
Tuttavia, l'uso degli rlimits richiede una versione recente di PAM, la 0.80. Attualmente in Debian Sid ed Etch � presente la 0.79 ma si pu� installare il pacchetto patchato o compilarlo seguendo le seguenti istruzioni:


<pre>
* [http://www.ubuntustudio.com/wiki/index.php/Breezy:Rlimits-Aware_PAM Rlimits-Aware_PAM]
# cd /boot/
# mkinitrd -o /boot/initrd.img-2.6.11-splash 2.6.11-splash
</pre>


== Installazione di Bootsplash ==
== Conclusioni ==
Con un kernel cos� ottimizzato si raggiungono prestazioni realtime davvero spinte. Io ad esempio, con una modestissima SB Audigy 1 posso fare partire jack a 32 frame x 2 periodi @ 48000Hz (latenza 1.3 ms!) in modalit� solo playback. Qualche xrun avviene ancora a latenze cos� basse se si eseguono altre operazioni sulla macchina. Per avere la massima affidabilit� in full-duplex utilizzo usualmente jack a 128x2 @ 48000Hz.


In questa fase ci viene in aiuto quel repository che abbiamo aggiunto all'inizio al nostro '''/etc/apt/sources.list'''.
In bocca al lupo e...


Aggiorniamo i nostri archivi APT ed installiamo Bootsplash:
Happy Debian!


<pre>
== Links ==
# 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:
* http://www.emillo.net/home
* http://www.djcj.org/LAU/guide/index.php
* http://tapas.affenbande.org/?page_id=3


<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...
Autore: [[Utente:TheNoise|~ The Noise]]
 
Happy Debian!
 
----
[[User:Hanska|Hanska]] 20:32, 14 May 2005 (CEST)


[[Categoria:Kernel]]
[[Categoria:Kernel]]
[[Categoria:Audio]]
1 760

contributi

Menu di navigazione