About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Documentation / sound / oss / Introduction

Custom Search

Based on kernel version 3.13. Page generated on 2014-01-20 22:04 EST.

1	Introduction	Notes on Modular Sound Drivers and Soundcore
2	Wade Hampton 
3	2/14/2001
5	Purpose:  
6	========
7	This document provides some general notes on the modular 
8	sound drivers and their configuration, along with the 
9	support modules sound.o and soundcore.o.
11	Note, some of this probably should be added to the Sound-HOWTO!
13	Note, soundlow.o was present with 2.2 kernels but is not 
14	required for 2.4.x kernels.  References have been removed
15	to this.
18	Copying:
19	========
20	none
23	History:
24	========
25	0.1.0  11/20/1998  First version, draft
26	1.0.0  11/1998     Alan Cox changes, incorporation in 2.2.0
27	                   as Documentation/sound/oss/Introduction
28	1.1.0  6/30/1999   Second version, added notes on making the drivers,
29	                   added info on multiple sound cards of similar types,]
30	                   added more diagnostics info, added info about esd.
31	                   added info on OSS and ALSA.
32	1.1.1  19991031	   Added notes on sound-slot- and sound-service.
33				(Alan Cox)
34	1.1.2  20000920    Modified for Kernel 2.4 (Christoph Hellwig)
35	1.1.3  20010214    Minor notes and corrections (Wade Hampton)
36	                   Added examples of sound-slot-0, etc.
39	Modular Sound Drivers:
40	======================
42	Thanks to the GREAT work by Alan Cox (alan@lxorguk.ukuu.org.uk),
44	[And Oleg Drokin, Thomas Sailer, Andrew Veliath and more than a few 
45	 others - not to mention Hannu's original code being designed well
46	 enough to cope with that kind of chopping up](Alan)
48	the standard Linux kernels support a modular sound driver.  From
49	Alan's comments in linux/drivers/sound/README.FIRST:
51	  The modular sound driver patches were funded by Red Hat Software 
52	  (www.redhat.com). The sound driver here is thus a modified version of 
53	  Hannu's code. Please bear that in mind when considering the appropriate
54	  forums for bug reporting.
56	The modular sound drivers may be loaded via insmod or modprobe.  
57	To support all the various sound modules, there are two general 
58	support modules that must be loaded first:
60	   soundcore.o:   Top level handler for the sound system, provides
61	                  a set of functions for registration of devices
62	                  by type.
64	   sound.o:       Common sound functions required by all modules.
66	For the specific sound modules (e.g., sb.o for the Soundblaster), 
67	read the documentation on that module to determine what options
68	are available, for example IRQ, address, DMA.
70	Warning, the options for different cards sometime use different names 
71	for the same or a similar feature (dma1= versus dma16=).  As a last 
72	resort, inspect the code (search for module_param).
74	Notes:
76	1.  There is a new OpenSource sound driver called ALSA which is
77	    currently under development:  http://www.alsa-project.org/
78	    The ALSA drivers support some newer hardware that may not 
79	    be supported by this sound driver and also provide some 
80	    additional features.
82	2.  The commercial OSS driver may be obtained from the site:
83	    http://www.opensound.com.  This may be used for cards that
84	    are unsupported by the kernel driver, or may be used
85	    by other operating systems.  
87	3.  The enlightenment sound daemon may be used for playing
88	    multiple sounds at the same time via a single card, eliminating
89	    some of the requirements for multiple sound card systems.  For
90	    more information, see:  http://www.tux.org/~ricdude/EsounD.html  
91	    The "esd" program may be used with the real-player and mpeg 
92	    players like mpg123 and x11amp.  The newer real-player 
93	    and some games even include built-in support for ESD!
96	Building the Modules:
97	=====================
99	This document does not provide full details on building the 
100	kernel, etc.  The notes below apply only to making the kernel
101	sound modules.   If this conflicts with the kernel's README,
102	the README takes precedence. 
104	1.  To make the kernel sound modules, cd to your /usr/src/linux
105	    directory (typically) and type make config, make menuconfig, 
106	    or make xconfig (to start the command line, dialog, or x-based
107	    configuration tool).  
109	2.  Select the Sound option and a dialog will be displayed.  
111	3.  Select M (module) for "Sound card support".
113	4.  Select your sound driver(s) as a module.  For ProAudio, Sound
114	    Blaster, etc., select M (module) for OSS sound modules.
115	    [thanks to Marvin Stodolsky <stodolsk@erols.com>]A
117	5.  Make the kernel (e.g., make bzImage), and install the kernel.
119	6.  Make the modules and install them (make modules; make modules_install).
121	Note, for 2.5.x kernels, make sure you have the newer module-init-tools 
122	installed or modules will not be loaded properly.  2.5.x requires an
123	updated module-init-tools.
126	Plug and Play (PnP:
127	===================
129	If the sound card is an ISA PnP card, isapnp may be used
130	to configure the card.  See the file isapnp.txt in the 
131	directory one level up (e.g., /usr/src/linux/Documentation).
133	Also the 2.4.x kernels provide PnP capabilities, see the 
134	file NEWS in this directory.
136	PCI sound cards are highly recommended, as they are far 
137	easier to configure and from what I have read, they use
138	less resources and are more CPU efficient.
142	=======
144	If loading via insmod, the common modules must be loaded in the 
145	order below BEFORE loading the other sound modules.  The card-specific
146	modules may then be loaded (most require parameters).  For example,
147	I use the following via a shell script to load my SoundBlaster:
149	SB_BASE=0x240
150	SB_IRQ=9
151	SB_DMA=3
152	SB_DMA2=5
153	SB_MPU=0x300
154	#
155	echo Starting sound
156	/sbin/insmod soundcore
157	/sbin/insmod sound  
158	#
159	echo Starting sound blaster....
160	/sbin/insmod uart401
161	/sbin/insmod sb io=$SB_BASE irq=$SB_IRQ dma=$SB_DMA dma16=$SB_DMA2 mpu_io=$SB_MP
163	When using sound as a module, I typically put these commands
164	in a file such as /root/soundon.sh.
168	=========
170	If loading via modprobe, these common files are automatically loaded when
171	requested by modprobe.  For example, my /etc/modprobe.d/oss.conf contains:
173	alias sound sb 
174	options sb io=0x240 irq=9 dma=3 dma16=5 mpu_io=0x300
176	All you need to do to load the module is:
178		/sbin/modprobe sb
181	Sound Status:
182	=============
184	The status of sound may be read/checked by:
185	        cat (anyfile).au >/dev/audio
187	[WWH:  This may not work properly for SoundBlaster PCI 128 cards
188	such as the es1370/1 (see the es1370/1 files in this directory) 
189	as they do not automatically support uLaw on /dev/audio.]
191	The status of the modules and which modules depend on 
192	which other modules may be checked by:
193		/sbin/lsmod
195	/sbin/lsmod should show something like the following:
196		sb                     26280   0 
197		uart401                 5640   0  [sb]
198		sound                  57112   0  [sb uart401]
199		soundcore               1968   8  [sb sound]
202	Removing Sound: 
203	=============== 
205	Sound may be removed by using /sbin/rmmod in the reverse order
206	in which you load the modules.  Note, if a program has a sound device
207	open (e.g., xmixer), that module (and the modules on which it 
208	depends) may not be unloaded.
210	For example, I use the following to remove my Soundblaster (rmmod
211	in the reverse order in which I loaded the modules):
213	/sbin/rmmod sb
214	/sbin/rmmod uart401
215	/sbin/rmmod sound
216	/sbin/rmmod soundcore
218	When using sound as a module, I typically put these commands
219	in a script such as /root/soundoff.sh.
222	Removing Sound for use with OSS: 
223	================================ 
225	If you get really stuck or have a card that the kernel modules
226	will not support, you can get a commercial sound driver from
227	http://www.opensound.com.  Before loading the commercial sound
228	driver, you should do the following:
230	1.  remove sound modules (detailed above)
231	2.  remove the sound modules from /etc/modprobe.d/*.conf
232	3.  move the sound modules from /lib/modules/<kernel>/misc
233	    (for example, I make a /lib/modules/<kernel>/misc/tmp
234	    directory and copy the sound module files to that 
235	    directory).
238	Multiple Sound Cards:
239	=====================
241	The sound drivers will support multiple sound cards and there
242	are some great applications like multitrack that support them.  
243	Typically, you need two sound cards of different types.  Note, this
244	uses more precious interrupts and DMA channels and sometimes 
245	can be a configuration nightmare.  I have heard reports of 3-4
246	sound cards (typically I only use 2).  You can sometimes use
247	multiple PCI sound cards of the same type.
249	On my machine I have two sound cards (cs4232 and Soundblaster Vibra
250	16).  By loading sound as modules, I can control which is the first
251	sound device (/dev/dsp, /dev/audio, /dev/mixer) and which is 
252	the second.  Normally, the cs4232 (Dell sound on the motherboard) 
253	would be the first sound device, but I prefer the Soundblaster.  
254	All you have to do is to load the one you want as /dev/dsp 
255	first (in my case "sb") and then load the other one
256	(in my case "cs4232").
258	If you have two cards of the same type that are jumpered 
259	cards or different PnP revisions, you may load the same 
260	module twice.  For example, I have a SoundBlaster vibra 16
261	and an older SoundBlaster 16 (jumpers).  To load the module
262	twice, you need to do the following:
264	1.  Copy the sound modules to a new name.  For example
265	    sb.o could be copied (or symlinked) to sb1.o for the
266	    second SoundBlaster.
268	2.  Make a second entry in /etc/modprobe.d/*conf, for example,
269	    sound1 or sb1.  This second entry should refer to the
270	    new module names for example sb1, and should include
271	    the I/O, etc. for the second sound card.
273	3.  Update your soundon.sh script, etc.
275	Warning:  I have never been able to get two PnP sound cards of the
276	same type to load at the same time.  I have tried this several times
277	with the Soundblaster Vibra 16 cards.  OSS has indicated that this
278	is a PnP problem....  If anyone has any luck doing this, please 
279	send me an E-MAIL.  PCI sound cards should not have this problem.a
280	Since this was originally release, I have received a couple of 
281	mails from people who have accomplished this!
283	NOTE: In Linux 2.4 the Sound Blaster driver (and only this one yet)
284	supports multiple cards with one module by default.
285	Read the file 'Soundblaster' in this directory for details.
288	Sound Problems:
289	===============
291	First RTFM (including the troubleshooting section 
292	in the Sound-HOWTO). 
294	1)  If you are having problems loading the modules (for
295	    example, if you get device conflict errors) try the
296	    following:
298	  A)  If you have Win95 or NT on the same computer,  
299	      write down what addresses, IRQ, and DMA channels
300	      those were using for the same hardware.  You probably 
301	      can use these addresses, IRQs, and DMA channels.
302	      You should really do this BEFORE attempting to get
303	      sound working!
305	  B)  Check (cat) /proc/interrupts, /proc/ioports,
306	      and /proc/dma.  Are you trying to use an address,
307	      IRQ or DMA port that another device is using?
309	  C)  Check (cat) /proc/isapnp
311	  D)  Inspect your /var/log/messages file.  Often that will 
312	      indicate what IRQ or IO port could not be obtained.
314	  E)  Try another port or IRQ.  Note this may involve 
315	      using the PnP tools to move the sound card to 
316	      another location.  Sometimes this is the only way 
317	      and it is more or less trial and error.
319	2)  If you get motor-boating (the same sound or part of a 
320	    sound clip repeated), you probably have either an IRQ
321	    or DMA conflict.  Move the card to another IRQ or DMA
322	    port.  This has happened to me when playing long files 
323	    when I had an IRQ conflict.
325	3.  If you get dropouts or pauses when playing high sample
326	    rate files such as using mpg123 or x11amp/xmms, you may 
327	    have too slow of a CPU and may have to use the options to 
328	    play the files at 1/2 speed.  For example, you may use
329	    the -2 or -4 option on mpg123.  You may also get this
330	    when trying to play mpeg files stored on a CD-ROM
331	    (my Toshiba T8000 PII/366 sometimes has this problem).
333	4.  If you get "cannot access device" errors, your /dev/dsp
334	    files, etc. may be set to owner root, mode 600.  You 
335	    may have to use the command:
336	      chmod 666 /dev/dsp /dev/mixer /dev/audio
338	5.  If you get "device busy" errors, another program has the
339	    sound device open.  For example, if using the Enlightenment
340	    sound daemon "esd", the "esd" program has the sound device.
341	    If using "esd", please RTFM the docs on ESD.  For example,
342	    esddsp <program> may be used to play files via a non-esd
343	    aware program.
345	6)  Ask for help on the sound list or send E-MAIL to the
346	    sound driver author/maintainer.
348	7)  Turn on debug in drivers/sound/sound_config.h (DEB, DDB, MDB).
350	8)  If the system reports insufficient DMA memory then you may want to
351	    load sound with the "dmabufs=1" option. Or in /etc/conf.modules add
353		preinstall sound dmabufs=1
355	    This makes the sound system allocate its buffers and hang onto them.
357	    You may also set persistent DMA when building a 2.4.x kernel.
360	Configuring Sound:
361	==================
363	There are several ways of configuring your sound:
365	1)  On the kernel command line (when using the sound driver(s)
366	    compiled in the kernel). Check the driver source and
367	    documentation for details.
369	2)  On the command line when using insmod or in a bash script
370	    using command line calls to load sound.
372	3)  In /etc/modprobe.d/*conf when using modprobe.
374	4)  Via Red Hat's GPL'd /usr/sbin/sndconfig program (text based).
376	5)  Via the OSS soundconf program (with the commercial version
377	    of the OSS driver.
379	6)  By just loading the module and let isapnp do everything relevant
380	    for you. This works only with a few drivers yet and - of course -
381	    only with isapnp hardware.
383	And I am sure, several other ways.  
385	Anyone want to write a linuxconf module for configuring sound?
388	Module Loading:
389	===============
391	When a sound card is first referenced and sound is modular, the sound system
392	will ask for the sound devices to be loaded. Initially it requests that
393	the driver for the sound system is loaded. It then will ask for 
394	sound-slot-0, where 0 is the first sound card. (sound-slot-1 the second and
395	so on). Thus you can do
397	alias sound-slot-0 sb
399	To load a soundblaster at this point. If the slot loading does not provide
400	the desired device - for example a soundblaster does not directly provide
401	a midi synth in all cases then it will request "sound-service-0-n" where n
402	is
404	  0	Mixer
406	  2  	MIDI
408	  3, 4	DSP audio
411	For example, I use the following to load my Soundblaster PCI 128
412	(ES 1371) card first, followed by my SoundBlaster Vibra 16 card,
413	then by my TV card:
415	# Load the Soundblaster PCI 128 as /dev/dsp, /dev/dsp1, /dev/mixer
416	alias sound-slot-0 es1371
418	# Load the Soundblaster Vibra 16 as /dev/dsp2, /dev/mixer1
419	alias sound-slot-1 sb
420	options sb io=0x240 irq=5 dma=1 dma16=5 mpu_io=0x330
422	# Load the BTTV (TV card) as /dev/mixer2
423	alias sound-slot-2 bttv
424	alias sound-service-2-0 tvmixer
426	pre-install bttv  modprobe tuner ; modprobe tvmixer
427	pre-install tvmixer modprobe msp3400; modprobe tvaudio 
428	options tuner debug=0 type=8 
429	options bttv  card=0 radio=0 pll=0
432	For More Information (RTFM):
433	============================
434	1)  Information on kernel modules: manual pages for insmod and modprobe.
436	2)  Information on PnP, RTFM manual pages for isapnp.
438	3)  Sound-HOWTO and Sound-Playing-HOWTO.
440	4)  OSS's WWW site at http://www.opensound.com.
442	5)  All the files in Documentation/sound.
444	6)  The comments and code in linux/drivers/sound.
446	7)  The sndconfig and rhsound documentation from Red Hat.
448	8)  The Linux-sound mailing list:  sound-list@redhat.com.
450	9)  Enlightenment documentation (for info on esd)
451	    http://www.tux.org/~ricdude/EsounD.html.
453	10) ALSA home page:  http://www.alsa-project.org/
456	Contact Information:
457	====================
458	Wade Hampton:  (whampton@staffnet.com)
Hide Line Numbers
About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Information is copyright its respective author. All material is available from the Linux Kernel Source distributed under a GPL License. This page is provided as a free service by mjmwired.net.