|
|
Riga 1: |
Riga 1: |
| == Introduzione ==
| | <big>'''Elenco Hardware Compatibile con Linux'''</big> |
| Questa è una breve guida su come configurare il sistema per poter eseguire applicazioni audio realtime.
| |
|
| |
|
| Per chi non conoscesse il mondo dell'audio professionale su GNU/Linux consiglio questo magnifico sito introduttivo:
| | Questa pagina nasce con lo scopo di raccogliere una lista di periferiche compatibili con Debian (e con Linux, pi� in generale), di cui si sia avuta una diretta esperienza. |
|
| |
|
| * [http://www.emillo.net/audio_midi emillo.net] | | Per ovvi motivi viene elencato tutto il possibile hardware, ma '''solo alcune categorie''' pi� richieste e che danno maggiori problemi agli utenti: |
| | * Modem USB ADSL |
| | * Modem USB 56k |
| | * Periferiche Wireless |
| | * Schede Video |
| | * Webcam |
|
| |
|
| 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.
| | Nella pagina [[Lista Risorse Compatibilt� Hardware]] troverete invece una serie di link alle tabelle di compatibilit� pi� ''famose'' per ogni altra tipologia di hardware (fotocamere, schede audio, webcam, portatili). |
|
| |
|
| 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'').
| | Un invito, da parte di tutta la comunit�, ad inserire il vostro dispositivo ed i relativi dettagli... 5 minuti del vostro tempo aiuteranno molte persone! |
|
| |
|
| 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.
| | [[#Come utilizzare questa pagina |In fondo]] a questa pagina sono presenti la legenda ed una piccola guida su come inserire correttamente un elemento nella lista! |
|
| |
|
| 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.
| |
|
| |
|
| {{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]]. }}
| | __TOC__ |
| | = Lista Hardware = |
|
| |
|
| == Dal kernel stabile all'RC == | | {| width="100%" border="2" cellpadding="4" cellspacing="0" style="margin: 1em 1em 1em 0; border: 1px #aaa solid; border-collapse: collapse; text-align: center;" |
| 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.
| | | align="center" style="background: #f9f9f9;" | Produttore |
| | | align="center" style="background: #f9f9f9;" | Modelli |
| | | align="center" style="background: #f9f9f9;" | Compatibile |
| | | align="center" style="background: #f9f9f9;" | Guide |
| | |- |
| | | colspan="4" align="center" style="background: #f9f9f9;" | |
| | === Modem USB ADSL === |
| | |- |
| | | ''Vari'' |
| | | [[Modem adsl Telindus ND220|Telindus ND220]] |
|
| |
|
| Una guida completa sulla configurazione e l'ottimizzazione di un [[kernel vanilla]] (e non solo) per applicazioni audio è la seguente:
| | Sagem Fast 800 |
|
| |
|
| * [http://demudi.agnula.org/wiki/Low-latencyKernelBuildingHowto Low-latency Kernel Building Howto].
| | [[Modem adsl Aethra Starmodem|Aethra Starmodem]] (solo con chipset ADI) |
|
| |
|
| 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.
| | | {{SupportatoConfigurazione}} |
| | | align="left" | Richiede installazione dei driver '''eagle-adsl''' |
|
| |
|
| Quindi, si hanno due possibilità:
| | {{link}} [http://www.eagle-usb.org/ Homepage driver eagle] |
| # 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.
| |
|
| |
|
| Attualmente, ad esempio, 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].
| | {{guida}} [[Installare i driver eagle-adsl]] |
| | |- |
| | | ''Vari'' |
|
| |
|
| 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].
| | |[http://accessrunner.sourceforge.net/modems.shtml Modem supportati] dal progetto '''Accessrunner''' (chipset Conexant) |
|
| |
|
| 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.
| | | {{SupportatoConfigurazione}} |
|
| |
|
| == La patch realtime-preemption == | | | align="left" | {{lh-kernel|Etch|2.6.13| cxacru }} |
| 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.
| |
|
| |
|
| Per applicare la patch basta copiarla in <tt>/usr/src</tt>, entrare della dir del kernel e lanciare il comando, nel mio esempio:
| | Richiede installazione del firmware. |
|
| |
|
| $ cat ../patch-2.6.14-rc3-rt2 | patch -p1 -t
| | {{link}} [http://accessrunner.sourceforge.net/ Homepage driver Accessrunner] |
|
| |
|
| 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:
| | {{guida}} [[Installare i driver conexant accessrunner]] |
| | |- |
| | | colspan="4" align="center" style="background: #f9f9f9;" | |
|
| |
|
| <pre>
| | === Modem USB 56k === |
| Processor type and features --->
| | |- |
| Preemption Mode (Complete Preemption (Real-Time))
| | | |
| </pre>
| | | |
| | | |
| | | |
| | |- |
| | | colspan="4" align="center" style="background: #f9f9f9;" | |
| | === Periferiche Wireless === |
| | |- |
| | | [http://www.netgear.it/ Netgear] |
| | | WAG511 |
|
| |
|
| 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).
| | WG311T (168c:0013) |
|
| |
|
| Non ci resta che compilare il kernel:
| | WG511T (0271:0012) |
|
| |
|
| $ fakeroot make-kpkg --append-to-version -realtime --revision 0.1 kernel_image
| | WG511U (168c:0013) |
|
| |
|
| ed installare il pacchetto, per ulteriori informazioni su questo passaggio: [[Debian Kernel Howto]].
| | WPN511 (168c:0013) |
| | | {{SupportatoConfigurazione}} |
| | | align="left" | Richiede la compilazione e l'installazione dei driver madwifi |
|
| |
|
| | {{link}} [http://madwifi.org/ Pagina ufficiale Progetto MadWifi] |
|
| |
|
| == Modalità realtime e realtime scheduling == | | {{guida}} [[Madwifi | Guida installazione driver madwifi]] |
| | |- |
| | | [http://www.zyxel.it Zyxel] |
| | | [http://www.zyxel.it/product/model.php?indexcate=1085454766&indexcate1=1085450343&indexFlagvalue=1021876859 Zyxel ZyAir G-100] |
| | | {{SupportatoConfigurazione}} |
| | | align="left" | |
| | {{lh-kernel|Sarge|2.6.8(?)|prism54}} |
| | Richiede il download del firmware e il suo caricamento: |
|
| |
|
| 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).
| | {{download}} [http://prism54.org/fullmac.html Download Firmware] |
|
| |
|
| 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!).
| | {{link}} [http://prism54.org/ Pagina ufficiale Progetto Prism54] |
| | |- |
| | | |
| | | |
| | | |
| | | |
| | |- |
| | | colspan="4" align="center" style="background: #f9f9f9;" | |
| | === Schede Video === |
|
| |
|
| 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.
| | | [http://www.ati.com/ ATI] |
| | | Radeon X800 |
| | | {{supportato}} |
| | | align="left" | '''Driver Proprietario''': Supporto completo con 3D |
| | |- |
| | | [http://www.ati.com/ ATI] |
| | | Radeon 7000/VE |
| | | {{supportato}} |
| | | align="left" | '''Driver OpenSource''': Supporto completo con 3D |
| | |- |
| | | [http://www.ati.com/ ATI] |
| | | Radeon 8500<br/> |
| | Radeon 9200 |
| | | {{supportato}} |
| | | align="left" | '''Driver OpenSource''': Supporto accelerazione 3d<br/> |
| | '''Driver Proprietari''': Supporto completo |
| | |- |
| | | [http://www.ati.com/ ATI] |
| | |Mobility Radeon 9600 M10 <br/> |
| | Radeon X700 |
| | | {{supportato}} |
| | | align="left" | '''Driver OpenSource''': Supporto completo con 3D, funzionalit� grafiche parziali<br/> |
| | '''Driver Proprietari''': Supporto completo |
| | |- |
| | | [http://nvidia.com/ NVIDIA] |
| | | GeForce 6200 |
| | | {{supportato}} |
| | | align="left" | '''Driver OpenSource''': Supporto completo con 3D |
| | |- |
| | | [http://nvidia.com/ NVIDIA] |
| | | GeForce 4 MX 440 |
| | | {{supportato}} |
| | | align="left" | '''Driver OpenSource''': Supporto completo con 3D<br/> |
| | '''Driver Proprietari''': Supporto completo |
| | |- |
| | | colspan="4" align="center" style="background: #f9f9f9;" | |
|
| |
|
| 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.
| | === Webcam === |
| | |- |
| | | |
| | | |
| | | |
| | | |
| | |} |
|
| |
|
| Per risolvere il problema bisogna consentire l'uso della modalità realtime anche a normali utenti ma in maniera "controllata".
| | =Come utilizzare questa pagina= |
|
| |
|
| Attualmente esistono due approcci per raggiungere lo scopo:
| | == Lettura e legenda == |
| | La tabella mostra una lista di Hardware compatibile con Linux (in particolare con Debian GNU/Linux) suddiviso per categoria, produttore e, se necessario, modello. |
|
| |
|
| # Usare il modulo <code>realtime-lsm</code>
| | Ogni elemento contiene le seguenti informazioni: |
| # Usare gli '''rlimits'''
| | ; Produttore : il nome del produttore con, eventualmente, un link al sito ufficiale |
| | ; Modelli : il nome del modello con, eventualmente, il codice "produttore/prodotto" presente in lspci |
| | ; Compatibile : lo stato di compatibilit�: |
| | ::* {{NonSupportato}} non supportato |
| | ::* {{ParzialmenteSupportato}} parzialmente supportato |
| | ::* {{SupportatoConfigurazione}} supportato ma richiede la configurazione |
| | ::* {{Supportato}} supportato |
| | : In caso di ''supportato'' e ''parzialmente supportato'' pu� essere presente, inolte, una tabella contenente dei dettagli relativi alla versione del [[kernel]], alla [[Release | release di Debian]] da cui � disponibile il supporto ed il [[modulo del kernel]] (''Driver'') necessario al suo funzionamento. |
| | ; Note : Link alle guide relative all'installazione/configurazione del dispositivo. |
| | : |
| | <div aling="left"> |
| | {{lh-kernel|Versione di Debian da cui � iniziato il supporto al dispositivo|Versione del Kernel Linux da cui il dispositivo � supportato nativamente|Nome del modulo da caricare}} |
| | </div> |
| | : � possibile incontrare una tabella come la seguente:<br/>che riporta dei dettagli utili per l'installazione del dispositivo. |
| | <br/><br/><br/><br/><br/><br/><br/> |
|
| |
|
| Entrambi gli approcci possono essere usati sia con kernel vanilla che con kernel realtime-preemption.
| | == Inserimento di elementi == |
| | L'inserimento degli elementi � semplice; di seguito vengono forniti i passi per l'inserimento di un elemento: |
| | * Prelevare da [[Lista Hardware Template | questa pagina]] il template pi� indicato |
| | * Sostituire il testo racchiuso tra ''#...#'' con il proprio |
| | * modificare la pagina [[Lista Hardware]] inserendo la propria parte appena dopo un <tt>|-</tt> |
| | * Sarebbe utile ordinare gli elementi per produttore e modello... |
| | * In caso di difficolt�, si possono contattare (tramite la pagina di discussione od un messaggio privato) i seguenti utenti: |
| | ** [[Utente:MaXeR|MaXeR]] |
| | ** [[Utente:TheNoise | The_Noise]] |
| | ** [[Utente:ilbeppe | Ilbeppe]] |
|
| |
|
| | | [[Categoria:Hardware]] |
| === Il modulo <tt>realtime-lsm</tt> ===
| |
| 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).
| |
| | |
| 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.
| |
| | |
| 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:
| |
| | |
| $ m-a build realtime-lsm
| |
| | |
| per compilare e creare un pacchetto per il modulo. A questo punto non ci resta che installare il pacchetto <code>realtime-lsm</code> creato.
| |
| | |
| 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:
| |
| | |
| <pre>
| |
| Security options --->
| |
| [*] Enable different security model
| |
| <M> Default Linux Capabilities
| |
| </pre>
| |
| | |
| ''(l'ultima voce deve necessariamente essere un modulo!)''
| |
| | |
| 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.
| |
| | |
| In questi casi bisognerà ricompilare il kernel oppure usare l'approccio tramite rlimits.
| |
| | |
| === Usare gli rlimits ===
| |
| | |
| È già presente nel kernel un nuovo meccanismo più sicuro per concedere i privileggi di realtime chiamato rlimits che sostituisce completamente il modulo <tt>realtime-lsm</tt>.
| |
| | |
| Gli rlimits sono supportati da PAM dalla versione 0.80, le versioni precendenti richiedono una patch. Attualmente in Debian Sid ed Etch è presente la 0.79, mentre in Sarge c'è la 0.76. Ci sono dei pacchetti non ufficiali, già pachati, che possono essere usati nelle varie versioni di debian:
| |
| | |
| * '''Debian Sarge''': installare libpam-modules da [http://techweb.rfa.org/debrfa/dists/sarge/main/binary-i386/ qui].
| |
| * '''Debian Etch''': si può usare senza problemi il pacchetto <tt>[http://www.ubuntustudio.com/uploads/breezy/libpam-modules_0.76-22ubuntu3studio1_i386.deb libpam-modules]</tt> fornito da [http://www.ubuntustudio.com/ ubuntustudio]. Assicuratevi inoltre di mettere il pacchetto in ''hold'' per evitare alla versione più recente (la 0.79) presente in etch. Per mettere in ''hold'' il paccheto basta selezionarlo in [[aptitude]] e premere <tt>'''='''</tt>.
| |
| * '''Debian Sid''': c'è un pacchetto specifico per sid creato da ''Burkhard Ritter'' a [http://seite9.de/~burkhard/pam_debian_rlimits/ questo indirizzo].
| |
| | |
| Se invece non vi fidate e volete patchare il vostro pacchetto <tt>libpam-modules</tt> da soli trovate la patch [http://fsb.gotdns.org/~froh/files/pam-rlimits_debian/ qui] (''originale'') e [http://www.ubuntustudio.com/uploads/pam-0.76-rlimits.patch qui] (''modificata da ubuntustudio''). Le differenze tra le due patch dovrebbero essere solo cosmetiche. Una veloce guida su come applicare la patch e ricompilare il pacchetto la trovate [http://www.ubuntustudio.com/wiki/index.php/Breezy:Rlimits-Aware_PAM qui].
| |
| | |
| Una volta installato il pacchetto, in un modo o nell'altro, dovrete assicurarvi che di aver impostato i giusti permessi in <tt>/etc/security/limits.con</tt> per gli utenti del gruppo <tt>audio</tt>. Ad esempio:
| |
| | |
| @audio - nice -10
| |
| @audio - rtprio 99
| |
| @audio - memlock 250000
| |
| | |
| == 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 bocca al lupo e...
| |
| | |
| Happy Debian!
| |
| | |
| == Links ==
| |
| | |
| * http://www.emillo.net/home
| |
| * http://www.djcj.org/LAU/guide/index.php
| |
| * http://tapas.affenbande.org/?page_id=3
| |
| * [http://demudi.agnula.org/wiki/Low-latencyKernelBuildingHowto Low-latency Kernel Building How-to]
| |
| * [http://alsa.opensrc.org/RealtimeKernelAndPAM Alsa Wiki: Realtime Kernel And PAM]
| |
| | |
| ----
| |
| | |
| Autore: [[Utente:TheNoise|~ The Noise]]
| |
| | |
| [[Categoria:Kernel]]
| |
| [[Categoria:Audio]] | |