Sound-Karten unter Linux
Dem Rechner die Töne entlockt
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.
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 OKIn 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).



