Inhalt

3. Hardware-Modul laden

Die Treiber für die Hardware werden durch Module bereitgestellt. Man könnte die notwendigen Treiber auch direkt in den Kernel einkompilieren, aber davon ist abzuraten.

Für das I4L-Subsystem ist das Modul isdn zuständig, das je nach Kompilierung noch das Modul slhc benötigt.

Diese Module sind für den eigentlichen Hardwaretreiber Voraussetzung und müssen vorher geladen sein. Wenn man die Module über das Tool modprobe lädt, braucht man sich darum aber nicht zu kümmern, da dadurch die Abhängigkeiten selbständig geprüft werden.

Merke: Benutze nur modprobe zum Laden der Module.

Je nach verwendeter Hardware sind unterschiedliche Module notwendig. Für passive ISDN-Karten ist das Modul HiSax notwendig. Für aktive Karten werden herstellerspezifische Module benötigt.

3.1 isdnlog konfigurieren

Der isdnlog horcht ständig auf dem D-Kanal und liefert uns sowohl zur Diagnose, als auch später zur Auswertung wichtige Daten. Der isdnlog wird kurz nach dem Laden des HiSax-Treibers gestartet; bei aktiven Karten siehe weiter unten.

Wir gehen später auf die Funktionen und den Start des isdnlog ein, hier nur kurz die wichtigsten Punkte zur Konfiguration:

/etc/isdn/isdn.conf

Es werden einige Daten über die Umgebung mitgeteilt, z.B. den Areacode (Vorwahl), den i4l nicht automatisch ermitteln kann.

Passe in dem Beispiel zumindest den Areacode an:

# Beispiel für /etc/isdn/isdn.conf
# Kopiere diese Datei nach /etc/isdn/isdn.conf und
# editiere sie
#
# Mehr Informationen: 
#     /usr/doc/packages/i4l/isdnlog/README


[GLOBAL]
COUNTRYPREFIX   = +
COUNTRYCODE     = 49
AREAPREFIX      = 0

# Editiere diese Zeile:
AREACODE        = 911

# Beispiel:
#AREACODE        = 911 # Nürnberg

[VARIABLES]

[ISDNLOG]
LOGFILE = /var/log/isdn.log
ILABEL  = %b %e %T %ICall to tei %t from %N2 on %n2
OLABEL  = %b %e %T %Itei %t calling %N2 with %n2
REPFMTWWW  = "%X %D %17.17H %T %-17.17F %-20.20l SI: %S %9u %U %I %O"
REPFMTSHORT  = "%X%D %8.8H %T %-14.14F%U%I %O"
REPFMT  = "  %X %D %15.15H %T %-15.15F %7u %U %I %O"
            

Optionen für isdnlog

isdnlog verträgt eine Menge Optionen, die man entweder als Kommandozeilenparameter, oder über eine Konfigdatei mitgeben kann.

Bei SuSE wird die Datei /etc/isdn/isdnlog.isdnctrl0.options verwendet (0: erste Karte, 2: zweite Karte, 4: dritte Karte), und beim Start des isdnlog mit dem Parameter -f übergeben. Diese Datei ist kommentiert und enthält die wichtigsten Parameter.

Mehr Infos gibt es in der README-Datei zu isdnlog, die in dem Quellpaket dabei ist. Bei SuSE ist die Datei unter /usr/doc/packages/i4l/isdnlog/README zu finden.

Von Hand sollte isdnlog mit mindestens folgenden Optionen gestartet werden:

isdnlog -D -l1015 -x4087 -M -n -W80 /dev/isdnctrl0 &

Telefonbuch (optional)

isdnlog kann den ein- und ausgehenden Nummern automatisch einen Aliasnamen zuweisen, der statt der Telefonnummer angezeigt wird. Diese Daten stehen in: /etc/isdn/callerid.conf. Beispiel:

[NUMBER]
NUMBER = +4991152145922
ALIAS  = Eunet-N
ZONE   = 1
            

Darüber lassen sich auch weitere Aktionen definieren, z.B. das Starten eines bestimmten Programmes beim Klingeln.

3.2 Plug&Play-Karten

PnP-Karten müssen im 2.0er Kernel noch manuell konfiguriert werden. Das ist etwas mühsam, muß aber zum Glück nur einmal gemacht werden.

Zum Konfigurieren unter Linux dient das Paket isapnp, das zwei Programme enthält:

pnpdump

Dieses Programm scannt den ISA-Bus nach Karten und erstellt eine Vorlage für die Konfigurationsdatei.

isapnp

Mit diesem Tool werden die PnP-Karten entsprechend der Konfigurationsdatei initialisiert.

Erst nachdem die Karte(n) hiermit konfiguriert wurde(n), kann durch Treiber auf die Hardware zugegriffen werden. PnP-Karten können also nur durch Module, jedoch nicht durch fest in den Kernel einkompilierte Treiber benutzt werden.

Zuerst suchen wir nach PnP-Karten, aber Vorsicht: pnpdump kann den Rechner zum Stillstand bringen. Starte das Programm nicht unter X und möglichst nur im Single-User-Mode.

Die Ausgabe von pnpdump leiten wir gleich in die Konfigurationsdatei um:

pnpdump > /etc/isapnp.conf
        

Hier ein Beispiel für eine Elsa QS3000:

# 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)
#
# For latest information on isapnp and pnpdump see:
# http://www.roestock.demon.co.uk/isapnptools/
#
# Compiler flags: -DREALTIME -DNEEDSETSCHEDULER
#
# Trying port address 0203
# Board 1 has serial identifier e5 00 00 00 00 34 01 93 15

# (DEBUG)
(READPORT 0x0203)
(ISOLATE)
(IDENTIFY *)

# Card 1: (serial identifier e5 00 00 00 00 34 01 93 15)
# ELS0134 Serial No 0 [checksum e5]
# Version 1.0, Vendor version 0.0
# ANSI string -->ELSA QuickStep 3000<--
#
# Logical device id ELS0134
#
# Edit the entries below to uncomment out the configuration required.
# Note that only the first value of any range is given, this may be changed if r
equired
# Don't forget to uncomment the activate (ACT Y) when happy

(CONFIGURE ELS0134/0 (LD 0

# Multiple choice time, choose one only !

#     Start dependent functions: priority acceptable
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x0160
#             Maximum IO base address 0x0360
#             IO base alignment 16 bytes
#             Number of IO addresses required: 16
#(IO 0 (BASE 0x0160))
#       IRQ 3, 4, 5, 7, 10, 11, 12 or 15.
#             High true, edge sensitive interrupt (by default)
#(INT 0 (IRQ 3 (MODE +E)))

#     End dependent functions
#(ACT Y)
))
# End tag... Checksum 0x00 (OK)

# Returns all cards to the "Wait for Key" state
(WAITFORKEY)
        

Anhand der ausgegebenen Identifier kann man erkennen, welche Karten erkannt wurden und ob es überhaupt PnP-Karten gibt. Diese Datei wird editiert; die Kommentarzeichen müssen entfernt werden und ggf. passende Werte eingesetzt werden. In den Kommentaren werden gültige Werte angegeben.

(IO 0 (BASE 0x0160))
(INT 0 (IRQ 3 (MODE +E)))
(ACT Y)
        

Man beachte, daß auch (ACT Y) gesetzt werden muß. Ansonsten passiert gar nichts. Diese Konfiguration kann nun auf die PnP-Karte heruntergeladen werden:

isapnp /etc/isapnp.conf
Board 1 has Identity e5 00 00 00 00 34 01 93 15:  ELS0134 Serial No 0 [checksum e5]
        

Die Ausgabe ist leider nicht sehr aufschlußreich, aber man sollte zumindest den Identifier der Karte erkennen.

Bei SuSE wird das isapnp Kommando automatisch in den Init-Skripten ausgeführt. Ansonsten muß man selbst für diesen Aufruf sorgen.

3.3 HiSax-Treiber laden

