Avanti Indietro Indice

7. Trucchi e risoluzione dei problemi

Si dia un'occhiata al file FAQ nella directory del driver audio. Questa sezione è ancora in lavorazione.

7.1 Compilare il driver

Sorgenti del kernel linux

Se i driver ALSA non si compilano correttamente e fanno qualche riferimento a "version.h" o altri file header che non possono essere trovati, potrebbe significare che non si dispone dei file header del kernel. Si veda il Kernel HOWTO, si estragga un kernel recente in /usr/src e si dia il comando make config.

Impossibile creare eseguibili

Le utilità contengono codice scritto in c++. Quasi tutti hanno un compilatore c++ contenuto in gcc o egcs, ma ci si assicuri di aver installato il pacchetto libstdc++-devel, altrimenti, lanciando lo script di configurazione delle utilità il sistema lascerà sconcertati con un messaggio di errore del tipo "il compilatore c++ non puù creare eseguibili".

7.2 Caricare il driver

Si controllino le seguenti voci.

Dispositivi audio

ALSA usa alcuni dispositivi speciali contenuti nella directory /dev. Ci si assicuri di aver lanciato lo script ./snddevices nella directory dei sorgenti dei driver ALSA.

Compatibilità della scheda audio

Si è sicuri al 100% che la scheda audio SIA supportata? Si controlli di nuovo. A volte una X123 non è uguale ad una X123b e si potrebbe solo perdere del tempo. D'altra parte anche una scheda supportata puù dare problemi: a me sono servite due ore per capire l'installazione di una CS4237B che, dopo tutto, si è dimostrata solo un esempio di RTFM (Acronimo di "Read The Fine Manual" (leggi il bel manuale) ndt).

"Device busy" o "unresolved symbols"

Si potrebbe avere un kernel 2.0.x con supporto per l'audio compilato nel kernel, o potrebbe essere caricato il driver audio OSS/Lite (del kernel) (si controlli con il comando cat /proc/modules). Si rimuova il driver o si ricompili il kernel (si dia un'occhiata al Kernel-HOWTO).

Il modulo audio nella serie 2.0 del kernel si chiama "sound.o" e non dovrebbe essere attivo (il driver ALSA "snd.o" è comunque OK).

Avendo un kernel della serie 2.2.x senza driver audio compilato nel kernel i driver ALSA comunque non funzioneranno.

Kernel 2.0

So che non è molto chiaro, quindi verrà spiegato una volta ancora. Con un kernel della serie 2.0.x (il comando ``uname -a'' dice qualcosa del tipo "Linux penguin 2.0.35 #6 Wed Sep 23 10:19:16 CEST 1998 i686 unknown") i driver dovranno essere lasciati fuori dal kernel. ALSA 0.4.x e successivi non funzionano con i kernel della serie 2.0

Kernel 2.2

Con un kernel della serie 2.2.x si avrà bisogno dei driver audio. Un kernel della serie 2.2 dovrà essere compilato con il supporto per il suono ma senza il driver della scheda audio. Quindi si selezioni il supporto per l'audio ma ci si assicuri che nessuno specifico driver di scheda audio sia compilato.

Riferimenti ad altri driver

Un'altra ragione per la quale i driver potrebbero lamentarsi del fatto che il dispositivo sia occupato potrebbe essere che il file /etc/conf.modules contenga ancora dei riferimenti ai driver della scheda audio. Questi riferimenti dovranno essere cancellati lasciando solo tutto ciù che si riferisce ai driver ALSA (sarebbe bene lasciare come sono i riferimenti a driver che non siano di dispositivi audio).

Unresolved symbols rivisitato

Un'altra sorgente di messaggi "unresolved symbols" potrebbe essere un nuovo kernel con i vecchi driver. Si è pregati di ricompilare i driver ALSA dopo aver ricompilato un nuovo kernel. Questo assicurerà la compatibilità tra i driver ed il nuovo kernel.

Controllare le impostazioni PnP

Si + sicuri che la scheda audio sia attiva? Si dia un'ulteriore occhiata al PnP-HOWTO e si controlli di aver attivato correttamente la scheda audio.

Sono corretti i parametri?

Controllare e ricontrollare i parametri della propria scheda audio. Si noti che 534 non è come 543 e neppure 0x534 è uguale a 534.

