Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 |
Rusty Russell | 8d3b33f | 2006-03-25 03:07:05 -0800 | [diff] [blame] | 72 | resort, inspect the code (search for module_param). |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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: |
Yoichi Yuasa | 4dd3a29 | 2009-02-18 19:09:23 +0900 | [diff] [blame] | 83 | http://www.opensound.com. This may be used for cards that |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | |
Lucas De Marchi | 970e248 | 2012-03-30 13:37:16 -0700 | [diff] [blame] | 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: |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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) |
Lucas De Marchi | 970e248 | 2012-03-30 13:37:16 -0700 | [diff] [blame] | 231 | 2. remove the sound modules from /etc/modprobe.d/*.conf |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | |
Lucas De Marchi | 970e248 | 2012-03-30 13:37:16 -0700 | [diff] [blame] | 268 | 2. Make a second entry in /etc/modprobe.d/*conf, for example, |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | |
Lucas De Marchi | 970e248 | 2012-03-30 13:37:16 -0700 | [diff] [blame] | 372 | 3) In /etc/modprobe.d/*conf when using modprobe. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | |