Página siguiente Página anterior Índice general

4. Proyecto para incorporar sonido a mi Debian

4.1 Antecedentes

Después de instalarme los programas de audio Xmixer y Xplaycd, observo que mi S.O. Linux Debian 1.3.1, que conseguí con la revista Linux Actual num 1, no tiene soporte de sonido :-((.

Leo el Howto-sonido del proyecto Lucas en el que señala como una de las primeras comprobaciones a realizar:

cat /dev/sndstat

al efectuar este comando me devuelve "No such device", que según el Howto significa que mi kernel no está compilado con soporte para sonido y me aconseja que lo recompile.

Posteo a las news de es.comp.os.linux para preguntar si alguien con Debian ha tenido el mismo problema y me pueden aconsejar qué hacer.

Me responden que, efectivamente: recompilar el núcleo con soporte para sonido. Hay que instalar las fuentes del kernel 2.0.30 con dselect y luego recompilar, aunque me advierten que mi tarjeta Pnp puede dar problemas.

Aprovechando que tengo que recompilar el núcleo, me voy a instalar ya de paso la versión 2.0.34 que viene con la revista PC Actual de Julio-Agosto-98.

4.2 Estudio del problema

El primer paso es recopilar información para guiarme en este proyecto :

Una vez estudiada toda esta información, se pueden extraer las siguientes conclusiones :

     La recompilación del kernel no ofrece ningún problema, ya que lo único
     que se genera es un fichero binario ejecutable. En mi caso, como arranco
     desde diskette si no me funcionara arrancaría desde el antiguo y ya
     está. Es cuestión de ir probando opciones en la configuración. 

     El controlador que viene con el kernel soporta, según la documentación,
     mi tarjeta Sound Blaster de 16 bits. 

     El problema estaría en que las tarjetas Pnp no están soportadas, pero al 
     parecer con una herramienta llamada "isapnp" o algo parecido, se podría
     resolver. 

Por tanto, la estrategia a seguir será la siguiente:

4.3 Compilación e instalación del kernel

Creación del archivo de configuración con xconfig

Lo primero es crear un fichero con las características que queremos que tenga nuestro nuevo Kernel, lo que vamos a hacer para generarlo es ejecutar el siguiente comando:

make xconfig

Ojo, hay que ejecutarlo estando posicionado en el directorio /usr/src/linux.

Solo se cargan como módulos (M) el soporte de puertos serie y el sonido. Originalmente se cargaba como módulo solo el driver del puerto serie, según se ve en el fichero /etc/modules (serial) que, al parecer es el que dice qué módulos se deben cargar. Siguiendo el consejo del post de Tendero, también incluyo el sonido (sound). Tampoco he tocado el fichero /etc/conf.modules.

De esto me he enterado después : si tienes una tarjeta Pnp el sonido hay que cargarlo como módulo obligatoriamente porque si no, se carga antes que el isapnp y no funciona.

Code maturity level options

        CONFIG_EXPERIMENTAL     
        Para versiones alpha    
        NO
Loadable module suport

        Enable loadable module suport (CONFIG_MODULES)
        Cargar módulos on-line
        YES

        Set versión information on all symbols for modules (CONFIG_MODVERSIONS)
        Verificar versiones de módulos al cargarlos
        YES

        Kernel daemon suport (CONFIG_KERNELD)
        Carga automática de módulos
        YES
General Setup

        Kernel math emulation (CONFIG_MATH_EMULATION)
        Simula coprocesador
        NO

        Networking suport (CONFIG_NET)
        Soporte de red
        YES

        Limit memory to low 16MB (CONFIG_MAX_16)
        Limite 16 MB de memoria
        NO

        PCI bios suport (CONFIG_PCI)
        Tarjetas con bus PCI
        YES

        System V IPC (CONFIG_SYSVIPC)
        Librerías IPC
        YES

        Kernel suport for a.out (CONFIG_BINFMT_AOUT)
        Soporte binarios a.out
        YES

        Kernel suport for ELF (CONFIG_BINFMT_ELF)
        Soporte binarios ELF
        YES

        Compile kernel as ELF (CONFIG_KERNEL_ELF)
        Sistemas con GCC ELF
        YES

        Procesor Type (CONFIG_M386)
        Tipo de procesador
        PENTIUM
Floppy, IDE, and other block devices

        Normal floppy disk support (CONFIG_BLK_DEV_FD)
        Unidad diskettera
        YES

        Enhaced IDE/MFM/RLL disck/cdrom/tape/floppy support (CONFIG_BLK_DEV_IDE)
        Soporte IDE
        YES

        Use old disk-only driver on primary interface (CONFIG_BLK_DEV_HD_IDE)
        NO

        Include IDE/ATAPI CDROM support (CONFIG_BLK_DEV_IDECD)
        Soporte CDROM IDE/ATAPI
        YES

        Include IDE/ATAPI TAPE support (CONFIG_BLK_DEV_IDETAPE)
        Soporte Cinta IDE/ATAPI
        NO

        Include IDE/ATAPI FLOPPY support (CONFIG_BLK_DEV_IDEFLOPPY)
        Soporte floppys IDE/ATAPI como Zip o Ls-120
        NO

        SCSI emulation support (CONFIG_BLK_DEV_IDESCSI)
        Emulación SCSI para dispositivos IDE/ATAPI
        NO

        Support removable IDE interfaces (PCMCIA) (CONFIG_BLK_DEV_IDE_PCMCIA)
        NO

        CMD640 bugfix support (CONFIG_BLK_DEV_CMD640)
        Resuelve un bug del chipset CMD640, utilizado en muchas placas madre
        YES

        CMD640 enhaced support (CONFIG_BLK_DEV_CMD640_ENHACED)
        NO

        RZ1000 bugfix support (CONFIG_BLK_DEV_RZ1000)
        Otro bug
        YES

        Interl 82371PIIX (Triton I/II) DMA support (CONFIG_BLK_DEV_TRITON)
        Soporte DMA para IDE interface chipset Triton
        YES

        Other IDE chipsets supports (CONFIG_IDE_CHIPSETS)
        Soporte para mas IDE's
        NO

        Loopback device support (CONFIG_BLK_DEV_LOOP)
        NO

        Múltiple devices drive support (CONFIG_BLK_DEV_MD)
        Varias particiones del HD en un bloque lógico
        NO

        Ramdisk support (CONFIG_BLK_RAM_DEV_RAM)
        Soporte para disco RAM
        NO

        XT hard-disk support (CONFIG_BLK_DEV_XD)
        NO
Networking options

        Network firewalls (CONFIG_FIREWALL)
        Configurar la maquina como firewall
        NO

        Network alliasing (CONFIG_NET_ALIAS)
        Múltiples direcciones IP
        NO

        TCP/IP networking (CONFIG_INET)
        Soporte Tcp/Ip
        YES

        IP forwarding gatewaying (CONFIG_IP_FORWARD)
        Configurar la maquina como router
        NO

        IP multicasting (CONFIG_IP_MULTICAST)
        NO

        IP syn cookies (CONFIG_SYN_COOKIES)
        Previene ataques Syn Floading
        NO

        IP accounting (CONFIG_IP_ACCT)
        Estadísticas IP
        NO

        IP optimize as router no host (CONFIG_IP_ROUTER)
        NO

        IP tunnelling (CONFIG_NET_IPIP)
        NO

        IP PC/TCP compatibility mode (CONFIG_INET_PCTCP)
        NO

        IP reverse ARP (CONFIG_INET_RARP)
        NO

        IP Dissable path MTU discovery (CONFIG_NO_PATH_MTU_DISCOVERY)
        NO

        IP drop source routed frames (CONFIG_IP_NOSR)
        Camino completo en paquetes IP
        YES

        IP Allow large windows (CONFIG_SKB_LARGE)
        YES

        The IPX protocol (CONFIG_IPX)
        Protocolo IPX de Novell
        NO

        Appletalk DDP (CONFIG_ATALK)
        Para Apple
        NO

        Amateur Radio AX25 L.2 (CONFIG_AX25)
        NO

        Kernel/user network link driver (CONFIG_NETLINK)
        NO
SCSI support

        SCSI support (CONFIG_SCSI)
        Soporte SCSI
        NO
Network device support

        Network device support (CONFIG_NETDEVICES)
        Soporte redes e Internet
        YES

        Dummy net drive support (CONFIG_DUMMY)
        YES

        EQL support (CONFIG_EQUALIZER)
        NO

        PLIP support (CONFIG_PLIP)
        Soporte Paralel Line Internet Protocol
        NO

        PPP support (CONFIG_PPP)
        Soporte Point to Point
        YES

        SLIP supporte (CONFIG_SLIP)
        Soporte serial line
        NO

        Radio network interfaces (CONFIG_NET_RADIO)
        NO

        Ethernet (10 or 100 Mbit) (CONFIG_NET_ETHERNET)
        Soporte red Ethernet
        NO

        Token Ring driver support (CONFIG_TR)
        NO

        FDDI driver support (CONFIG_FDDI)
        NO

        ARC NET support (CONFIG_ARCNET)
        NO
ISDN subsystem

        ISDN support (CONFIG_ISDN)
        NO
CDROM drivers

        Support non SCSI, IDE/ATAPI CD-ROM (CONFIG_CD_NO_IDESCSI)
        NO
Filesystems

        Quota support (CONFIG_QUOTA)
        Activar protecciones
        NO

        Minix fs support (CONFIG_MINIX_FS)
        Minix
        YES

        Extended fs support (CONFIG_EXT_FS)
        Ext
        NO

        Second Extended fs (CONFIG_EXT2_FS)
        Ext2
        YES

        Xiafs filesystem support (CONFIG_XIA_FS)
        Xiafs
        NO

        Native Language support (CONFIG_NLS)
        YES

        Iso 9660 Cd-Rom filesystem support (CONFIG_ISO9660_FS)
        Iso9660
        YES

        DOS FAT fs support (CONFIG_FAT_FS)
        Fat
        YES

        MSDOS fs support (CONFIG_MSDOS_FS)
        Msdos
        YES

        Umsdos (CONFIG_UMSDOS_FS)
        Umsdos
        YES

        VFAT (W95) fs support (CONFIG_VFAT_FS)
        Vfat
        YES

        Codepage NNN (CONFIG_NLS_CODEPAGE_NNN)
        NO

        Codepage 850 (CONFIG_NLS_CODEPAGE_850)
        Spain ...
        YES

        NLS-ISO-8859-1 (CONFIG_NLS_ISO8859_1)
        Spain ...
        YES

        NLS-ISO-8859-N (CONFIG_NLS_ISO8859-N)
        NO

        /proc fs support (CONFIG_PROC_FS)
        Proc
        YES

        NFS fs support (CONFIG_NFS_FS)
        Nfs
        YES

        Root filesystem on NFS (CONFIG_ROOT_NFS)
        NO

        SMB fs support (CONFIG_SMB_FS)
        NO

        OS2 HPFS fs support (CONFIG_HPFS_FS)
        NO

        System V fs support (CONFIG_SYSV_FS)
        NO

        UFS fs support (CONFIG_UFS_FS)
        NO
Character Devices

        Standard/generic serial support (CONFIG_SERIAL)
        Puertos serie
        M

        Digiboard PC/Xx support (CONFIG_DIGI)
        NO

        Cyclades ass mux suport (CONFIG_CYCLADES)
        NO

        Stallion multiport support (CONFIG_STALDRV)
        NO

        Sdl Ris Com8 card support (CONFIG_RISCOM8)
        NO

        Paralell printer support (CONFIG_PRINTER)
        YES

        Specialix IO8 card support (CONFIG_SPECIALIX)
        NO

        Mousse support (not serial mice) (CONFIG_MOUSE)
        Ratones a puerto COM (Ps2,etc)
        NO

        Support for user misc device modules (CONFIG_UMISC)
        NO

        QIC 02 tape support (CONFIG_QIC02_TAPE)
        NO

        Ftape support (CONFIG_FTAPE)
        NO

        Advanced power management BIOS support (CONFIG_APM)
        NO

        Watchdog timer support (CONFIG_WATCHDOG)
        NO

        Enhaced Real Time support (CONFIG_RTC)
        YES
Sound

        Solo se listan las opciones elegidas

        Sound card support (CONFIG_SOUND)
        M

        Sound Blaster support (CONFIG_SB)
        YES

        /dev/dsp and /dev/audio support (CONFIG_AUDIO)
        YES

        MIDI interface support (CONFIG_MIDI)
        YES

        FM synteticer support (CONFIG_YM38)
        YES

        I/O Base        
        220

        IRQ     
        Por defecto salía 7      
        5

        DMA 8 bits
        1

        DMA 16 bits
        5

        MPU I/O Base
        Por defecto salía 0
        300

        Audio DMA Buffer size
        65536
Kernel hacking

        Kernel profiling support
        CONFIG_PROFILE
        Para pruebas

Generación del kernel con soporte de sonido

SECUENCIA DE COMANDOS (siempre en /usr/src/linux) :

Make dep

Establece las dependencias entre los módulos seleccionados

Make clean

Limpia los restos de anteriores compilaciones, importante ya que make solo compila los archivos no construidos

Make zdisk

Generar la imagen del kernel en /usr/src/linux/arch/i386/boot/zimage y deja además una copia en diskette (yo arranco con diskette).

En un primer intento me da el error: AS86 not found (no lo había instalado). Instalo el paquete bin86 con dselect. Vuelvo a ejecutar el comando y funciona sin problemas.

Make modules

Compila los módulos seleccionados como cargables en ejecución y los deja en el árbol de directorios de las fuentes.

Make modules_install

Copia los módulos creados y sus dependencias a /lib/modules/2.0.34 que es donde los busca la herramienta que efectúa la carga.

Una vez efectuados estos pasos, a continuación, modifico el fichero /etc/modules incorporando la palabra sound debajo de serial, tal y como sugiere Tendero en su post.

Es la hora de comprobar si todo ha ido correctamente, para ello, inserto el diskette con el nuevo kernel y rearranco el sistema.

En un principio todo parece haber ido bien, sin embargo, sigo sin sonido ...

4.4 Resolución del problema de las tarjetas de sonido Pnp

Para verificar si tengo sonido, he insertado un cd de música en el cd-rom y después he ejecutado xplaycd. Al principio me ha dado que tengo que ser root para poder montar el cd-rom, después me he puesto como root y he vuelto a hacer la misma operación, todo ha funcionado bien excepto que ... no se oía nada.

Hago /sbin/lsmod para saber los módulos cargados como residentes en el kernel y me sale solo "serial".

Hago /sbin/depmod -a , y después /sbin/modprobe sound, para cargar manualmente el módulo, y ahora, al hacer /sbin/lsmod sí me sale "sound".

Ahora sigo las instrucciones del Howto-sonido:

     Ejecuto el comando ls -l /dev/sndstat y me sale correcto 

     El comando cat /dev/sndstat sale muy parecido excepto que 
     audio devices, synth devices, midi devices y mixers, salen vacíos.

Visto que no termina de ir bien la cosa, yo creo que el problema puede estar en que actualmente Linux no soporta muy bien las tarjetas Pnp, pero al parecer hay un paquete de programas que pueden solucionar el tema (isapnptools).

Estudiemos el tema del isapnp:

     tengo instalados los siguientes ficheros : 

          /sbin/isapnp 

          /etc/isapnp.conf 

          /etc/init.d/isapnp 

          /usr/doc/isapnptools/INSTALL , Readme_DEBIAN 

     Hay que generar el fichero /etc/isapnp.conf tal y como se explica en
     /usr/doc/isapnptools/INSTALL, es decir, utilizando el comando 

          pnpdump > etc/isapnp.conf 

          este comando me ha generado un fichero isapnp.conf en el que se
          detectan dos tarjetas Pnp (?): 

               SLI4161 - SYM 53C416 - Device support I/O range check register 

               CTL0070 - Creative ViBRA16C PnP - Logical device CTL0001 - Audio 

               --------------------------------- Logical device CTL0070 - Game 

     Ahora me leo las instrucciones (man isapnp.conf) para depurar el
     fichero. 

     Dejo solo lo referente a Audio y Game : 

               (READPORT 0x0203) 

               (ISOLATE) 

               (IDENTIFY *) 
                 
               (CONFIGURE CTL0070/-1 (LD 0 

               # ANSI string -- >Audio< -- 

               (INT 0 (IRQ 5 (MODE +E))) 

               (DMA 0 (CHANNEL 1)) 

               (DMA 1 (CHANNEL 5)) 

               (IO 0 (BASE 0x0220)) 

               (IO 1 (BASE 0x0330)) 

               (IO 2 (BASE 0x0388)) 

               (ACT Y) 

               )) 

               (CONFIGURE CTL0070/-1 (LD 1 

               # ANSI string -- <Game>-- 

               )) 

               (WAITFORKEY) 

Siguiendo las instrucciones ejecuto como root isapnp /etc/isapnp.config.

No me da error alguno. Ahora cat /dev/sndstat me sale correcto.

Ahora hay que meter isapnp en el arranque (/etc/init.d/boot), tal como se explica
en /usr/doc/isapnptools/Readme.Debian. (!!!! ya lo tenia !!!!).

Por último ... rearranco linux ... meto el cd de Los Ronaldos ... ejecuto xplaycd ... y ...

!!!!!!!! FUNCIONA !!!!!!!!!!!!!

Parece que por fin he conseguido que funcione todo, no ha sido tan difícil como pensaba, pero teniendo en cuenta que soy bastante novato y además solo un aficionado, no está mal. Por cierto, los midi todavía no me funcionan.

*****************************************************************************

DOCUMENTOS

Post de Tendero

Subject: Como he configurado mi Awe64 ... y funciona !!!
From: TENDERO@argen.net
Date: 1998/07/07
Newsgroups: es.comp.os.linux

hay va la forma en que he configurado mi Awe64 en Debian 1.3.1

0) instalar el driver (paquete awedrv-0.3.3c, sección sound)

1) configurar el núcleo. Como el driver hay que cargarlo en forma de modulo,es necesario configurar el kernel con soporte para estos. En la opcion de sonido tengo:

        [M] Sound card support
        [*] Sound blaster (SB, SBpro, SB16, clones) support
        [*] MPU-401 support (NOT for SB)
        [*] /dev/dsp and /dev/audio support
        [*] MIDI interface support
        [*] FM synthesizer (YM3812/OPL-3) support
        (220) I/O base for SB Check from manual of the card
        (5) Sound Blaster IRQ Check from manual of the card
        (1) Sound Blaster DMA 0, 1 or 3
        (5) Sound Blaster 16 bit DMA (_REQUIRED_for SB16, Jazz16, SMW)
        (0) MPU401 I/O base of SB16, Jazz16 and ES1688 Check from manual of
        (-1) SB MPU401 IRQ (Jazz16, SM Wave and ES1688) Use -1 with SB16
        (330) I/O base for MPU401 Check from manual of the card
        (9) MPU401 IRQ Check from manual of the card
        (65536) Audio DMA buffer size 4096, 16384, 32768 or 65536
        [*] Additional low level drivers
        [*] AWE32 synth
Como el sonido esta cargado como modulo, compilo el kernel una sola vez, y cuando tengo que modificar algo del audio, solo hago make_modules y make modules_install, sin necesidad de recompilar ni instalar el núcleo.

El archivo /etc/conf.modules no lo he tocado y simplemente he insertado

sound

en el archivo /etc/modules.

2) Además, como mi tarjeta de PnP, he tenido que utilizar las isapnp, creando el archivo de configuración

Mi tarjeta de sonido

Recompilacion del kernel


Página siguiente Página anterior Índice general