Dem HiSax-Treiber wird durch Parameter beim Laden mitgeteilt, nach welcher Karte bzw. welchen Karten an welchen Adressen zu suchen ist.

Laden mit YaST

Bei SuSE kann die Konfiguration der ISDN-Hardware mittels YaST in der Maske Administration des Systems, Hardware in System integrieren, ISDN-Hardware konfigurieren vorgenommen werden. Neben der Auswahl der Karte und dem Setzen der Parameter kann hier auch sofort das Modul geladen werden, und zwar durch Starten. Bei Problemen kann man sofort andere Werte probieren. Bei Erfolg werden die Parameter mittels Speichern in rc.config abgelegt, so daß die Module beim nächsten Systemstart wieder geladen werden.

Die Syntax ist in

/usr/src/linux/Documentation/isdn/README.HiSaX
beschrieben.

Laden über /etc/rc.config

Die ISDN-Hardware kann direkt in der /etc/rc.config eingetragen und/oder kontrolliert werden. Die Variablen sind kommentiert. Hier ein Beispiel für eine Elsa QS-3000:

#
# i4l starten? ("yes" oder "no")
#   siehe: /usr/doc/packages/i4l/README.SuSE
#
I4L_START="yes"

#
# Treiber-ID für HiSax-Treiber
#   - auf "HiSax" setzen
#   - oder auf das, was immer Du beim Laden des Treibers
#     ins Kernel definiert hast
#   - auf "" setzen, falls keine HiSax-Karte installiert
#     ist
#
I4L_TELES_ID="hisax1"

#
# D-Kanal Protokoll 1=1TR6, 2=EDSS1(Euro-ISDN) für HiSax
#
I4L_PROTOCOL="2"

# Typ   ISDN-Karte               Benötigte Parameter
  ---   ----------               -------------------
#   1   Teles 16.0               irq, mem, io
#   2   Teles  8.0               irq, mem
#   3   Teles 16.3 (nicht PnP)   irq, io
#   4   Creatix/Teles PnP        irq, io0 (ISAC), 
#                                io1 (HSCX)
#   5   AVM A1 (Fritz)           irq, io
#   6   ELSA PCC/PCF cards       io oder nichts für eine
#                                automatische Erkennung
#                                (die iobase ist nur not-
#                                wendig, falls Du mehr als
#                                eine ELSA-Karte im PC
#                                hast)
#   7   ELSA Quickstep 1000      irq, io (vom isapnp
#                                        Setup)
#   8   Teles 16.3 PCMCIA        irq, io
#   9   ITK ix1-micro Rev.2      irq, io
# seit: HiSax 2.5:
#  10   ELSA PCMCIA              irq, io (mit dem Card 
#                                        Manager setzen)
#  11   Eicon.Diehl Diva ISA PnP irq, io
#  11   Eicon.Diehl Diva PCI     keine Parameter
#  12   ASUS COM ISDNLink        irq, io (vom isapnp
#                                        Setup)
#  13   HFC-2BS0 basierte Karten irq, io
#  15   Sedlbauer Speed Karte    irq, io
#       (= Teledat 100)
#  16   USR Sportster intern     irq, io
#  17   MIC Karte                irq, io
#  18   ELSA Quickstep 1000PCI   keine Parameter
#
I4L_TELES_TYPE="7"

#
# IRQ für Teles Karte
#   z.B. 12 oder 15 wenn als Modul geladen
#   auf "" setzen, wenn der Treiber fest im Kernel ist
#
I4L_TELES_IRQ="3"

#
# Portadresse der Teles Karte (z.B. 0xd80, "0" für S0/8)
#
I4L_TELES_PORT="0x0160"
            

Der String TELES hat hier nur historische Gründe.

Mit diesen Angaben wird die Parameterzeile für den HiSax-Treiber selbständig generiert. Zusätzlich kann man auch die Parameterzeile komplett selbst vorgeben, was z.B. bei neuen Karten notwendig ist, oder wenn man mehrere Karten einbinden will (s.u.).

Beispiel für eine AVM-Fritz und eine ELSA PCF-Karte:

