Mit dem Einzug von Linux auf den heimischen Desktop wächst das Bedürfnis nach der Multimediafähigkeit des Betriebssystems. Linux steht nicht mehr hinter Windows zurück, wenngleich die Konfiguration etwas anders verläuft.
Bei den Soundkarten, so wie bei allen anderen Geräten, die nicht “on board”, also auf dem Mainboard integriert sind, gibt es drei verschiedene Typen. Historisch gesehen am ältesten sind die sogenannten Legacy-Karten. Darauf folgten die Jumperless-Karten, die von den Plug’n’Play-Karten (Plug’n’Play; engl.: Einstecken und läuft) abgelöst werden sollten. Alle drei Typen gehören zur Gruppe der ISA-Karten und sie unterscheiden sich in der Handhabung der IRQs und DMAs sowie des verwendeten Adressbereichs im Hauptspeicher.
The next Generation
Über kurz oder lang wird ISA durch PCI verdrängt werden. Das ist ein Standard, der alle alten Systeme und die mit ihnen verbunden Probleme, beseitigen soll. Normalerweise ist deshalb bei der Konfiguration von PCI-Karten keine manuelle Einstellung mehr nötig. Bei der Einführung des Standards wurde versucht, eine sinnvolle Autokonfiguration zu ermöglichen.
Jumpern oder nicht Jumpern
Da sich die PCI-Karten in der Regel unauffällig verhalten und einfach vom Computer selber konfiguriert werden, beschränkt sich diese Anleitung auf die ISA-Karten und hier im speziellen auf die Erweiterungen vom Typ Plug’n’Play.
In der Praxis sieht nämlich so aus, dass Sie als Anwender bei der Legacy-Karte die Einstellungen über sogenannte Jumper vornehmen. Dazu müssen sie aber die genaue Belegung der Ressourcen in Ihrem Rechner kennen und das stellt für einen Laien ein nicht zu unterschätzendes Unterfangen dar. Da diese Belegung bei jedem Rechner anders aussieht, können wir hier keine allgemein verbindlichen Ratschläge geben. Sie können sich aber die momentane Belegung anzeigen lassen.
[agrytz]$ cat /proc/interrupts
CPU0
0: 123278398 XT-PIC timer
1: 604654 XT-PIC keyboard
2: 0 XT-PIC cascade
5: 1204103 XT-PIC usb
8: 1972305 XT-PIC rtc
10: 78682782 XT-PIC Intel EtherExpress Pro 10/100 Ethernet
12: 5904997 XT-PIC PS/2 Mouse
13: 5 XT-PIC fpu
14: 557015 XT-PIC ide0
15: 25235 XT-PIC ide1
NMI: 0
ERR: 0
Gleiches gilt für die DMA-Belegung.
[agrytz]$ cat /proc/dma 4: cascade
Und zu guter letzt auch für die Adressbelegung:
[agrytz]$ cat /proc/ioports 0000-001f : dma1 0020-003f : pic1 0040-005f : timer 0060-006f : keyboard 0070-007f : rtc 0080-008f : dma page reg 00a0-00bf : pic2 00c0-00df : dma2 00f0-00ff : fpu 0170-0177 : ide1 01f0-01f7 : ide0 02f8-02ff : serial(auto) 0376-0376 : ide1 03c0-03df : vga+ 03f6-03f6 : ide0 03f8-03ff : serial(auto) b000-b01f : Intel Speedo3 Ethernet b400-b41f : usb-uhci b800-b807 : ide0 b808-b80f : ide1
Für den richtigen Sound muss auch im Kernel die Unterstützung für die entsprechende Karte aktiviert sein. Dazu müssen Sie sich die Karte genau ansehen und den Chip, der darauf arbeitet identifizieren. Anschließend empfiehlt es sich unter /usr/src/linux/Documentation/sound die richtige Documentation für die Karte zu suchen und mindestens zweimal gründlich zu lesen. Wie der Kernel neukompiliert wird, steht in der Dokumentation der meisten Distributionen genau beschrieben. Ansonsten hilft das Kernel-HowTo von der unten angegebenen URL weiter.
Kernel-Treiber
Etwas zur Geschichte: Die ersten Soundtreiber im Kernel wurden von Hannu Savolainen geschrieben, der später zum Open Sound System (OSS) ging, einem kommerzielen Projekt. Alan Cox, der bei Red Hat beschäftigt ist, arbeitet weiterhin an der Modularisierung der Treiber und entwickelt neuen Code. Er ist laut Sound-HowTo der momentane Maintainer des Projektes Sound.

