Getting oss emulation to work with 2 Sound cards

From the ALSA wiki

Jump to: navigation, search

Contents

Getting OSS emulation to work with 2 sound cards

I spend some hours on getting OSSEmulation working with two cards on my up-to-date gentoo 1.4rc2 based system with plain vanilla 2.4.20 kernel. The nice people on the Alsa-user mailing list helped me get it working. Apparently there is a problem with the sound-related devfs code in 2.4.x kernels up to and including 2.4.20.


Georgi Georgiev \<chutz@gg3.net>:

The devfs code of ALSA seems to not work correctly. Even though my setup is as described below, the device /dev/sound/dsp1 for example, is not created (just check the whole mail).

Creating a device manually does the job, but creating a device on every boot is annoying.

(...)
$ cat /proc/asound/oss/devices
   2: [0- 2]: raw midi
   0: [0- 0]: mixer
   3: [0- 3]: digital audio
  12: [0-12]: digital audio
  18: [1- 2]: raw midi
  26: [1-10]: hardware dependent
  16: [1- 0]: mixer
  19: [1- 3]: digital audio
  28: [1-12]: digital audio
(...)

As he states, the OSS emulation gets loaded correctly for two cards but the OSS device nodes are not created in /dev/sound and also the links are missing in /dev.


Jaroslav Kysela <perex@suse.cz>:

It's not an ALSA problem, but the sound_core.c from the 2.4 kernel is buggy. Unfortunately, Marcelo hasn't accepted our patch. Here it is: (...)


The patch doesn't work, as Georgi Georgiev states in another mail:

I just tried the patch and I use a vanilla 2.4.20 kernel. Only the fourth chunk is not applicable, because it seems sort of applied already. The function register_sound_special() that is in the kernel looks a lot like the alsa patch wants it to look like. The part that is not applied is the shortcut with the unknown devices - the kernel source prefers a long switch statement, rather than using a goto. (...)

The /dev/sound devices are created as expected with this patch. I could do "modprobe -r snd-pcm-oss", but when I decided to do "modprobe -r snd-cmipci" I got a segfault, and "modprobe -r snd-emu10k1" (right after that) froze the modprobe process.


I therefore put the following in my /etc/conf.d/local.start as a workaround:

echo Creating missing Sound devices
mknod  /dev/sound/dsp1 c 14 19
mknod  /dev/sound/mixer1 c 14 16
chown root.audio /dev/sound/dsp1
chown root.audio /dev/sound/mixer1
chmod 664 /dev/sound/dsp1 /dev/sound/mixer1
ln -s /dev/sound/dsp1 /dev/dsp1
ln -s /dev/sound/mixer1 /dev/mixer1
echo "Sound should be ok now!"

It's not nice but it works.

Bugs and Workarounds

See also: BugTracking

Getting OSS emulation to work with 2 Sound cards

If you need OSSEmulation for two or more cards, you have to work around a problem with recent kernels up to and including 2.4.20. At the time of this writing 2.4.20 is the most current kernel version. Hopefully this will be fixed in later kernel versions but it might still apply to later versions.

The devfs code does not create OSS device nodes in /dev/sound and links in /dev. As a workaround those have to be created manually or automatically at boot time.

nano -w /etc/conf.d/local.start

#Set up device nodes for alsa oss emulation for the second sound card
mknod  /dev/sound/dsp1 c 14 19
mknod  /dev/sound/mixer1 c 14 16
chown root.audio /dev/sound/dsp1
chown root.audio /dev/sound/mixer1
chmod 664 /dev/sound/dsp1 /dev/sound/mixer1
ln -s /dev/sound/dsp1 /dev/dsp1
ln -s /dev/sound/mixer1 /dev/mixer1

This will automatically create the missing device nodes that devfs should but doesn't create automatically at boot time. This workaround is needed as long as the kernel's devfs code does not create them automatically.

Probleme und Wege, sie zu umgehen (german)

OSS Emulation mit zwei Soundkarten (german)

Wenn man OSSEmulation für zwei Soundkarten benötigt, muss man ein Problem im devfs Code des 2.4.x Kernels umgehen. Das Problem tritt bis einschließlich Version 2.4.20 auf. Möglicherweise sind auch noch kommende Versionen betroffen.

Das devfs legt nur OSS devicenodes für die erste Soundkarte in /dev/sound an. Ausserdem werden keine Links in /dev gesetzt. Diese müssen daher manuell oder automatisch beim Systemstart generiert werden.

Code listing 5.1

nano -w /etc/conf.d/local.start

#Set up device nodes for alsa oss emulation for the second sound card
mknod  /dev/sound/dsp1 c 14 19
mknod  /dev/sound/mixer1 c 14 16
chown root.audio /dev/sound/dsp1
chown root.audio /dev/sound/mixer1
chmod 664 /dev/sound/dsp1 /dev/sound/mixer1
ln -s /dev/sound/dsp1 /dev/dsp1
ln -s /dev/sound/mixer1 /dev/mixer1

Dieser Workaround legt das dsp1 und das mixer1 device beim Bootvorgang an. Er ist so lange nötig, bis der Kernel diese über devfs automatisch anlegen kann.

RichardStevens 20030104

Retrieved from "http://alsa.opensrc.org/Getting_oss_emulation_to_work_with_2_Sound_cards"

Categories: Howto | OSS

GITHUB | EDIT