I4L_TELES_MODUL_OPTIONS="type=5,6 protocol=2,2 io=0x340 \
                        irq=10 id=Fritz%Elsa"
            

Zum Laden der Module benutzt man dann ein Init-Skript:

# /sbin/init.d/i4l_hardware start
Loading ISDN drivers ...
Loading HiSax driver ...
/sbin/insmod /lib/modules/2.0.33/misc/hisax.o id=hisax1 \
             type=7 protocol=2 irq=3 io=0x0160
Verbose-level set to 3.
Starting isdnlog with /etc/isdn/isdnlog.isdnctrl0.options for isdnctrl0...
            

Man beachte, daß hiermit automatisch der isdnlog gestartet wird. Zum Entladen benutze man dasselbe Skript:

# /sbin/init.d/i4l_hardware stop 
Unloading ISDN drivers ...
            

Laden von Hand

Die Syntax ist in

/usr/src/linux/Documentation/isdn/README.HiSax
beschrieben. Für eine ELSA-QS3000 gebe man z.B. ein:
modprobe -v hisax id=hisax1 type=7 protocol=2 irq=3 \
         io=0x0160
            

Weiterhin sollten nach dem erfolgreichen Laden folgende Kommandos ausgeführt werden:

/sbin/hisaxctrl hisax1 1 4
/sbin/isdnctrl verbose 3
/sbin/isdnlog /dev/isdnctrl0
            
Erklärt werden diese Kommandos in den entsprechenden Manual Pages und der mitgelieferten Dokumentation. Mit den SuSE-Skripts ist es halt einfacher ;-).

Troubleshooting

Während des Ladens des HiSax-Moduls bekommt man im Fehlerfall auf der Konsole keine aussagekräftigen Meldungen, sondern meist nur ein Device or resource busy. Die echten Fehlermeldungen werden via Syslog zumeist in /var/log/messages gespeichert.

Beispiel für einen Mißerfolg beim Laden des Treibers für eine AVM-Fritz-Karte:

Feb  6 22:45:05 glen kernel: HiSax: Driver for Siemens chip set ISDN cards
Feb  6 22:45:05 glen kernel: HiSax: Version 2.1
Feb  6 22:45:05 glen kernel: HiSax: Revisions 1.15/1.10/1.10/1.30/1.8
Feb  6 22:45:05 glen kernel: HiSax: Total 1 card defined
Feb  6 22:45:05 glen kernel: HiSax: Card 1 Protocol EDSS1 Id=HiSax (0)
Feb  6 22:45:05 glen kernel: HiSax: AVM driver Rev. 1.6
Feb  6 22:45:05 glen kernel: AVM A1: Byte at 1b00 is ff
Feb  6 22:45:05 glen kernel: AVM A1: Byte at 1b03 is ff
Feb  6 22:45:05 glen kernel: AVM A1: Byte at 1b02 is ff
Feb  6 22:45:05 glen kernel: AVM A1: Byte at 1b00 is ff
Feb  6 22:45:05 glen kernel: HiSax: AVM A1 config irq:12 cfg:1b00
Feb  6 22:45:05 glen kernel: HiSax: isac:1700/1300
Feb  6 22:45:05 glen kernel: HiSax: hscx A:700/300  hscx B:f00/b00
Feb  6 22:45:05 glen kernel: AVM A1: HSCX version A: ???  B: ???
Feb  6 22:45:05 glen kernel: AVM A1: ISAC 2085 V2.3
Feb  6 22:45:05 glen kernel: AVM A1: wrong HSCX versions check IO address
Feb  6 22:45:05 glen kernel: HiSax: Card AVM A1 not installed !
            

