ISDN TA CARD, PCI BUS mit HFC Chipsatz unter Debian lenny installieren (zaphfc Treiber)



Umstieg von Debian Etch auf Debian Lenny

Zum Ansprechen der Karte werden die zaptel Treiber und ein bristuff gepatches asterisk verwendet.
Dies habe ich nur unter Einsatz von Debian Lenny (testing) als Betreibssystem hinbekommen. Um aus einem etch ein lenny zu machen muss man zunächst die Datei /etc/apt/sources.list bearbeiten. Sie sollte am Ende folgendermaßen aussehen (Ihr könnt natürlich einen anderen Repo-Server einstellen):

deb http://ftp.de.debian.org/debian/ lenny main non-free contrib
deb-src http://ftp.de.debian.org/debian/ lenny main non-free contrib

Dann muss man auf der Kommandozeile folgendes ausführen und geduldig sein:
apt-get update
apt-get upgrade
reboot



Kernel Headers

Jetzt muss noch sichergestellt sein, dass die Kernel-headers vorhanden sind. Wenn Ihr euch bereits einen eigenen Kernel kompiliert habt, und das Verzeichniss in dem Ihr kompiliert habt noch vorhanden ist, habt Ihr alles was Ihr braucht.

Wenn Ihr den Standard Kern nutzt dann müsst Ihr die Kernel Header mit folgedem Befehl nachinstallieren:

apt-get install linux-headers-2.6.22-3-686

Gegebenenfalls (wenn Ihr eine andere Kern Version nutzt als linux-image-2.6.22-3-686) müsst Ihr die Nummer am Ende des Befehls anpassen. Mit
uname -r

könnt Ihr Euch anzeigen lassen welcher Kern auf Eurem System gerade läuft.



Installation der zaphfc Treiber und des bristuff gepachten asterisk

cd /usr/src wget http://www.junghanns.net/downloads/bristuff-0.3.0-PRE-1y-o.tar.gz
tar -xzf bristuff-0.3.0-PRE-1y-o.tar.gz
cd bristuff-0.3.0-PRE-1y-o
./install.sh
cd zaptel
make config
cd ..

Damit ist asterisk und der zaphfc Treiber installiert.

Jetzt noch Beispielkonfigurationen für asterisk generieren.
ACHTUNG: damit bereits bestehende configs in /etc/asterisk überschrieben.
cd asterisk
make samples


Jetzt starten wir mal den Treiber für die ISDN Karte.
modprobe zaphfc
genzaptelconf -c de -d -v


Diese beiden Befehle müssen nach jedem Neustart des Computers erneut ausgeführt werden. Das kann man natürlich auch skripten.
dmesg


zeigt uns an, ob und ggf. mit welchen Fehlern der Treiber geladen wurde.

Mir bekannte Fehler

Diese müssen nicht sofort beim Laden des Treibers auftreten:


zaphfc: empty HDLC frame or bad CRC received (framelen = 2, stat = 0xff, card = 0).
zaphfc: empty HDLC frame or bad CRC received (framelen = 3, stat = 0xff, card = 0).
Ich habe nicht die geringste Ahnung was das bedeuten soll. Aus verschiedenen Forenthreads schliesse ich (verbessert mich bitte, falls ich falsch liege), dass das davon kommen kann, dass die ISDN Karte sich einen IRQ mit dem SATA Controller teilen muss. Leider ist das bei dem hier beschriebenen Jetway Mainboard nicht zu ändern. Die IRQ Belegung Eures Rechenrs lasst Ihr Euch mit

cat /proc/interrupts

anzeigen.
Der Einsatz der Karte hat trotz diesem Fehler funktioniert.



zaphfc: sync lost, pci performance too low. you might have some cpu throtteling enabled.
Dieser Fehler ist gemein, den sobald er auftrat hat er den CPU sehr stark belastet. Der Fehler tritt reproduzierbar bei hoher Prozessorlast auf. Daraufhin meckert der Treiber den LOG Daemon an, also schickt ihm die Zeilen, die er ins Log schreiben soll. Und das in einer so hohen Geschwindigkeit, dass dieser Vorgang reicht um den 1,2GHz CPU des Jetway auszulasten. Es ist also ein Teufelskreis.
Meine (zugegebenermassen recht plumpe) Lösung ist den zaphfc so zu verändern, dass er nicht mehr meckert. Dazu beendet man den laufenden Treiber mit
rmmod zaphfc

und kommentiert man die Zeilen 700 bis 703 in der Datei /usr/src/bristuff-0.3.0-PRE-1y-o/zaphfc/main.c aus. Evtl. ändert sich der genaue Ort dieser IF Abfrage mit einer anderen Version von bristuff, d.h. der Code steht in anderen Zeilen. Dann sucht einfach in der Datei nach "zaphfc: sync lost, pci performance too low. you might have some cpu throtteling enabled." und ändert den Code, dass er folgendermassen aussieht:
/*if (s2 & hfc_M2_PMESEL) {
// kaboom irq (bit 7)
printk(KERN_CRIT "zaphfc: sync lost, pci performance too low. you might have some cpu throtteling enabled.\n");
}*/

Anschliessend muss der Treiber neu kompiliert werden.
make clean
make
make install
genzaptelconf -c de -d -v

Es kann sein, dass er hier noch meckert, dass er die Kernel Headers im Verzeichniss /usr/src/linux-2.6 erwartet. Dann müsst Ihr noch einen Symlink vondem Verzeichniss in dem Euer Kernel Header tatsächlich liegt dahin setzen:
ln -s /usr/src/VERZEICHNISSEURERHEADER /usr/sr/linux-2.6

Gelegentlich bleibt der Computer hängen Das kann an allem möglichen hängen, aber ich habe die Erfahrung gemacht, dass es (zumidest bei mir) nicht mehr passiert, wenn man ACPI im BIOS ausstellt.