Building a loadable sound driver ================================ Loadable module support in version 3.5 of the driver is mostly rewritten since the previous version (3.0.1). This means that some things have changed. To compile the sound driver as a loadable module you have to perform the following steps: 1) Install modules-1.2.8.tar.gz package (or later if available). 2a) Check that symbol remap_page_range is defined in linux/init/ksyms.c. Insert a line containing "X(remap_page_range)," if required. The driver will not load if this line is missing. 2b) Recompile kernel with soundcard support disabled. 3) Boot the new kernel. 4) cd to the sound driver source directory (this directory). It's no longer required that the sound driver sources are installed in the kernel source tree (linux/drivers/sound). When installing a separately distributed sound driver you may install the sources for example to /usr/src/sound. 5) Execute make in the sound driver source directory. Enter configuration parameters as described in Readme.cards. Then just wait until the driver is compiled OK. 6) Copy sound.o to the directory where insmod expects to find it. ("make install" copies it to /lib/modules/misc). 7) Use command "insmod sound" to load the driver. 8) The sound driver can be removed using command "rmmod sound". Parameters accepted by the loadable sound driver ================================================ Setting DMA buffer size ----------------------- The driver allocates a DMA buffer (or two for full duplex devices) every time the audio device (/dev/dsp or /dev/audio) is opened and frees it when the device is closed. Size of this buffer is defined when the driver is configured (the last question). The buffer size can be redefined when loading the driver if required (note that this is an optional feature which is not normally required). The buffer size is redefined by adding dma_pagesize= parameter to the insmod command line. For example: insmod sound dma_buffsize=32768 Minimum buffer size is 4096 and the maximum depends on the DMA channel. For 8 bit channels (0 to 3) the limit is 64k and for 16 bit ones (5 to 7) it's 128k. Driver selects a suitable buffer size automatically in case you try to specify an invalid size. Q: What is the right DMA buffer size? A: It depends on the sampling rate, machine speed and the load of the system. Large buffers are required on slow machines, when recording/playing CD-quality audio or when there are other processes running on the same system. Also recording to hard disk is likely to require large buffers. Very small buffers are sufficient when you are just playing 8kHz audio files on an empty P133 system. Using a 128k buffer just wastes 120k (or 250k) of valuable physical RAM memory. The right buffer size can be easily found by making some experiments with the dma_buffsize= parameter. I use usually 16k buffers on a DX4/100 system and 64k on an old 386 system. NOTE! DMA buffers are used only by /dev/audio# and /dev/dsp# devices. Other device files don't use them but there are two exceptions: GUS driver uses DMA buffers when loading samples to the card. Ensoniq SoundScape driver uses them when downloading the microcode file (sndscape.co[012]) to the card. Using large buffers doesn't increase performance in these cases. Debugging and tracing --------------------- Modularized sound driver doesn't display messages during initialization as the kernel compiled one does. This feature can be turned on by adding trace_init=1 to the insmod command line. For example: insmod sound trace_init=1