Alan Cox, Entwickler für den Distributor Red Hat, betreut die Programmierung der Sound-Module im Kernel.
Hannu Savolainen steuert immer noch Code zum Kernel bei, arbeitet aber gleichzeitig an OSS, das in einer abgespeckteren Version frei erhältlich ist. Es unterstützt mehrere Modelle – vor allem neuere – und soll leichter zu konfigurieren sein. Der Nachteil ist aber, dass Sie dafür bezahlen müssen und den Sourcecode nicht bekommen.
Daneben gibt es noch das Advanced Linux Sound Architecture Projekt, das von Jaroslav Kysela und einigen Mitstreitern aus der Taufe gehoben wurde. Es entstand bei der Arbeit an alternativen Treibern für die Gravis UltraSound-Karte. Es soll einmal, so das Ziel der Entwickler, die eingebauten Kernel-Treiber ablösen.
ISAPNP
Ein Plug’n’Play-Karte zu konfigurieren ist nicht einfach, denn nicht ohne Grund haben die Karten den Spitznamen “Plug’n’Pray” (engl. Einstecken und beten) bekommen. Aber unter Linux gibt es eine Lösung für dieses Problem. Hierbei helfen Ihnen die beiden Tools pnpdump und isapnp.
Das erste der beiden liest die möglichen Basiskonfigurationen aus den im System installierten Karten aus und schreibt sie auf die Standardausgabe. Mit einem Trick wird daraus eine Konfigurationsdatei, die später zusammen mit isapnp verwendet werden kann. Mit isapnp wird anschließend die Konfiguration aktiviert.
Da pnpdump direkt auf die Hardware zugreift, darf nur der Systemadministrator damit arbeiten. Werden Sie also mit
[agrytz]$ su Password:
zum Superuser und geben Sie anschließend pnpdump > isapnp.conf. So wird die Ausgabe, die normalerweise auf dem Bildschirm erschienen wäre direkt in die Datei isapnp.conf umgeleitet. Diese müssen wir danach noch editieren. Das muss nicht in allen Fällen notwendig sein. Es ist aber immer sinnvoll, zu prüfen, ob das Gerät nicht mit anderen Gerät in Konflikt steht.
Ausschnitt aus isapnp.conf
# (DEBUG)
(READPORT 0x0273)
(ISOLATE PRESERVE)
(IDENTIFY *)
(VERBOSITY 2)
(CONFLICT (IO FATAL)(IRQ FATAL)(DMA FATAL)(MEM FATAL)) # or WARNING
# Don't forget to uncomment the activate (ACT Y) when happy
# Start dependent functions: priority functional
# IRQ 5, 7, 9 or 10.
# High true, edge sensitive interrupt (by default)
# (INT 0 (IRQ 5 (MODE +E)))
# First DMA channel 1 or 3.
# 8 bit DMA only
# Logical device is not a bus master
# DMA may execute in count by byte mode
# DMA may not execute in count by word mode
# DMA channel speed in compatible mode
# (DMA 0 (CHANNEL 1))
# Logical device decodes 16 bit IO address lines
# Minimum IO base address 0x0220
# Maximum IO base address 0x0280
# IO base alignment 32 bytes
# Number of IO addresses required: 16
# (IO 0 (SIZE 16) (BASE 0x500))
# End dependent functions
(NAME "CTL0070/-1[0]{Audio }")
# (ACT Y)
))
(WAITFORKEY)
Benutzen Sie dafür die erstellte Konfigurationsdatei. Im Kasten sehen Sie eine verkürzte Variante (der zweite DMA-Kanal ist nicht angegeben); die wichtigen Zeilen wurden fett hervorgehoben. In der Ursprungsdatei bietet Ihnen pnpdump wesentlich mehr Möglichkeiten an. Jetzt sollten sie die oben gelernten Befehle anwenden und die freien Adressbereiche, Interrupts und DMAs heraussuchen.
Haben Sie das erledigt, kommentieren Sie die entsprechenden Zeilen aus, indem Sie das Lattenkreuz davor entfernen und kommentieren Sie ebenfalls die Zeile (ACT Y) aus, damit diese Konfiguration beim Start des Rechners aktiviert wird.
Wenn Sie pnpdump mit der Option -c aufrufen, wird die Conf-Datei gleich so geschrieben, dass die Geräte aktiviert sind. Schreiben Sie sich auf jeden Fall die Werte auf, mit denen Sie letztendlich die Karte initialisieren. Sie brauchen diese später beim Laden der Module.
Wenn Ihre Konfigurationsdatei fertig ist, kopieren Sie sie nach /etc/isapnp.conf und rufen
[agrytz]$ isapnp /etc/isapnp.conf
auf. Dann sollte die Ausgabe so aussehen:
Board 1 has Identity 2f ff ff ff ff 81 71 93 04: ADS7181 Serial No -1 [checksum
2f]
ADS7181/-1[0]{Analog Devices AD1816A}: Ports 0x220 0x388 0x500; IRQ5 DMA1 DMA0 -
-- Enabled OK
ADS7181/-1[1]{Analog Devices AD1816A}: Port 0x300; IRQ7 --- Enabled OK
ADS7181/-1[2]{Analog Devices AD1816A}: Port 0x200; --- Enabled OK
In diesem Fall wurde die Karte erfolgreich initialisiert. Nun muss nur noch das richtige Modul für den Kernel geladen werden. Der entsprechende Befehl, der ebenfalls als Benutzer root ausgeführt werden muss, lautet:
[agrytz]$ /sbin/modprobe ad1816 io=0x500 irq=5 dma=1 dma2=3 ad1816_clockfreq=33000
Den richtigen Eintrag bei der Clock-Frequenz finden Sie in der Dokumentation an der oben genannten Stelle. Erhalten Sie nun eine Fehlermeldung, dann kann es unter Umständen sein, dass die Grundbestandteile des Soundsystems nicht geladen sind. Sehen sie sich die Ausgabe des Befehls
[agrytz]$ /sbin/lsmod ... sound 60248 0 (unused) soundcore 2788 3 [sound] soundlow 304 0 [sound]
und suchen Sie nach den oben gezeigten Modulen. Sollten sie vorhanden und das Kartenmodul einwandfrei geladen worden sein, dann müsste dort statt (unused) der Name des Moduls stehen. Sollte das nicht der Fall sein können Sie diese mit folgenden Befehlen laden:
[agrytz]$ /sbin/insmod soundcore [agrytz]$ /sbin/insmod soundlow [agrytz]$ /sbin/insmod sound
Nun sind Sie dem Ende der Konfiguration schon sehr nahe. Es fehlt lediglich noch ein Eintrag in die Datei /etc/conf.modules. Dort stehen alle Module, die der Rechner beim Start laden soll. Ergänzen sie hier die Zeilen:
alias sound-slot-0 ad1816 alias sound-service-0-3 ad1816 alias char-major-14 ad1816 post-install ad1816 /sbin/modprobe -k ad1816 options ad1816 io=0x500 irq=5 dma=1 dma2=3
Beachten Sie bitte unbedingt, dass es sich hierbei um eine Beispielkonfiguration für eine Sound-Karte mit AD1816-Chipsatz handelt. Für Ihre Sound-Karte sieht die Konfiguration sehr wahrscheinlich etwas anders aus. Geben Sie nach dem Editieren der Datei conf.modules an der Kommandozeile
[agrytz]$ /sbin/depmod -a
ein. So werden die Abhängigkeiten registriert. Testen Sie nach erfolgreichem Laden des Sound-Moduls die Funktion:
[agrytz]$ cat /dev/sndstat OSS/Free:3.8s2++-971130 Load type: Driver loaded as a module Kernel: Linux local host.localdomain 2.2.15-4mdk #1 Wed May 10 15:31:30 CEST 2000 i686 Config option s: 0 Installed drivers: Card config: Audio devices: 0: AD1816 audio driver (DUPLEX) Synth devices: Midi devices: Timers: 0: System clock Mixers: 0: AD1816 audio driver
Nach dem Sie nun die Konfiguration zu Fuß geschafft haben, nun noch ein Hinweis: SuSE 7.0 verfügt über ein Tool, dass Ihnen die Konfiguration der ISA Plug’n’Play-Sound-Karte abnehmen und diese richtig konfigurieren soll. Im Selbstversuch wurde die oben genannte Soundkarte allerdings nicht zuverlässig erkannt. Auch mit dem Mandrakes eigenem Tool HardDrake ließ sich die Karte nicht konfigurieren.
Glossar
-
ISA
-
(Industry Standard Architecture; engl.: Industrieller Architektur-Standard) Ein Standard für Peripherie-Geräte. wurde später durch PCI (siehe unten) abgelöst. Wenn die Steckplätze betrachten, gilt als Faustregel: die breiten sind ISA-Plätze; die schmalen PCI. Aus dieser Logik fällt der AGP (Advanced Graphics Port) heraus, der eine verbesserte Schnittstelle zur Grafik-Hardware darstellt. Dieser Port wird intern aber als PCI-Schnittstelle behandelt.
-
IRQ
-
(Interrupt; engl.: Unterbrecher)
-
DMA
-
(Direct Memory Access; engl.: Direkter Speicherzugriff)
-
PCI
-
(engl.: Peripheral Component Interconnect)
-
Jumper
-
(engl.: Schalter) Bei einem Jumper handelt es sich um eine kleine Steckbrücke, die jeweils zwei Leiter miteinander verbindet. Meistens stehen sechs oder mehr Stifte nebeneinander und je nachdem, wie die Brücke gesteckt ist, ergibt sich eine andere Schaltung. Diese Technik wird auch verwendet, um den Geräten am IDE-Stecker (Festplatten, CDROM-Laufwerke) ihre Status zuzuweisen (Master oder Slave).

