1Building a modular sound driver 2================================ 3 4 The following information is current as of linux-2.1.85. Check the other 5readme files, especially README.OSS, for information not specific to 6making sound modular. 7 8 First, configure your kernel. This is an idea of what you should be 9setting in the sound section: 10 11<M> Sound card support 12 13<M> 100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support 14 15 I have SoundBlaster. Select your card from the list. 16 17<M> Generic OPL2/OPL3 FM synthesizer support 18<M> FM synthesizer (YM3812/OPL-3) support 19 20 If you don't set these, you will probably find you can play .wav files 21but not .midi. As the help for them says, set them unless you know your 22card does not use one of these chips for FM support. 23 24 Once you are configured, make zlilo, modules, modules_install; reboot. 25Note that it is no longer necessary or possible to configure sound in the 26drivers/sound dir. Now one simply configures and makes one's kernel and 27modules in the usual way. 28 29 Then, add to your /etc/modprobe.d/oss.conf something like: 30 31alias char-major-14-* sb 32install sb /sbin/modprobe -i sb && /sbin/modprobe adlib_card 33options sb io=0x220 irq=7 dma=1 dma16=5 mpu_io=0x330 34options adlib_card io=0x388 # FM synthesizer 35 36 Alternatively, if you have compiled in kernel level ISAPnP support: 37 38alias char-major-14 sb 39softdep sb post: adlib_card 40options adlib_card io=0x388 41 42 The effect of this is that the sound driver and all necessary bits and 43pieces autoload on demand, assuming you use kerneld (a sound choice) and 44autoclean when not in use. Also, options for the device drivers are 45set. They will not work without them. Change as appropriate for your card. 46If you are not yet using the very cool kerneld, you will have to "modprobe 47-k sb" yourself to get things going. Eventually things may be fixed so 48that this kludgery is not necessary; for the time being, it seems to work 49well. 50 51 Replace 'sb' with the driver for your card, and give it the right 52options. To find the filename of the driver, look in 53/lib/modules/<kernel-version>/misc. Mine looks like: 54 55adlib_card.o # This is the generic OPLx driver 56opl3.o # The OPL3 driver 57sb.o # <<The SoundBlaster driver. Yours may differ.>> 58sound.o # The sound driver 59uart401.o # Used by sb, maybe other cards 60 61 Whichever card you have, try feeding it the options that would be the 62default if you were making the driver wired, not as modules. You can 63look at function referred to by module_init() for the card to see what 64args are expected. 65 66 Note that at present there is no way to configure the io, irq and other 67parameters for the modular drivers as one does for the wired drivers.. One 68needs to pass the modules the necessary parameters as arguments, either 69with /etc/modprobe.d/*.conf or with command-line args to modprobe, e.g. 70 71modprobe sb io=0x220 irq=7 dma=1 dma16=5 mpu_io=0x330 72modprobe adlib_card io=0x388 73 74 recommend using /etc/modprobe.d/*.conf. 75 76Persistent DMA Buffers: 77 78The sound modules normally allocate DMA buffers during open() and 79deallocate them during close(). Linux can often have problems allocating 80DMA buffers for ISA cards on machines with more than 16MB RAM. This is 81because ISA DMA buffers must exist below the 16MB boundary and it is quite 82possible that we can't find a large enough free block in this region after 83the machine has been running for any amount of time. The way to avoid this 84problem is to allocate the DMA buffers during module load and deallocate 85them when the module is unloaded. For this to be effective we need to load 86the sound modules right after the kernel boots, either manually or by an 87init script, and keep them around until we shut down. This is a little 88wasteful of RAM, but it guarantees that sound always works. 89 90To make the sound driver use persistent DMA buffers we need to pass the 91sound.o module a "dmabuf=1" command-line argument. This is normally done 92in /etc/modprobe.d/*.conf files like so: 93 94options sound dmabuf=1 95 96If you have 16MB or less RAM or a PCI sound card, this is wasteful and 97unnecessary. It is possible that machine with 16MB or less RAM will find 98this option useful, but if your machine is so memory-starved that it 99cannot find a 64K block free, you will be wasting even more RAM by keeping 100the sound modules loaded and the DMA buffers allocated when they are not 101needed. The proper solution is to upgrade your RAM. But you do also have 102this improper solution as well. Use it wisely. 103 104 I'm afraid I know nothing about anything but my setup, being more of a 105text-mode guy anyway. If you have options for other cards or other helpful 106hints, send them to me, Jim Bray, jb@as220.org, http://as220.org/jb. 107