[alsa-devel] Building a new out-of-tree ALSA module on Ubuntu Xenial (was gitcompile fail)
Hi all
My abundant thanks to Clemens and Takashi for your kind and patient assistance. May I now answer my own question by offering the following step-by-step procedure in case anyone comes looking for it? Any improvements or suggestions would be greatly appreciated too, thank you.
$ sudo apt-get install linux-headers-$(uname -r) $ sudo mkdir /lib/modules/$(uname -r)/updates $ sudo apt-get build-dep linux-image-$(uname -r) $ mkdir $HOME/src; cd $HOME/src $ apt-get source linux-image-$(uname -r) $ cd linux-$(uname -r | awk -F - '{print $1}')
Now I am at the root of the kernel source tree. In my case, I want to add a new driver for an as-yet unsupported device. I find a supported device that appears substantially similar to what I need (sound/drivers/mtpav.c) and base my hack on that - producing sound/drivers/mq8portse.c. I then add the following lines to the sound/drivers/Makefile (each mirroring entries found in respect of mtpav.c)
snd-mq8portse-objs := mq8portse.o
obj-$(CONFIG_SND_MQ8PORTSE) += snd-mq8portse.o
Now (from the root of the kernel source tree):
$ cd sound/drivers/ $ CONFIG_SND_MQ8PORTSE=m make -C /lib/modules/$(uname -r)/build M=$(pwd) snd-mq8portse.ko
This produces my module in the same folder, which I copy to the updates folder.
$ sudo cp snd-mq8portse.ko /lib/modules/$(uname -r)/updates/ $ sudo depmod -a
Now, because my particular device is attached to the LPT port, I need to unload the lp driver before snd-mq8portse will load. $ sudo modprobe -r lp $ sudo modprobe snd-mq8portse $ modinfo snd-mq8portse
I try it out in my ALSA client ... then remove ...
$ sudo modprobe -r snd-mq8portse
The MusicQuest 8Port/SE is attached to the LPT port, so a more permanent setup requires that I blacklist all typical parport stuff. I add the following as /etc/modprobe.d/blacklist-parport.conf:
# keep LPT port open for mq8portse alias parport_pc off alias parport off
blacklist parport_pc blacklist parport blacklist ppdev blacklist lp
I also comment out autoloading of lp in /etc/modules. I can then add mq8portse to /etc/modules for automatic loading, unless I want to defer to manual modprobe-ing.
Once again, thank you ever so much, one and all. Next I need to find out how to submit this driver for inclusion in ALSA.
*Mark Brand* Lecturer in Music Technology School of Music, Art & Design Summerstrand Campus (South) Tel: +27 (0)41 5042250 Fax: +27 (0)41 5042507
participants (1)
-
Mark Brand