diff options
Diffstat (limited to 'Documentation/sound/oss/Introduction')
-rw-r--r-- | Documentation/sound/oss/Introduction | 459 |
1 files changed, 459 insertions, 0 deletions
diff --git a/Documentation/sound/oss/Introduction b/Documentation/sound/oss/Introduction new file mode 100644 index 000000000000..15d4fb975ac0 --- /dev/null +++ b/Documentation/sound/oss/Introduction | |||
@@ -0,0 +1,459 @@ | |||
1 | Introduction Notes on Modular Sound Drivers and Soundcore | ||
2 | Wade Hampton | ||
3 | 2/14/2001 | ||
4 | |||
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. | ||
10 | |||
11 | Note, some of this probably should be added to the Sound-HOWTO! | ||
12 | |||
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. | ||
16 | |||
17 | |||
18 | Copying: | ||
19 | ======== | ||
20 | none | ||
21 | |||
22 | |||
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. | ||
37 | |||
38 | |||
39 | Modular Sound Drivers: | ||
40 | ====================== | ||
41 | |||
42 | Thanks to the GREAT work by Alan Cox (alan@lxorguk.ukuu.org.uk), | ||
43 | |||
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) | ||
47 | |||
48 | the standard Linux kernels support a modular sound driver. From | ||
49 | Alan's comments in linux/drivers/sound/README.FIRST: | ||
50 | |||
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. | ||
55 | |||
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: | ||
59 | |||
60 | soundcore.o: Top level handler for the sound system, provides | ||
61 | a set of functions for registration of devices | ||
62 | by type. | ||
63 | |||
64 | sound.o: Common sound functions required by all modules. | ||
65 | |||
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. | ||
69 | |||
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_PARM). | ||
73 | |||
74 | Notes: | ||
75 | |||
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. | ||
81 | |||
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. | ||
86 | |||
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! | ||
94 | |||
95 | |||
96 | Building the Modules: | ||
97 | ===================== | ||
98 | |||
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. | ||
103 | |||
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). | ||
108 | |||
109 | 2. Select the Sound option and a dialog will be displayed. | ||
110 | |||
111 | 3. Select M (module) for "Sound card support". | ||
112 | |||
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 | ||
116 | |||
117 | 5. Make the kernel (e.g., make bzImage), and install the kernel. | ||
118 | |||
119 | 6. Make the modules and install them (make modules; make modules_install). | ||
120 | |||
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. | ||
124 | |||
125 | |||
126 | Plug and Play (PnP: | ||
127 | =================== | ||
128 | |||
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). | ||
132 | |||
133 | Also the 2.4.x kernels provide PnP capabilities, see the | ||
134 | file NEWS in this directory. | ||
135 | |||
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. | ||
139 | |||
140 | |||
141 | INSMOD: | ||
142 | ======= | ||
143 | |||
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: | ||
148 | |||
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 | ||
162 | |||
163 | When using sound as a module, I typically put these commands | ||
164 | in a file such as /root/soundon.sh. | ||
165 | |||
166 | |||
167 | MODPROBE: | ||
168 | ========= | ||
169 | |||
170 | If loading via modprobe, these common files are automatically loaded | ||
171 | when requested by modprobe. For example, my /etc/modprobe.conf contains: | ||
172 | |||
173 | alias sound sb | ||
174 | options sb io=0x240 irq=9 dma=3 dma16=5 mpu_io=0x300 | ||
175 | |||
176 | All you need to do to load the module is: | ||
177 | |||
178 | /sbin/modprobe sb | ||
179 | |||
180 | |||
181 | Sound Status: | ||
182 | ============= | ||
183 | |||
184 | The status of sound may be read/checked by: | ||
185 | cat (anyfile).au >/dev/audio | ||
186 | |||
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.] | ||
190 | |||
191 | The status of the modules and which modules depend on | ||
192 | which other modules may be checked by: | ||
193 | /sbin/lsmod | ||
194 | |||
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] | ||
200 | |||
201 | |||
202 | Removing Sound: | ||
203 | =============== | ||
204 | |||
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. | ||
209 | |||
210 | For example, I use the following to remove my Soundblaster (rmmod | ||
211 | in the reverse order in which I loaded the modules): | ||
212 | |||
213 | /sbin/rmmod sb | ||
214 | /sbin/rmmod uart401 | ||
215 | /sbin/rmmod sound | ||
216 | /sbin/rmmod soundcore | ||
217 | |||
218 | When using sound as a module, I typically put these commands | ||
219 | in a script such as /root/soundoff.sh. | ||
220 | |||
221 | |||
222 | Removing Sound for use with OSS: | ||
223 | ================================ | ||
224 | |||
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: | ||
229 | |||
230 | 1. remove sound modules (detailed above) | ||
231 | 2. remove the sound modules from /etc/modprobe.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). | ||
236 | |||
237 | |||
238 | Multiple Sound Cards: | ||
239 | ===================== | ||
240 | |||
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. | ||
248 | |||
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"). | ||
257 | |||
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: | ||
263 | |||
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. | ||
267 | |||
268 | 2. Make a second entry in /etc/modprobe.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. | ||
272 | |||
273 | 3. Update your soundon.sh script, etc. | ||
274 | |||
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! | ||
282 | |||
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. | ||
286 | |||
287 | |||
288 | Sound Problems: | ||
289 | =============== | ||
290 | |||
291 | First RTFM (including the troubleshooting section | ||
292 | in the Sound-HOWTO). | ||
293 | |||
294 | 1) If you are having problems loading the modules (for | ||
295 | example, if you get device conflict errors) try the | ||
296 | following: | ||
297 | |||
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! | ||
304 | |||
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? | ||
308 | |||
309 | C) Check (cat) /proc/isapnp | ||
310 | |||
311 | D) Inspect your /var/log/messages file. Often that will | ||
312 | indicate what IRQ or IO port could not be obtained. | ||
313 | |||
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. | ||
318 | |||
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. | ||
324 | |||
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). | ||
332 | |||
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 | ||
337 | |||
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. | ||
344 | |||
345 | 6) Ask for help on the sound list or send E-MAIL to the | ||
346 | sound driver author/maintainer. | ||
347 | |||
348 | 7) Turn on debug in drivers/sound/sound_config.h (DEB, DDB, MDB). | ||
349 | |||
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 | ||
352 | |||
353 | preinstall sound dmabufs=1 | ||
354 | |||
355 | This makes the sound system allocate its buffers and hang onto them. | ||
356 | |||
357 | You may also set persistent DMA when building a 2.4.x kernel. | ||
358 | |||
359 | |||
360 | Configuring Sound: | ||
361 | ================== | ||
362 | |||
363 | There are several ways of configuring your sound: | ||
364 | |||
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. | ||
368 | |||
369 | 2) On the command line when using insmod or in a bash script | ||
370 | using command line calls to load sound. | ||
371 | |||
372 | 3) In /etc/modprobe.conf when using modprobe. | ||
373 | |||
374 | 4) Via Red Hat's GPL'd /usr/sbin/sndconfig program (text based). | ||
375 | |||
376 | 5) Via the OSS soundconf program (with the commercial version | ||
377 | of the OSS driver. | ||
378 | |||
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. | ||
382 | |||
383 | And I am sure, several other ways. | ||
384 | |||
385 | Anyone want to write a linuxconf module for configuring sound? | ||
386 | |||
387 | |||
388 | Module Loading: | ||
389 | =============== | ||
390 | |||
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 | ||
396 | |||
397 | alias sound-slot-0 sb | ||
398 | |||
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 | ||
403 | |||
404 | 0 Mixer | ||
405 | |||
406 | 2 MIDI | ||
407 | |||
408 | 3, 4 DSP audio | ||
409 | |||
410 | |||
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: | ||
414 | |||
415 | # Load the Soundblaster PCI 128 as /dev/dsp, /dev/dsp1, /dev/mixer | ||
416 | alias sound-slot-0 es1371 | ||
417 | |||
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 | ||
421 | |||
422 | # Load the BTTV (TV card) as /dev/mixer2 | ||
423 | alias sound-slot-2 bttv | ||
424 | alias sound-service-2-0 tvmixer | ||
425 | |||
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 | ||
430 | |||
431 | |||
432 | For More Information (RTFM): | ||
433 | ============================ | ||
434 | 1) Information on kernel modules: manual pages for insmod and modprobe. | ||
435 | |||
436 | 2) Information on PnP, RTFM manual pages for isapnp. | ||
437 | |||
438 | 3) Sound-HOWTO and Sound-Playing-HOWTO. | ||
439 | |||
440 | 4) OSS's WWW site at http://www.opensound.com. | ||
441 | |||
442 | 5) All the files in Documentation/sound. | ||
443 | |||
444 | 6) The comments and code in linux/drivers/sound. | ||
445 | |||
446 | 7) The sndconfig and rhsound documentation from Red Hat. | ||
447 | |||
448 | 8) The Linux-sound mailing list: sound-list@redhat.com. | ||
449 | |||
450 | 9) Enlightenment documentation (for info on esd) | ||
451 | http://www.tux.org/~ricdude/EsounD.html. | ||
452 | |||
453 | 10) ALSA home page: http://www.alsa-project.org/ | ||
454 | |||
455 | |||
456 | Contact Information: | ||
457 | ==================== | ||
458 | Wade Hampton: (whampton@staffnet.com) | ||
459 | |||