Inoltre qualche scheda audio potrebbe richiedere un driver diverso da quello che ci si aspetta. Si faccia una pausa con una birra o qualcos'altro e si dia ancora un'occhiata al comando "modprobe". Per esempio il driver per la Crystal 4232 dovrebbe essere caricato da modprobe snd-card-cs4232, e non "snd-cs4231", e la SoundBlaster PCI 64 dovrebbe essere caricata con "snd-audiopci", non con snd-es1370 (è tutto scritto nella documentazione ed anche avendo un HOWTO una volta ho perso un intero pomeriggio cercando di persuadere snd-cs4231 a produrre suoni).

7.3 Driver caricato... ma nessun suono (o quasi)

Togliere il "muto"

I driver ALSA possono sfruttare la funzione di ``muting'' di cui molte schede audio dispongono. Se i driver audio sono stati caricati e tutto è andato bene ma non si sente altro che silenzio, probabilmente ci si è dimenticati di togliere il "muto" alla scheda. Ci sarà bisogno di "amixer" o "alsamixer" per farlo, sono tutti e due nel pacchetto ALSA-utilities. Si digiti solamente

amixer set -c 1 Master 70 unmute
amixer set -c 1 PCM 70 unmute
amixer set -c 1 CD 70 unmute

che dovrebbe funzionare per la maggior parte delle applicazioni. Si noti che usando programmi amixer più vecchi sarà necessario tralasciare la parte "set" nella riga di comando.

Gain

Quasi tutte le schede audio dispongono di un componente del mixer a parte per l'amplificazione degli input/output aggiuntivi. Questo componente è spesso chiamato "gain", "in-gain" per l'input ed "out-gain" per l'output. L'impostazione di questo componente ad un livello adeguato permetterà di ottenere il massimo volume dai propri altoparlanti (si pensi comunque ai propri genitori/vicini/orecchie). Quindi un comando come

amixer set out-gain 100 unmute

probabilmente sarà di aiuto.

Compatibilità con OSS/Linux

Se questa è la prima volta che si usano i driver ALSA e prima si usavano i driver audio del kernel, probabilmente si vorrà avere un driver audio compatibile con quello precedente (ad esempio per usare i dispositivi /dev/pcmX). Si dovrà caricare il "driver di compatibilità OSS" per ottenere questo risultato. Si dia il comando modprobe snd-pcm1-oss && modprobe snd-mixer-oss (si veda la sezione che riguarda il caricamento del driver). Si noti che snd-pcm1-oss non è la stessa cosa di snd-pcm1, ci sarà bisogno di snd-pcm1-oss per ottenere il supporto audio vecchio stile e di snd-mixer-oss per il mixer.

Impossibile aprire il mixer

Provando ad installare diverse versioni di ALSA a volte il mixer diventa inaccessibile. Accade se si è provata la versione 0.3.2 e si è tentato di ritornare alla 0.3.0-pre4 (IIRC). Si dovranno cancellare tutti i file libasound ed i collegamenti ad essi da /usr/lib e quindi ricompilare librerie e programmi di utilità:

rm /usr/lib/libasound.*

Solo per sicurezza cancellare tutti i driver ALSA quindi ricompilare, installare e caricare i driver.

7.4 Suggerimenti generici

Provare con "insmod"

È sempre utile partire con il comando "insmod" invece che con kerneld. Si avrà così modo di vedere gli errori sullo schermo.

Leggere il file INSTALL

Si possono trovare molte informazioni nel file INSTALL presente nella directory dei driver. Se il driver si rifiuta di funzionare si controlli se sono disponibili informazioni aggiuntive.

Messaggi di debug

Come ultima risorsa è possibile ricompilare il driver in modo da fargli inviare le informazioni di debug su /var/log/messages. Andare nella directory del driver con cd /usr/src/alsa-driver-.... e digitare:

./configure --with-debug=detect; make clean; make

Si rimuova il driver (se esso è attivo si veda più avanti un comando generico per la rimozione). Si usi il comando "modprobe" usato prima per caricare il driver appena compilato. Si veda /var/log/messages per controllare se ci sono messaggi.

Se tutto il resto fallisce...

Se questi messaggi non sono di aiuto, mandare un messaggio alla mailing list degli utenti di ALSA, alsa-user@alsa-project.org.

