MiKernel.v6b a MiKernelV7b (ALSA)
Vengo usando OSS desde que instalé el sistema. Sin embargo OSS está obsoleto, sustituido por ALSA (Advanced Linux Sound Architecture), y ya iba siendo hora de cambiar. Sé que si no funciona no se debe de tocar, pero tenía ganas de tocar el tema del sonido.
ALSA, así como OSS, se colocan ente el hardware y los demonios, como aRts, que sirven a los programas para reproducir sónido. ALSA y OSS son una especie de controlador genérico de hardware (puesto que entre el hardware y ASLA ú OSS está el controlador específico para cada hardware).
Tras cacharrear un poco, y tirando de #debian-es de Freenode, me doy cuenta de que tengo tanto OSS como ALSA compilados en el kernel. Grave error, puesto que ámbos controlan el hardware de sonido directamente, y no pueden convivir ámbos juntos. En mi caso era OSS quién se apoderaba del hardware.
Para verlo, y en genreal para cualquier problema de detección de hardware y similar, nada mejor que echar un ojo a dmesg. Ahí se ve los dispositivos detectados y si se ha producido algún error en su inicialización.
Una vez visto el problema genero un nuevo kernel, MiKernel.v7, dejando OSS como módulo y ALSAcompilado dentro del kernel. Ya de paso activo el soprote para la consola framebuffer y el logo de carga (ese Tux que sale en la esquina superior izquierda) que, si no me equivovo, es configurable.
Dado que aún no he escrito explícitamente los pasos claro para recompilar e instalar un nuevo kernel, aquí los pongo:
Después de compialr e instalar MiKernel.v7 pruebo ALSA mediante alsaconf. Sin embargo, me avisa de que no encunetra tarjetas válidas.
Trato de ver si se ha reconocido la tarjeta:
Pues parece que si. Veamos los dispositivos:
Parece que también están ahí. Sin embargo, no reproduce:
Now talking on #alsa
* Topic for #alsa is: Advanced Linux Sound Architecture || Unprofessional, unofficial support, see WIKI at http://alsa.opensrc.org/
* Topic for #alsa set by jcdutton at Mon Aug 23 00:38:12 2004
NaSz: hi
NaSz: I'm trying to get alsa working on Debian 2.6.8 kernel
NaSz: I've compiled the kernel with alsa built in and oss as modules
NaSz: now /proc/asound/cards and /proc/asound/devices show me my SoundBlaster Live! using emu10k1
NaSz: but when I test it with aplay I get "aplay: main:508: audio open error: No such device"
pzad: NaSz: look at /dev/snd/* if there are device files
NaSz: yes, a lot of files
pzad: what is in /proc/asound/cards
NaSz: # cat /proc/asound/cards
NaSz: 0 [VirMIDI ]: VirMIDI - VirMIDI
NaSz: Virtual MIDI Card 1
NaSz: 1 [Live ]: EMU10K1 - Sound Blaster Live!
NaSz: Sound Blaster Live! (rev.10) at 0xd000, irq 16
pzad: try
pzad: aplay -D plughw:1 some.wav
pzad: and alsamixer -c 1
NaSz: hey! it sounds!
pzad: did you compile alsa as modules or in to kernel
NaSz: in to kernel
pzad: your problem is virtual midi module - it is as first card and sb live is second
pzad: you can specify order of soundcards in kernel command line at oot time
pzad: for example snd-intel8x0.index=0 snd-emu10k1.index=1
NaSz: wich names I must use?
pzad: I think for you snd-emu10k1.index=0 snd-virmidi.index=1
Es decir, que el primer dispositivo de sonido es el MIDI virtual, que evidentemente no tiene las capcacidades de una tarjeta de sonido, por lo que alsaconf falla, ya que debe de usar el primer dispositivo que encuentra.
Es similar a lo que me pasaba con el soporte UltraDMA: se cargaban primero los controladores IDE genéricos que no tenían soporte para UltraDMA, y después los específicos para mi hardware, pero el núcleo usaba los primeros, por lo que no tenía UltraDMA.
Para solucionarlo se puede, como comenta pzad, pasarle unos parámetros al kernel de manera que coloque los dispositivos en un orden determinado, o recompilar el kernel eliminando el dispositivo MIDI virtual.
Decido que lo mejor es recompilar el kernel eliminado el soporte para el MIDI. Reconfiguro, recompilo, instalo, reinicio y compilo los módulos necesarios. Ejecuto alsaconf y ésta vez funciona. Abro el KDE y el sonido de bienvenida me indica que también funciona, como era de esperar, en KDE.
Nota: Dado que ya no uso ndiswrapper para la conexión inalámbrica, podría recompilar el kernel de nuevo con pilas de 4K en vez de 8K (los controladores de Windows que usaba ndiswrapper gustan de las pilas de 8K, pero con 4K se obtiene un rendimiento mayor del sistema).
ALSA, así como OSS, se colocan ente el hardware y los demonios, como aRts, que sirven a los programas para reproducir sónido. ALSA y OSS son una especie de controlador genérico de hardware (puesto que entre el hardware y ASLA ú OSS está el controlador específico para cada hardware).
Tras cacharrear un poco, y tirando de #debian-es de Freenode, me doy cuenta de que tengo tanto OSS como ALSA compilados en el kernel. Grave error, puesto que ámbos controlan el hardware de sonido directamente, y no pueden convivir ámbos juntos. En mi caso era OSS quién se apoderaba del hardware.
Para verlo, y en genreal para cualquier problema de detección de hardware y similar, nada mejor que echar un ojo a dmesg. Ahí se ve los dispositivos detectados y si se ha producido algún error en su inicialización.
Una vez visto el problema genero un nuevo kernel, MiKernel.v7, dejando OSS como módulo y ALSAcompilado dentro del kernel. Ya de paso activo el soprote para la consola framebuffer y el logo de carga (ese Tux que sale en la esquina superior izquierda) que, si no me equivovo, es configurable.
Dado que aún no he escrito explícitamente los pasos claro para recompilar e instalar un nuevo kernel, aquí los pongo:
- Hacer una copia de /usr/src/linux/.config para guardar la configuración actual del kernel (si no está hecha ya).
- Editar la configuración del kernel, yo lo hago mediante make menuconfig dentro de /usr/src/linux
- Renombrar el directorio /lib/modules/2.6.8 si estoy voy a instalar un kernel 2.6.8. Si fuese otra versión del kernel no haría falta puesto que se usaría otro directorio (/lib/modules/
). De esa manera guardo los módulo del kernel antiguo por si hubiese algún problema poder volver a él sin dificultades. - Ejecutar make-kpkg clean en /usr/src/linux para limpiar los restos de la última compilación.
- Ejecutar make-kpkg --revision=MiKernel.v
kernel_image kernel_headers kernel_source para crear los paquetes .deb con la imagen binaria del kernel, las cabeceras y las fuentes. - Una vez compilado el kernel y creado los correspondientes paquetes, que se make-kpkg los deja en /usr/src, se instalan los paquetes de imagen y fuentes. Las cabeceras no hace falta instalarlas ya que están incluidas en las fuentes (yo antes instalaba las fuentes y las cabeceras, método erróneo).
- Reininicar
- Recompilar el módulo de nVidia, más que nada para poder tener las X. Baasta con ejecutar el script de instalación que tengo en mi almace de software dde están controladores de nVidia que descargué de su web.
- Recompilar el resto de módulos no oficiales (los que he compilado yo, como el spca5xx de la webcam, que no vienen en el kernel oficial y por tanto no se compilan automáticamente).
Después de compialr e instalar MiKernel.v7 pruebo ALSA mediante alsaconf. Sin embargo, me avisa de que no encunetra tarjetas válidas.
Trato de ver si se ha reconocido la tarjeta:
# cat /proc/asound/cards
0 [VirMIDI ]: VirMIDI - VirMIDI
Virtual MIDI Card 1
1 [Live ]: EMU10K1 - Sound Blaster Live!
Sound Blaster Live! (rev.10) at 0xd000, irq 16
Pues parece que si. Veamos los dispositivos:
# cat /proc/asound/devices
1: : sequencer
0: [0- 0]: ctl
11: [0- 3]: raw midi
10: [0- 2]: raw midi
9: [0- 1]: raw midi
8: [0- 0]: raw midi
33: : timer
32: [1- 0]: ctl
36: [1- 0]: hardware dependent
40: [1- 0]: raw midi
51: [1- 3]: digital audio playback
58: [1- 2]: digital audio capture
57: [1- 1]: digital audio capture
48: [1- 0]: digital audio playback
56: [1- 0]: digital audio capture
38: [1- 2]: hardware dependent
41: [1- 1]: raw midi
42: [1- 2]: raw midi
Parece que también están ahí. Sin embargo, no reproduce:
# aplay /home/NaSz/ping.wavMe vuelvo a quedar sin ideas. Momento de recurrir al IRC, Freenode, canal #alsa:
aplay: main:508: audio open error: No such device
Now talking on #alsa
* Topic for #alsa is: Advanced Linux Sound Architecture || Unprofessional, unofficial support, see WIKI at http://alsa.opensrc.org/
* Topic for #alsa set by jcdutton at Mon Aug 23 00:38:12 2004
NaSz: hi
NaSz: I'm trying to get alsa working on Debian 2.6.8 kernel
NaSz: I've compiled the kernel with alsa built in and oss as modules
NaSz: now /proc/asound/cards and /proc/asound/devices show me my SoundBlaster Live! using emu10k1
NaSz: but when I test it with aplay I get "aplay: main:508: audio open error: No such device"
pzad: NaSz: look at /dev/snd/* if there are device files
NaSz: yes, a lot of files
pzad: what is in /proc/asound/cards
NaSz: # cat /proc/asound/cards
NaSz: 0 [VirMIDI ]: VirMIDI - VirMIDI
NaSz: Virtual MIDI Card 1
NaSz: 1 [Live ]: EMU10K1 - Sound Blaster Live!
NaSz: Sound Blaster Live! (rev.10) at 0xd000, irq 16
pzad: try
pzad: aplay -D plughw:1 some.wav
pzad: and alsamixer -c 1
NaSz: hey! it sounds!
pzad: did you compile alsa as modules or in to kernel
NaSz: in to kernel
pzad: your problem is virtual midi module - it is as first card and sb live is second
pzad: you can specify order of soundcards in kernel command line at oot time
pzad: for example snd-intel8x0.index=0 snd-emu10k1.index=1
NaSz: wich names I must use?
pzad: I think for you snd-emu10k1.index=0 snd-virmidi.index=1
Es decir, que el primer dispositivo de sonido es el MIDI virtual, que evidentemente no tiene las capcacidades de una tarjeta de sonido, por lo que alsaconf falla, ya que debe de usar el primer dispositivo que encuentra.
Es similar a lo que me pasaba con el soporte UltraDMA: se cargaban primero los controladores IDE genéricos que no tenían soporte para UltraDMA, y después los específicos para mi hardware, pero el núcleo usaba los primeros, por lo que no tenía UltraDMA.
Para solucionarlo se puede, como comenta pzad, pasarle unos parámetros al kernel de manera que coloque los dispositivos en un orden determinado, o recompilar el kernel eliminando el dispositivo MIDI virtual.
Decido que lo mejor es recompilar el kernel eliminado el soporte para el MIDI. Reconfiguro, recompilo, instalo, reinicio y compilo los módulos necesarios. Ejecuto alsaconf y ésta vez funciona. Abro el KDE y el sonido de bienvenida me indica que también funciona, como era de esperar, en KDE.
Nota: Dado que ya no uso ndiswrapper para la conexión inalámbrica, podría recompilar el kernel de nuevo con pilas de 4K en vez de 8K (los controladores de Windows que usaba ndiswrapper gustan de las pilas de 8K, pero con 4K se obtiene un rendimiento mayor del sistema).
0 Comments:
Publicar un comentario
<< Home