Hier wurde an der angegebenen Portadresse keine Fritz-Karte gefunden. Es war auch keine vorhanden ;-). Anhand dieser Meldungen sollte man leicht erkennen können, was die genaue Ursache ist. Weitere häufige Fehler sind:

  1. could not get interrupt: mit dem angegebenen IRQ kann nicht gearbeitet werden. Probiere einfach einen anderen. Nicht belegte IRQs kann man durch
    cat /proc/interrupts
    ermitteln.
  2. Die Portadresse wird nicht erkannt, obwohl alles richtig scheint. Es handelt sich um eine PnP-Karte und isapnp wurde vergessen; siehe hierzu Abschnitt Plug&Play-Karten.
  3. Die Portadresse wird nicht erkannt, obwohl alles richtig scheint. Es wird eine Teleskarte verwendet, man kann also nicht wissen, um welchen Typ es sich wirklich handelt. Als Abhilfe sollte man sich die neueste HiSax-Version besorgen und alles ausprobieren, siehe hierzu Abschnitt Installation.

Bei hartnäckigem Mißerfolg wende Dich an einen guten Bekannten oder an die Mailingliste. Es sollte unbedingt ein Ausschnitt aus /var/log/messages angegeben werden.

3.4 Hardware testen

Der beste und einfachste Test ist, sich selber anzurufen.

Es spielt hierbei keine Rolle, ob man von einem internen oder externen Analog- oder ISDN-Telefon anruft. Es wird auch keine Verbindung zustande kommen. Wichtig ist nur, daß man in /var/log/messages eine Meldung über den Anruf finden kann.

Beispiel für einen Voice-Call auf der MSN 123459:

Apr  6 22:15:20 glen kernel: isdn_net: call from 911123458,1,0 -> 123459
Apr  6 22:15:20 glen kernel: isdn_net: Service-Indicator not 7, ignored
        
Bei diesem Beispiel handelt es sich um einen Voice-Call (Service-Indicator: 0) von einem Anschluß mit Rufnummernübermittlung von der MSN 123458 aus dem Ortsnetz 0911 an die eigene MSN 123459. Nein, das ist nicht meine echte Nummer ;-).

Wichtig ist hier vor allem die Angabe der Zielrufnummer hinter dem Pfeil, hier 123459. Man sollte hier alle eigenen Nummern durchprobieren. So wie es dort angegeben ist, ist auch später die eigene MSN zu setzen.

3.5 Übung: Hardware ansprechen

Ziel dieser Übung ist: die ISDN-Karte soll angesprochen und geprüft werden.

Welche Hardware/Umgebung habe ich?

Notiere Dir:

  1. Welche Karte hab ich (Hersteller, Typ, etc.)?
  2. Wie ist die Karte gejumpert (Port)?
  3. Mit welchen Werten kann die Karte unter anderen Systemen angesprochen werden?
  4. Welches Protokoll wird auf dem S0-Bus benutzt (1TR6, DSS1)?
  5. Wo ist die ISDN-Karte angeschlossen (NTBA, TK-Anlage)?
  6. Welche MSNs kann ich auf diesem S0-Bus benutzen?

Schlimmstenfalls mußt Du Deinen Rechner aufschrauben, das falsche Betriebssystem booten und/oder den Administrator nerven.

Betrachte messages

Nur in /var/log/messages steht die Wahrheit, sie ist für die gesamte Konfigurationsarbeit (und später) zu verfolgen.

Öffne mindestens zwei virtuelle Linux-Konsolen oder unter X zwei xterms.

Auf einer Konsole starte entweder:

PnP Karte?

Falls es sich um eine Plug&Play-Karte handelt, konfiguriere sie; wenn Du es nicht weißt, starte pnpdump. Siehe hierzu Abschnitt Plug&Play-Karten.

Modul laden

Lade das entsprechende Modul nach Deiner bevorzugten Methode, also YaST ;-). Stelle sicher, daß die Einstellungen notiert sind und beim Systemstart automatisch das Modul wieder geladen wird.

Prüfe mit lsmod, ob das Modul geladen ist. Prüfe mit ps ax | grep isdnlog, ob der isdnlog läuft. Prüfe, ob /var/log/messages normal aussieht.

Siehe auch Abschnitt HiSax-Treiber laden.

ISDN testen

Rufe Dich selbst an und notiere alle MSNs, unter denen Du angerufen werden kannst. Siehe Abschnitt Hardware testen.


Inhalt