Includere le seguenti informazioni:

7.5 Segnalazioni di bug

Se si trova un bug, gli sviluppatori di ALSA vorranno sapere (al minimo) le seguenti cose:

  1. versioni del driver e del kernel : 'cat /proc/asound/version'
  2. informazioni sulla scheda audio
  3. tutti i messaggi di /var/log/messages di pertinenza del driver ALSA
  4. descrizione del problema

7.6 Suggerimento: riprodurre CD

Se si usa kmod/kerneld ed i driver ALSA per riprodurre i CD, probabilmente kmod/kerneld non carica i driver come dovrebbe. Questo è dovuto al fatto che un riproduttore di CD dice solo al CD di cominciare a riprodurre senza utilizzare alcuno dei dispositivi che avvisano kmod/kerneld della necessità del suono. Usare modprobe potrebbe essere l'unica soluzione a questo problema.

7.7 Suggerimento: installare il driver seriale MIDI

Normalmente la porta di IO del dispositivo seriale è di proprietà del driver del dispositivo seriale standard. Quindi prima di dare il comando "modprobe snd-serial" si dovrà dire al driver di rilasciare il dispositivo seriale.

Questa è la procedura.

setserial /dev/ttyS0 uart none
modprobe snd-serial

(Si sostituisca /dev/ttyS0 con l'opportuno dispositivo /dev/ttySx se il MIDI usa un diverso dispositivo seriale).

7.8 Suggerimento: nuovo kernel? nuovi moduli!

Dopo aver aggiornato il kernel probabilmente ci sarà bisogno di ricompilare i driver ALSA. Se sono ancora nella directory originaria /usr/src, non ci si dimentichi di dare un make clean prima di ./configure, make, make install.

Ah, c'è una anomalia nella numerazione dei kernel: lo script di configurazione dice che un kernel "2.2.0ac1" è un "not a number" (non un numero, ndt). Penso che sia stato risolto nei nuovi script di configurazione altrimenti si dovrà cambiare la versione del kernel nei sorgenti.

7.9 Suggerimento: KDE e i driver ALSA

Supponiamo di avere KDE funzionante e di non riuscire a far funzionare i suoni di sistema, quelli usati all'apertura delle finestre, o cambiando desktop ecc. L'audio in generale funziona. Se il riproduttore cd e mp3 ed il mixer funzionano normalmente probabilmente quello che non funziona è solo "kwmsound".

Quindi ci si assicuri che "kwmsound" sia nello script di avvio ($KDEDIR/bin/startkde)

7.10 Suggerimento: uso dei dispositivi ALSA

Se si aveva già precedentemente il supporto per il suono nel proprio sistema Linux è probabile che tutte le applicazioni puntino a /dev/pcm0, /dev/audio e /dev/mixer. Questo va bene se si usa il modulo di compatibilità con OSS, snd-pcm1-oss. Potrebbe essere meglio, comunque, usare i dispositivi ALSA veri, quelli che si trovano in /dev/snd/.

7.11 Suggerimento: rimuovere tutti i moduli

La rimozione di 10 o più moduli uno ad uno non è la cosa giusta da fare. Fortunatamente tutti i moduli iniziano con il prefisso "snd-", quindi un po' di programmazione da riga di comando potrebbe fare al caso nostro. Si potranno facilmente rimuovere i driver ALSA con un comando di questo tipo:

cat /proc/modules|gawk '/^snd-/{print $1}'|xargs -i rmmod {}

Juergen Kahrs ha scritto: "Ho uno script che rimuove anche soundcore, soundlow e sound se sono presenti e se non sono utilizzati. Lo script processa /proc/modules tre volte quindi non dovrebbero restare troppi moduli dopo la sua esecuzione". Ecco la sua soluzione:

awk '/^snd/||/^sound/&&($3==0){system("rmmod " 
$1)}' /proc/modules /proc/modules /proc/modules

Si noti che se qualche modulo dipende da qualche altro modulo non si puù semplicemente rimuovere il modulo "più alto". Questo significa che si potrebbe aver bisogno di una seconda esecuzione del comando di rimozione (comunque non ho mai incontrato questa situazione, sembra che i moduli ALSA possano essere rimossi nell'ordine in cui appaiono nel file /proc/modules).


Avanti Indietro Indice