| Introduction Notes on Modular Sound Drivers and Soundcore | |
| Wade Hampton | |
| 2/14/2001 | |
| Purpose: | |
| ======== | |
| This document provides some general notes on the modular | |
| sound drivers and their configuration, along with the | |
| support modules sound.o and soundcore.o. | |
| Note, some of this probably should be added to the Sound-HOWTO! | |
| Note, soundlow.o was present with 2.2 kernels but is not | |
| required for 2.4.x kernels. References have been removed | |
| to this. | |
| Copying: | |
| ======== | |
| none | |
| History: | |
| ======== | |
| 0.1.0 11/20/1998 First version, draft | |
| 1.0.0 11/1998 Alan Cox changes, incorporation in 2.2.0 | |
| as Documentation/sound/oss/Introduction | |
| 1.1.0 6/30/1999 Second version, added notes on making the drivers, | |
| added info on multiple sound cards of similar types,] | |
| added more diagnostics info, added info about esd. | |
| added info on OSS and ALSA. | |
| 1.1.1 19991031 Added notes on sound-slot- and sound-service. | |
| (Alan Cox) | |
| 1.1.2 20000920 Modified for Kernel 2.4 (Christoph Hellwig) | |
| 1.1.3 20010214 Minor notes and corrections (Wade Hampton) | |
| Added examples of sound-slot-0, etc. | |
| Modular Sound Drivers: | |
| ====================== | |
| Thanks to the GREAT work by Alan Cox (alan@lxorguk.ukuu.org.uk), | |
| [And Oleg Drokin, Thomas Sailer, Andrew Veliath and more than a few | |
| others - not to mention Hannu's original code being designed well | |
| enough to cope with that kind of chopping up](Alan) | |
| the standard Linux kernels support a modular sound driver. From | |
| Alan's comments in linux/drivers/sound/README.FIRST: | |
| The modular sound driver patches were funded by Red Hat Software | |
| (www.redhat.com). The sound driver here is thus a modified version of | |
| Hannu's code. Please bear that in mind when considering the appropriate | |
| forums for bug reporting. | |
| The modular sound drivers may be loaded via insmod or modprobe. | |
| To support all the various sound modules, there are two general | |
| support modules that must be loaded first: | |
| soundcore.o: Top level handler for the sound system, provides | |
| a set of functions for registration of devices | |
| by type. | |
| sound.o: Common sound functions required by all modules. | |
| For the specific sound modules (e.g., sb.o for the Soundblaster), | |
| read the documentation on that module to determine what options | |
| are available, for example IRQ, address, DMA. | |
| Warning, the options for different cards sometime use different names | |
| for the same or a similar feature (dma1= versus dma16=). As a last | |
| resort, inspect the code (search for module_param). | |
| Notes: | |
| 1. There is a new OpenSource sound driver called ALSA which is | |
| currently under development: http://www.alsa-project.org/ | |
| The ALSA drivers support some newer hardware that may not | |
| be supported by this sound driver and also provide some | |
| additional features. | |
| 2. The commercial OSS driver may be obtained from the site: | |
| http://www.opensound.com. This may be used for cards that | |
| are unsupported by the kernel driver, or may be used | |
| by other operating systems. | |
| 3. The enlightenment sound daemon may be used for playing | |
| multiple sounds at the same time via a single card, eliminating | |
| some of the requirements for multiple sound card systems. For | |
| more information, see: http://www.tux.org/~ricdude/EsounD.html | |
| The "esd" program may be used with the real-player and mpeg | |
| players like mpg123 and x11amp. The newer real-player | |
| and some games even include built-in support for ESD! | |
| Building the Modules: | |
| ===================== | |
| This document does not provide full details on building the | |
| kernel, etc. The notes below apply only to making the kernel | |
| sound modules. If this conflicts with the kernel's README, | |
| the README takes precedence. | |
| 1. To make the kernel sound modules, cd to your /usr/src/linux | |
| directory (typically) and type make config, make menuconfig, | |
| or make xconfig (to start the command line, dialog, or x-based | |
| configuration tool). | |
| 2. Select the Sound option and a dialog will be displayed. | |
| 3. Select M (module) for "Sound card support". | |
| 4. Select your sound driver(s) as a module. For ProAudio, Sound | |
| Blaster, etc., select M (module) for OSS sound modules. | |
| [thanks to Marvin Stodolsky <stodolsk@erols.com>]A | |
| 5. Make the kernel (e.g., make bzImage), and install the kernel. | |
| 6. Make the modules and install them (make modules; make modules_install). | |
| Note, for 2.5.x kernels, make sure you have the newer module-init-tools | |
| installed or modules will not be loaded properly. 2.5.x requires an | |
| updated module-init-tools. | |
| Plug and Play (PnP: | |
| =================== | |
| If the sound card is an ISA PnP card, isapnp may be used | |
| to configure the card. See the file isapnp.txt in the | |
| directory one level up (e.g., /usr/src/linux/Documentation). | |
| Also the 2.4.x kernels provide PnP capabilities, see the | |
| file NEWS in this directory. | |
| PCI sound cards are highly recommended, as they are far | |
| easier to configure and from what I have read, they use | |
| less resources and are more CPU efficient. | |
| INSMOD: | |
| ======= | |
| If loading via insmod, the common modules must be loaded in the | |
| order below BEFORE loading the other sound modules. The card-specific | |
| modules may then be loaded (most require parameters). For example, | |
| I use the following via a shell script to load my SoundBlaster: | |
| SB_BASE=0x240 | |
| SB_IRQ=9 | |
| SB_DMA=3 | |
| SB_DMA2=5 | |
| SB_MPU=0x300 | |
| # | |
| echo Starting sound | |
| /sbin/insmod soundcore | |
| /sbin/insmod sound | |
| # | |
| echo Starting sound blaster.... | |
| /sbin/insmod uart401 | |
| /sbin/insmod sb io=$SB_BASE irq=$SB_IRQ dma=$SB_DMA dma16=$SB_DMA2 mpu_io=$SB_MP | |
| When using sound as a module, I typically put these commands | |
| in a file such as /root/soundon.sh. | |
| MODPROBE: | |
| ========= | |
| If loading via modprobe, these common files are automatically loaded | |
| when requested by modprobe. For example, my /etc/modprobe.conf contains: | |
| alias sound sb | |
| options sb io=0x240 irq=9 dma=3 dma16=5 mpu_io=0x300 | |
| All you need to do to load the module is: | |
| /sbin/modprobe sb | |
| Sound Status: | |
| ============= | |
| The status of sound may be read/checked by: | |
| cat (anyfile).au >/dev/audio | |
| [WWH: This may not work properly for SoundBlaster PCI 128 cards | |
| such as the es1370/1 (see the es1370/1 files in this directory) | |
| as they do not automatically support uLaw on /dev/audio.] | |
| The status of the modules and which modules depend on | |
| which other modules may be checked by: | |
| /sbin/lsmod | |
| /sbin/lsmod should show something like the following: | |
| sb 26280 0 | |
| uart401 5640 0 [sb] | |
| sound 57112 0 [sb uart401] | |
| soundcore 1968 8 [sb sound] | |
| Removing Sound: | |
| =============== | |
| Sound may be removed by using /sbin/rmmod in the reverse order | |
| in which you load the modules. Note, if a program has a sound device | |
| open (e.g., xmixer), that module (and the modules on which it | |
| depends) may not be unloaded. | |
| For example, I use the following to remove my Soundblaster (rmmod | |
| in the reverse order in which I loaded the modules): | |
| /sbin/rmmod sb | |
| /sbin/rmmod uart401 | |
| /sbin/rmmod sound | |
| /sbin/rmmod soundcore | |
| When using sound as a module, I typically put these commands | |
| in a script such as /root/soundoff.sh. | |
| Removing Sound for use with OSS: | |
| ================================ | |
| If you get really stuck or have a card that the kernel modules | |
| will not support, you can get a commercial sound driver from | |
| http://www.opensound.com. Before loading the commercial sound | |
| driver, you should do the following: | |
| 1. remove sound modules (detailed above) | |
| 2. remove the sound modules from /etc/modprobe.conf | |
| 3. move the sound modules from /lib/modules/<kernel>/misc | |
| (for example, I make a /lib/modules/<kernel>/misc/tmp | |
| directory and copy the sound module files to that | |
| directory). | |
| Multiple Sound Cards: | |
| ===================== | |
| The sound drivers will support multiple sound cards and there | |
| are some great applications like multitrack that support them. | |
| Typically, you need two sound cards of different types. Note, this | |
| uses more precious interrupts and DMA channels and sometimes | |
| can be a configuration nightmare. I have heard reports of 3-4 | |
| sound cards (typically I only use 2). You can sometimes use | |
| multiple PCI sound cards of the same type. | |
| On my machine I have two sound cards (cs4232 and Soundblaster Vibra | |
| 16). By loading sound as modules, I can control which is the first | |
| sound device (/dev/dsp, /dev/audio, /dev/mixer) and which is | |
| the second. Normally, the cs4232 (Dell sound on the motherboard) | |
| would be the first sound device, but I prefer the Soundblaster. | |
| All you have to do is to load the one you want as /dev/dsp | |
| first (in my case "sb") and then load the other one | |
| (in my case "cs4232"). | |
| If you have two cards of the same type that are jumpered | |
| cards or different PnP revisions, you may load the same | |
| module twice. For example, I have a SoundBlaster vibra 16 | |
| and an older SoundBlaster 16 (jumpers). To load the module | |
| twice, you need to do the following: | |
| 1. Copy the sound modules to a new name. For example | |
| sb.o could be copied (or symlinked) to sb1.o for the | |
| second SoundBlaster. | |
| 2. Make a second entry in /etc/modprobe.conf, for example, | |
| sound1 or sb1. This second entry should refer to the | |
| new module names for example sb1, and should include | |
| the I/O, etc. for the second sound card. | |
| 3. Update your soundon.sh script, etc. | |
| Warning: I have never been able to get two PnP sound cards of the | |
| same type to load at the same time. I have tried this several times | |
| with the Soundblaster Vibra 16 cards. OSS has indicated that this | |
| is a PnP problem.... If anyone has any luck doing this, please | |
| send me an E-MAIL. PCI sound cards should not have this problem.a | |
| Since this was originally release, I have received a couple of | |
| mails from people who have accomplished this! | |
| NOTE: In Linux 2.4 the Sound Blaster driver (and only this one yet) | |
| supports multiple cards with one module by default. | |
| Read the file 'Soundblaster' in this directory for details. | |
| Sound Problems: | |
| =============== | |
| First RTFM (including the troubleshooting section | |
| in the Sound-HOWTO). | |
| 1) If you are having problems loading the modules (for | |
| example, if you get device conflict errors) try the | |
| following: | |
| A) If you have Win95 or NT on the same computer, | |
| write down what addresses, IRQ, and DMA channels | |
| those were using for the same hardware. You probably | |
| can use these addresses, IRQs, and DMA channels. | |
| You should really do this BEFORE attempting to get | |
| sound working! | |
| B) Check (cat) /proc/interrupts, /proc/ioports, | |
| and /proc/dma. Are you trying to use an address, | |
| IRQ or DMA port that another device is using? | |
| C) Check (cat) /proc/isapnp | |
| D) Inspect your /var/log/messages file. Often that will | |
| indicate what IRQ or IO port could not be obtained. | |
| E) Try another port or IRQ. Note this may involve | |
| using the PnP tools to move the sound card to | |
| another location. Sometimes this is the only way | |
| and it is more or less trial and error. | |
| 2) If you get motor-boating (the same sound or part of a | |
| sound clip repeated), you probably have either an IRQ | |
| or DMA conflict. Move the card to another IRQ or DMA | |
| port. This has happened to me when playing long files | |
| when I had an IRQ conflict. | |
| 3. If you get dropouts or pauses when playing high sample | |
| rate files such as using mpg123 or x11amp/xmms, you may | |
| have too slow of a CPU and may have to use the options to | |
| play the files at 1/2 speed. For example, you may use | |
| the -2 or -4 option on mpg123. You may also get this | |
| when trying to play mpeg files stored on a CD-ROM | |
| (my Toshiba T8000 PII/366 sometimes has this problem). | |
| 4. If you get "cannot access device" errors, your /dev/dsp | |
| files, etc. may be set to owner root, mode 600. You | |
| may have to use the command: | |
| chmod 666 /dev/dsp /dev/mixer /dev/audio | |
| 5. If you get "device busy" errors, another program has the | |
| sound device open. For example, if using the Enlightenment | |
| sound daemon "esd", the "esd" program has the sound device. | |
| If using "esd", please RTFM the docs on ESD. For example, | |
| esddsp <program> may be used to play files via a non-esd | |
| aware program. | |
| 6) Ask for help on the sound list or send E-MAIL to the | |
| sound driver author/maintainer. | |
| 7) Turn on debug in drivers/sound/sound_config.h (DEB, DDB, MDB). | |
| 8) If the system reports insufficient DMA memory then you may want to | |
| load sound with the "dmabufs=1" option. Or in /etc/conf.modules add | |
| preinstall sound dmabufs=1 | |
| This makes the sound system allocate its buffers and hang onto them. | |
| You may also set persistent DMA when building a 2.4.x kernel. | |
| Configuring Sound: | |
| ================== | |
| There are several ways of configuring your sound: | |
| 1) On the kernel command line (when using the sound driver(s) | |
| compiled in the kernel). Check the driver source and | |
| documentation for details. | |
| 2) On the command line when using insmod or in a bash script | |
| using command line calls to load sound. | |
| 3) In /etc/modprobe.conf when using modprobe. | |
| 4) Via Red Hat's GPL'd /usr/sbin/sndconfig program (text based). | |
| 5) Via the OSS soundconf program (with the commercial version | |
| of the OSS driver. | |
| 6) By just loading the module and let isapnp do everything relevant | |
| for you. This works only with a few drivers yet and - of course - | |
| only with isapnp hardware. | |
| And I am sure, several other ways. | |
| Anyone want to write a linuxconf module for configuring sound? | |
| Module Loading: | |
| =============== | |
| When a sound card is first referenced and sound is modular, the sound system | |
| will ask for the sound devices to be loaded. Initially it requests that | |
| the driver for the sound system is loaded. It then will ask for | |
| sound-slot-0, where 0 is the first sound card. (sound-slot-1 the second and | |
| so on). Thus you can do | |
| alias sound-slot-0 sb | |
| To load a soundblaster at this point. If the slot loading does not provide | |
| the desired device - for example a soundblaster does not directly provide | |
| a midi synth in all cases then it will request "sound-service-0-n" where n | |
| is | |
| 0 Mixer | |
| 2 MIDI | |
| 3, 4 DSP audio | |
| For example, I use the following to load my Soundblaster PCI 128 | |
| (ES 1371) card first, followed by my SoundBlaster Vibra 16 card, | |
| then by my TV card: | |
| # Load the Soundblaster PCI 128 as /dev/dsp, /dev/dsp1, /dev/mixer | |
| alias sound-slot-0 es1371 | |
| # Load the Soundblaster Vibra 16 as /dev/dsp2, /dev/mixer1 | |
| alias sound-slot-1 sb | |
| options sb io=0x240 irq=5 dma=1 dma16=5 mpu_io=0x330 | |
| # Load the BTTV (TV card) as /dev/mixer2 | |
| alias sound-slot-2 bttv | |
| alias sound-service-2-0 tvmixer | |
| pre-install bttv modprobe tuner ; modprobe tvmixer | |
| pre-install tvmixer modprobe msp3400; modprobe tvaudio | |
| options tuner debug=0 type=8 | |
| options bttv card=0 radio=0 pll=0 | |
| For More Information (RTFM): | |
| ============================ | |
| 1) Information on kernel modules: manual pages for insmod and modprobe. | |
| 2) Information on PnP, RTFM manual pages for isapnp. | |
| 3) Sound-HOWTO and Sound-Playing-HOWTO. | |
| 4) OSS's WWW site at http://www.opensound.com. | |
| 5) All the files in Documentation/sound. | |
| 6) The comments and code in linux/drivers/sound. | |
| 7) The sndconfig and rhsound documentation from Red Hat. | |
| 8) The Linux-sound mailing list: sound-list@redhat.com. | |
| 9) Enlightenment documentation (for info on esd) | |
| http://www.tux.org/~ricdude/EsounD.html. | |
| 10) ALSA home page: http://www.alsa-project.org/ | |
| Contact Information: | |
| ==================== | |
| Wade Hampton: (whampton@staffnet.com) | |