Linux sound-driver module (c) Peter Trattler License: GPL (Gnu Public License) Idea: I've modified the sources for the sound driver to allow simply insert and remove the sound driver from the kernel by calling (only available for Linux) insmod /usr/src/linux/modules/sound.o and rmmod sound This may be useful if you are doing one of the following things: 1) Debugging the sound driver 2) Creating a new device within the sound-driver 3) You do not the sound driver all the time (as it wastes quite a lot of memory for its buffers) Compilation: Go to /usr/src/linux and make the following steps: a) configure the sound driver: To do that call "make config" and enable the sound-driver -- you will be asked different questions about your sound-hardware (remember not to use a too big DMA-Buffer size; you should use 16kB, if you have 16Bit devices, otherwise you can use 32kB) b) disable the sound driver in the kernel: call make config again but answer 'N' to "Sound card support" c) run "make modules"; the sound-driver sound.o should end up in /usr/src/linux/modules If memory is tight: I've allocated at about 70kB for the sound-drivers internal tables. If this is too much, 'insmod sound.o' will generate the following warning ... use 'insmod memsize=xxxx' ... You can only use this command, if you have (I think) at least modules-1.1.87 or up. You can also switch debugging on by running the command insmod sound.o debugmem=1 Files I changed: I've only changed the files soundcard.c(most changes) and some changes within the Makefile, sound_config.h and the Makefile in /usr/src/linux/drivers Bugs: a) As the kmalloc (..., GFP_DMA) caused some unexpected errors (I don't know if it is my fault), I created some code, which is (by default) enabled by #define KMALLOC_DMA_BROKEN 1 (within soundcard.c). It trys to allocate a large enough region, so that the complete dma-buffer can be occupied in this space. If it does not fit within this region it doubles the size of it. But this can cause problems, if the sound-buffer is too big (as kmalloc can only handle regions at up to circa 100kB). So take care to use for 8Bit devices a sound-DMA-buffer of 32kB (maximum) and for 16Bit devices a maximum of 16kB. Otherwise the allocation scheme might fail. b) Buffers allocated by the different sound devices via calls to kmalloc are not freed, if the sound driver is removed again (these buffers tend to be quite small -- so it does not harm a lot) c) If there is not enough (kernel-) memory available, the installation of the sound-driver fails. (This happens quite often, if you did not install the driver right after booting -- [PS: I've only got 5MB of Ram, so this might be the source for this problem]) Author: Peter Trattler (peter@sbox.tu-graz.ac.at)