# Plug and Play

Plug and Play ist eine feine Sache... Dem Slogan Karte einbauen, Computer starten, fertig glauben ohnehin nur noch die größten Optimisten. Auch wenn für Otto Normalverbraucher mit seiner einen Plug-and-Play-Karte tatsächlich der Administrationsaufwand schwindet, erweist sich die vom BIOS vorgenommene Initialisierung schnell als Falle, wenn sich in einem Rechner gleich mehrere solcher Karten um die Zuweisung der wenigen freien Interrupts und Adressen bewerben. Während für Windows, DOS und Co. die Treiber für solche Karten noch mitgeliefert werden, müssen dieselben von Freaks in ihrer Freizeit erst noch für Linux entwickelt werden. Und während der Hersteller einer Karte noch weiß (wissen sollte), für welche Adressen und Interrupts er seine Treiber zurechtbastelt, beschränken sich die Linux-Treiber meist nur auf ausgewählte ("die normalen") Bereiche. Weist das BIOS einer Karte jetzt Ressourcen zu, die der Treiber nicht vorsieht, wird dieser die Hardware nicht entdecken...

Nun bleiben einem als Linux-Guru drei Offerten übrig:

- Plug and Play abschalten... funktioniert nur bei manchen Karten
- Andere Karte kaufen... funktioniert nur bei manchen Geldbeuteln
- Das Tool `isapnp` verwenden (das Paket liegt den meisten Distributionen bei)

Anhand der Installation einer Vibra 16 PnP Karte sollen die Schritte zur Einbindung demonstriert werden.

1. Der Treiber im Kernel ist als Modul zu realisieren. Am wenigsten Probleme bereitet es, wenn man die Einstellungen (Interrupt, IO-Adressen, DMA-Kanäle) entsprechend den Parametern unter DOS/Windows wählt. Ansonsten hilft nur experimentieren, wobei man vorab Interrupts bzw. IO-Adressen, die von anderer Hardware genutzt werden, ausschließen sollte.

   Die verwendeten Interrupts bereits benutzter (!) Geräte erfährt man mittels

   `user@sonne> cat /proc/interrupts`

   Vorsicht: Wurde z.B. der Drucker noch nicht angesprochen, wird der von ihm verwendete Interrupt nicht erscheinen.

   Die Belegung der I/O-Ports vermittelt

   `user@sonne> cat /proc/ioports`

2. Die Konfigurationsdatei `/etc/isapnp.conf` ist zu erzeugen:

   `root@sonne> pnpdump >/etc/isapnp.conf`

   `pnpdump` testet die Hardware und schreibt alle ermittelten Daten in die Datei. Diese muss nun bearbeitet werden und die Zeilen, die mit den Einstellungen im Modul korrespondieren, sind zu entkommentieren. Für eine Vibra16 PnP mit den Einstellungen IRQ=5, DMA 0 auf Kanal 1, DMA 1 auf Kanal 5, IO-Port 0x0220 sieht der entsprechende Ausschnitt wie folgt aus:

   `# ***** GEKUERZTE DATEI **** # # $Id: pnpdump.c,v 1.17 1998/11/10 22:45:04 fox Exp $ # This is free software, see the sources for details. # This software has NO WARRANTY, use at your OWN RISK # # For details of this file format, see isapnp.conf(5) # # ... # # Board 1 has serial identifier e5 ff ff ff ff 70 00 8c 0e # Card 1: (serial identifier e5 ff ff ff ff 70 00 8c 0e) # Vendor Id CTL0070, No Serial Number (-1), checksum 0xE5. # Version 1.0, Vendor version 1.0v # ANSI string -->Creative ViBRA16C PnP<-- # # ... # # Don't forget to uncomment the activate (ACT Y) when happy (CONFIGURE CTL0070/-1 (LD 0 # # Multiple choice time, choose one only ! # Start dependent functions: priority preferred # IRQ 5. # High true, edge sensitive interrupt (by default) (INT 0 (IRQ 5 (MODE +E))) # First DMA channel 1. # 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)) # Next DMA channel 5. # 16 bit DMA only # Logical device is not a bus master # DMA may not execute in count by byte mode # DMA may execute in count by word mode # DMA channel speed in compatible mode (DMA 1 (CHANNEL 5)) # Logical device decodes 16 bit IO address lines # Minimum IO base address 0x0220 # Maximum IO base address 0x0220 # IO base alignment 1 bytes # Number of IO addresses required: 16 (IO 0 (SIZE 16) (BASE 0x0220)) # # *** hier wurde stark gekuerzt *** # (NAME "CTL0070/-1[0]{Audio }") (ACT Y) )) # # *** es folgt weitere Hardware *** #`

3. Die Karte muss nun initialisiert und das Modul geladen werden:

   `root@sonne> isapnp /etc/isapnp.conf root@sonne> modprobe sound.o`

4. Test: Ob die Karte korrekt erkannt wurde, verrät z.B. der belegte Interrupt (Alternativ zeigt `lsmod`, ob das Modul geladen wurde):

   `user@sonne> cat /proc/interrupts 0: 90403 timer 1: 1387 keyboard 2: 0 cascade 5: 2961 sound blaster 8: 2 + rtc 10: 26394 aic7xxx 12: 35025 PS/2 Mouse 13: 1 math error 15: 1520 eth0`

   Ist der Interrupt nicht aufgeführt, stimmt vermutlich die Ressourcenzuteilung im Modul und/oder im Konfigurationsfile nicht.

5. Damit die Karte zukünftig gleich beim Hochfahren des Systems initialisiert wird, ist (bei SuSE) z.B. die Datei `boot.local` um die beiden Einträge aus Punkt 3 zu ergänzen. Bei SuSE befindet sich ein entsprechender Eintrag in der Datei `/sbin/init.d/boot`, so dass bei Existenz der Datei `/etc/isapnp.conf` das Tool `isapnp` automatisch gestartet wird.

## Tipps zu Plug&Play-Soundkarten

Die obige Beschreibung gleicht eher einer komplizierten Bastelanleitung...

Speziell zur Administration von Plug&Play-Soundkarten hat RedHat ein Frontend geschaffen, das automatisch die korrekten Einstellungen in der Datei `/etc/isapnp.conf` vornimmt.

Den auf RedHat basierenden Distributionen liegt das Tool `sndconfig` ohnehin bei; wer eine andere Distribution verwendet, kann sich die Sourcen von einem der zahlreichen FTP-Server besorgen und das Programm übersetzen.

Nach dem Start des Programmes versucht `sndconfig` die Soundkarte automatisch zu erkennen. Ist die Suche erfolgreich, werden kurze Klangdateien abgespielt und die Konfiguration getestet.

Scheitern obige Versuche, fordert das Tool zur Angabe der im System befindlichen Soundkarte auf.

Mit "OK" gelangt man in einen Dialog, der zur Angabe der Parameter Interrupts, DMA-Kanäle und IO-Ports auffordert. Die voreingestellten Werte entsprechen den Standardwerten des jeweiligen Kartentyps.

Mit "OK" werden die Einstellungen übernommen und die Konfiguration wiederum anhand von Klangbeispielen verifiziert. Geht etwas schief, deutet die Ausschrift meist auf das Problem hin, z.B. dass der Interrupt von einem anderen Gerät benutzt wird. Hier hilft nur, die Einstellungen durchzuprobieren, bis eine Konstellation konfliktfrei funktioniert. Viele Soundkartenchips lassen sich als unterschiedliche Typen konfigurieren (z.B. als Sb16 und/oder WSS), somit ist der Test eines anderen Kartentyps ein weiterer Versuch, seinem System die Töne beizubringen.